我正在尝试做像Skype这样的计时器式的东西。如果用户“离开”一段时间,我会触发某些事情。我一直在使用带有WM_KEYBOARD_LL的SetWindowsHookEx()工作正常。这是直到您打开RDC连接并全屏显示。然后我从未得到键盘事件。
有人碰到过这个吗?或者知道更好的方法来实现这一目标?我实际上已经测试了skype并且使用全屏RDC,如果我输入RDC,它将正确地从Away变为Online。
由于
编辑:在Raymond Chen的评论之后,我做了一些测试,他是对的。无法相信我在搜索之后从未找到过这种方法。它还解决了我在WPF应用程序中没有触发LL_Mouse / KEYBOARD事件时遇到的问题。再次感谢。根据此更新我接受的答案。如果你需要做LL_MOUSE / KWYBOARD,另一个答案仍然是好的。
答案 0 :(得分:3)
看看GetLastInputInfo()
。尝试定期打电话。
答案 1 :(得分:2)
是。你不会在远程桌面上按下键。我遇到了这个问题,我找到的唯一解决办法是:
使用FindWindow API总是查找RDP窗口,如果您已检测到已创建全屏RDP窗口,则应执行以下操作:
a)解开所有钩子。 b)重置所有挂钩。
因此,创建一个函数,使SetWindowHookEx API调用并将其称为SetHook,另一个函数作为UnHook函数。然后在您发现用户进入远程桌面的任何时候重新调用它们。
现在,即使在远程桌面连接中也可以按下按键。
我发现了我的旧代码,我做了类似的事情:
创建一个1秒钟的计时器。 然后
std::string tmp;
HWND hParent = ::FindWindow(TEXT("TSHELLHWND"), NULL);
GetWindowString(hParent, tmp);
ix = za.find(" - Remote Desktop");
if (hParent != NULL && ix != string::npos)
RestartHook();
您还应该有一个全局变量来设置何时重新启动挂钩,否则它将一直重新启动挂钩。当窗口关闭时,您可以重置该全局变量。