Windows Terminal 接受鼠标事件之后返回的Type值为什么是 1--键盘事件 啊?
Windows Terminal的版本:1.17.11461.0
在 Windows Terminal 中,鼠标事件会被抓取并处理为虚拟的键盘事件发送给应用程序。所以应用程序接收到的事件类型为 KEY_EVENT(值为 1)。
这是 Windows Terminal 为了向后兼容而做出的设计。很多旧的控制台应用程序并不支持直接处理鼠标事件,所以 Windows Terminal 会将鼠标事件转换为键盘事件后再发送给这些应用程序。
如果你的应用程序希望直接处理鼠标事件,可以检查事件的参数 evt.mouse_position 或 evt.mouse_button 来判断这实际是一条鼠标事件。evt.mouse_position 会包含鼠标光标的位置,evt.mouse_button 会包含鼠标按键信息。
所以你的应用程序可以这样处理:
cpp
void handle_input(INPUT_RECORD* evt) {
if (evt->EventType == KEY_EVENT && evt->Event.KeyEvent.bKeyDown) {
// 先判断是键盘事件
// ...
} else if (evt->EventType == MOUSE_EVENT) {
// 然后再判断是否包含鼠标位置信息,如果有则说明是鼠标事件
if (evt->Event.MouseEvent.dwMousePosition.X != 0 &&
evt->Event.MouseEvent.dwMousePosition.Y != 0) {
// 处理鼠标事件
// ...
}
}
}
可能是因为版本更新或配置问题导致的。首先,我建议你尝试升级 Windows Terminal 到最新版本,以查看是否存在已知的问题和修复。
如果升级后仍然存在相同的问题,请确保已正确配置 Windows Terminal 的相关设置。你可以按照以下步骤进行检查:
profiles.json
文件中,找到你想要编辑的配置文件。{
// ...其他设置...
"useMouseInput": true
}
保存文件后,重新启动 Windows Terminal 并测试鼠标事件是否仍然返回键盘事件的 Type 值。