Windows Terminal 鼠标事件异常

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 的相关设置。你可以按照以下步骤进行检查:

  1. 打开 Windows Terminal,点击窗口左上角的“下拉菜单”图标。
  2. 在菜单中选择 "Settings"(设置)。
  3. 在打开的 profiles.json 文件中,找到你想要编辑的配置文件。
  4. 确保 "useMouseInput"(使用鼠标输入)选项被设置为 true。
  5. 如果你有多个终端配置,在每个配置中都进行相同的更改。
{
    // ...其他设置...
    "useMouseInput": true
}

保存文件后,重新启动 Windows Terminal 并测试鼠标事件是否仍然返回键盘事件的 Type 值。