Lazy 2019-07-19 14:23 采纳率: 0%
浏览 758

请问为什么VS2019控制台无法监听鼠标事件

这个程序的作用是把鼠标放入控制台,控制台就能显示鼠标当前坐标;
结果我用vs的 "本地windows调试器"运行,发现它监听不了鼠标事件,控制台的属性如下:
图片说明图片说明

但是在codeblock里运行却可以:
图片说明

请问这是为什么?

程序代码如下:
#include
#include

int main(void)
{
// 获取标准输入输出设备句柄
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE);

CONSOLE_SCREEN_BUFFER_INFO bInfo;
INPUT_RECORD    mouseRec;
DWORD           res;
COORD           crPos, crHome = { 0, 0 };

printf("[Cursor Position] X: %2lu  Y: %2lu\n", 0, 0);   // 初始状态

while (1)
{
    ReadConsoleInput(hIn, &mouseRec, 1, &res);

    if (mouseRec.EventType == MOUSE_EVENT)
    {
        if (mouseRec.Event.MouseEvent.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED)
        {
            if (mouseRec.Event.MouseEvent.dwEventFlags == DOUBLE_CLICK)
            {
                break;  // 左键双击 退出循环
            }
        }

        crPos = mouseRec.Event.MouseEvent.dwMousePosition;
        GetConsoleScreenBufferInfo(hOut, &bInfo);
        SetConsoleCursorPosition(hOut, crHome);
        printf("[Cursor Position] X: %2lu  Y: %2lu", crPos.X, crPos.Y);
        SetConsoleCursorPosition(hOut, bInfo.dwCursorPosition);

        switch (mouseRec.Event.MouseEvent.dwButtonState)
        {
        case FROM_LEFT_1ST_BUTTON_PRESSED:          // 左键 输出A
            FillConsoleOutputCharacter(hOut, 'A', 1, crPos, &res);
            break;      // 如果使用printf输出,则之前需要先设置光标的位置

        case RIGHTMOST_BUTTON_PRESSED:              // 右键 输出a
            FillConsoleOutputCharacter(hOut, 'a', 1, crPos, &res);
            break;

        default:
            break;
        }
    }
}

CloseHandle(hOut);  // 关闭标准输出设备句柄
CloseHandle(hIn);   // 关闭标准输入设备句柄
return 0;

}

  • 写回答

1条回答 默认 最新

  • 天字第零号 2019-07-19 21:30
    关注

    vs2019默认调用win10的PowerShell,图二明显是windows自带的命令提示符

    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题