请问为什么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个回答

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

qq_43162161
天字第零号 回复 Lazy: 那就手动打开吧,只是没法debug
9 个月之前 回复
weixin_43569672
Lazy 试了之后还是不行,但是我运行两个一模一样的代码,发现有一个项目可以响应鼠标事件,有一个项目却不行
9 个月之前 回复
qq_43162161
天字第零号 有个使用旧版控制台选项你可以试一下
9 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问

相似问题

6
Java监听器里面写定时器问题
4
js,监听变量的变化时,怎么去修改返回值,下有详细
2
oracle11g数据库实例突然关了,监听也停了,请问这样的问题怎么排查?
1
为什么Python监听https获取到的是乱码?
2
springboot项目启动时注册监听器,使用springboot内置tomcat启动OK,打包部署后监听没反应不报错
1
vuex里的state如何监听?
2
关于redis 过期 key监听 数据量过大 导致消息延迟
2
js怎么监听一类标签的点击事件
1
java web中servlet规范的的监听器和spring的监听器有啥区别求指教
0
ol为地图容器添加单击事件监听无效
2
layui 多个相同下拉框如何监听事件
1
checkbox 点击选中的监听事件,只能从最后选中的地方开始监听,不知道自己错在哪里,大神们帮帮忙吧!
4
这个网页中滚动切换的效果是怎么做的?
1
关于8.0 notification ,当通知栏存在多条通知时会被折叠,点击折叠部分的跳转监听事件应该从哪里实现?
1
vue 完全独立的两个组件可以做到数据共享,数据监听吗?
2
vue使用swiper组件获得activeIndex后,如何实现实时监听activeIndex,如果发生变化则设置flag属性为false
0
用鼠标监听器输出JTable单元格的值,为什么每次输出对应单元格的值后还会输出之前的点击所对应的值?
1
如何在Android 9.0监听电源键
1
rabbitmq 在线上有5台服务器监听mq队列,怎么指定其中一台消费消息呢?
3
对监听到的文件下载时,下载的文件不完整如何解决?