我有一个透明窗口(WS_EX_TRANSPARENT)浮动最上面。
只要有鼠标移动(屏幕上的任何地方)或键盘敲击,它就需要显示相关信息(例如鼠标位置)。
是否可以在不使用全局挂钩的情况下捕获鼠标/键盘活动?杀毒软件几乎总是会因使用全局挂钩而触发误报。
任何想法都非常感谢。
我有一个透明窗口(WS_EX_TRANSPARENT)浮动最上面。
只要有鼠标移动(屏幕上的任何地方)或键盘敲击,它就需要显示相关信息(例如鼠标位置)。
是否可以在不使用全局挂钩的情况下捕获鼠标/键盘活动?杀毒软件几乎总是会因使用全局挂钩而触发误报。
任何想法都非常感谢。
I guess, GetAsyncKeyState and GetCursorPos might help. You probably can have a thread calling these functions every 300-500 msec, and posting a message to your main thread.
您可以通过RegisterRawInputDevices 注册接收原始输入消息。看看这里,RRUZ 接受的答案中有一些链接,其中一个指向 C# 实现。这适用于窗口消息,不涉及挂钩。
(通过这种方法,您还可以获得有关输入来自的特定设备的信息,因此您可以区分多个键盘。这是大多数以“使用 RegisterRawInputDevices”作为答案的问题的标题。但您也可以使用它来捕获输入,不关心来源。)
您可以获得有关键盘/鼠标活动的通知 ( GetLastInputInfo
),而且我相当肯定您可以获得光标位置 ( GetMouseMovePointsEx
)。如果您不需要实际的键盘敲击,那么应该这样做。如果你这样做,我不认为它可以做到......
LASTINPUTINFO lastInputInfo = new LASTINPUTINFO();
UInt32 lastInputTick = lastInputInfo.dwTime;
return Environment.TickCount - (Int32)lastInputInfo.dwTime
此代码 (C#) 返回不活动时间(键盘和鼠标两者)。所以你可以有时间,因为用户是不活动的。