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