繁体   English   中英

屏幕保护程序 C++ 的键盘和鼠标事件检测

[英]Detection of Keyboard and Mouse events for Screensaver C++

我正在尝试使用 windows.h 和 PDCurses 在 C++ 中为自己构建一个简单的屏幕保护程序。

屏幕保护程序的一个基本部分是在移动鼠标、单击或按下键盘时关闭屏幕保护程序......等等。

我试图找到一种让 PDCurses 感知任何鼠标事件的方法,但无济于事,而且 windows.h 这样做的方法对于像我这样的 C++ 新手来说太复杂了,我想不出一种方法来感知键盘事件。 这是我的代码:

#include <windows.h>
#include <curses.h> //actually PDCurses is what I have.

int main()
{
    SetConsoleDisplayMode(GetStdHandle(STD_OUTPUT_HANDLE), CONSOLE_FULLSCREEN_MODE, 0);
    initscr();
    raw();
    keypad(stdscr, TRUE);
    noecho();
    curs_set(0);
    int doty = 1, dotx = 1, xm = 1, ym = 1, maxy, maxx;
    getmaxyx(stdscr, maxy, maxx);
    while(1){
        clear();
        mvaddch(doty - 1, dotx - 1, char(219));
        refresh();
        delay_output(35);
        if (doty >= maxy) ym = -1;
        if (dotx >= maxx) xm = -1;
        if (doty <= 1) ym = 1;
        if (dotx <= 1) xm = 1;
        dotx += xm;
        doty += ym;
    }
    endwin();
    return 0;
}

我将如何 go 检测任何键盘或鼠标事件?

使用 PDCurses 可以检测到的事件是有限制的——例如,它不会在没有按下按钮的情况下报告鼠标移动事件。 但是,要捕获所有可以捕获的事件——在while循环之前添加这些行:

nodelay(stdscr, TRUE);
mouse_on(ALL_MOUSE_EVENTS);
PDC_return_key_modifers(TRUE);

并在循环中添加:

int c = getch();
if (c != ERR)
    break;

我刚刚测试了这个(减去 Windows 行),并且在引用char(219)时出错——我建议用ACS_BLOCK替换它。 (完成后,它按预期工作。)

编辑:我添加了PDC_return_key_modifers(TRUE)以便例如 shift 键也将退出循环。

很抱歉回复晚了,因为我给了您一个网站链接,该链接可以帮助您进行键盘输入和鼠标感应。 对于鼠标按钮检测,请查看此网站:

https://docs.microsoft.com/en-us/windows/win32/inputdev/wm-mousemove 重定向自=MSDN

在您的代码中,我认为您可以这样做(单击鼠标左键):

if(0x0001)

{

// code

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM