He. W. 2021-12-04 18:52 采纳率: 50%
浏览 8
已结题

输出鼠标点击控制台的位置

问题相关代码,请勿粘贴截图
#include<windows.h>
#include<cstdio>
class Event{
    HANDLE hin,hout;
    DWORD oldMode;
    void ErrorExit (char* Error){
        fprintf(stderr,"%s\n",Error);
        SetConsoleMode(hin,oldMode);
        Sleep(2000);
        ExitProcess(0);
    }
public:
    Event(){
        hin=GetStdHandle(STD_INPUT_HANDLE);
        hout=GetStdHandle(STD_OUTPUT_HANDLE);
        if(hin==INVALID_HANDLE_VALUE)this->ErrorExit("GetStdInputHandleError!");
        if(hout==INVALID_HANDLE_VALUE)this->ErrorExit("GetStdOnputHandleError!");
        if(!GetConsoleMode(hin,&oldMode))ErrorExit("GetConsoleModeError!");
        if(!SetConsoleMode(hin,ENABLE_MOUSE_INPUT))ErrorExit("SetConsoleModeError!");

    }
    COORD GetMouseLeftPressPosition(){
        INPUT_RECORD Buf[128];
        DWORD inputSize;
        while(1){
            if(!ReadConsoleInput(hin,Buf,128,&inputSize))
                ErrorExit("ReadConsoleInputError!");
            for(int i=0;i<inputSize;i++)
                if(Buf[i].EventType==MOUSE_EVENT&&!Buf[i].Event.MouseEvent.dwEventFlags&&Buf[i].Event.MouseEvent.dwButtonState==FROM_LEFT_1ST_BUTTON_PRESSED)
                    return Buf[i].Event.MouseEvent.dwMousePosition;
        }
    }
};
int main(){
    Event e;
    COORD pos;
    while(1){
        pos=e.GetMouseLeftPressPosition();
        printf("x:%d y:%d",pos.X,pos.Y);
        Sleep(1000);
        system("cls");
    }
}

运行结果

明明是循环,却只能有一次输出

我想要达到的结果

每点一次控制台,都输出鼠标点击的位置

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 12月12日
    • 创建了问题 12月4日

    悬赏问题

    • ¥50 永磁型步进电机PID算法
    • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
    • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
    • ¥15 如何处理复杂数据表格的除法运算
    • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
    • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
    • ¥200 uniapp长期运行卡死问题解决
    • ¥15 latex怎么处理论文引理引用参考文献
    • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
    • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?