如何在没有全局钩子的情况下获得有关鼠标/键盘活动的通知?

| 我有一个透明的窗口(WS_EX_TRANSPARENT)浮在最上面。 每当有鼠标移动(屏幕上的任意位置)或键盘击键时,都需要显示相关信息(例如鼠标位置)。 是否可以在不使用全局钩子的情况下捕获鼠标/键盘活动?防病毒软件几乎总是会触发误报以使用全局 钩子。 任何想法,不胜感激。     
已邀请:
        我想,GetAsyncKeyState和GetCursorPos可能会有所帮助。您可能有一个线程,每300-500毫秒调用一次这些函数,并将一条消息发布到您的主线程。     
        您可以通过RegisterRawInputDevices注册接收原始输入消息。看看这里,RRUZ的公认答案中有一些链接,其中一个指向C#实现。这适用于窗口消息,不涉及任何挂钩。 (通过这种方法,您还可以获得有关输入来源的特定设备的信息,因此您可以区分多个键盘。这就是大多数使用“使用RegisterRawInputDevices”作为答案的问题的标题。但是您也可以使用它只捕获输入内容,而不关心源代码。)     
        您会收到有关键盘/鼠标活动的通知(
GetLastInputInfo
),我相当确定您可以获取光标位置(
GetMouseMovePointsEx
)。如果您不需要实际的键盘笔触,则应该这样做。如果您这样做,我认为这是不可能完成的...     
        
LASTINPUTINFO lastInputInfo = new LASTINPUTINFO();
UInt32 lastInputTick = lastInputInfo.dwTime;
return Environment.TickCount - (Int32)lastInputInfo.dwTime
此代码(C#)返回不活动时间(键盘和鼠标都)。这样您就可以有时间了,因为用户处于非活动状态。     

要回复问题请先登录注册