[英]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.