首页 文章

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

提问于
浏览
0

我有一个透明窗口(WS_EX_TRANSPARENT)浮动最顶层 .

每当鼠标移动(屏幕上的任何位置)或键盘敲击时,它都需要显示相关信息(例如鼠标位置) .

是否可以在不使用全局钩子的情况下捕获鼠标/键盘活动?防病毒软件几乎总是会触发使用全局挂钩的错误警报 .

任何想法都非常感激 .

4 回答

  • 0

    我想,GetAsyncKeyStateGetCursorPos可能有所帮助 . 您可能每隔300-500毫秒就有一个线程调用这些函数,并向主线程发送消息 .

  • 1

    您可以通过RegisterRawInputDevices注册接收原始输入消息 . 看看over here,在RRUZ接受的答案中有一些链接,一个指向C#实现 . 这适用于窗口消息,不涉及钩子 .

    (使用此方法,您还可以获得有关输入来自的特定设备的信息,因此您可以区分多个键盘 . 这是大多数以“使用RegisterRawInputDevices”作为答案的问题正在进行中 . 但您也可以使用它来捕获输入,不关心来源 . )

  • -1

    您可以收到键盘/鼠标活动的通知( GetLastInputInfo ),我相当肯定您可以获得光标位置( GetMouseMovePointsEx ) . 如果你不需要实际的键盘敲击,那么应该这样做 . 如果你这样做,我认为不能做到......

  • -1

    LASTINPUTINFO lastInputInfo = new LASTINPUTINFO(); UInt32 lastInputTick = lastInputInfo.dwTime; return Environment.TickCount - (Int32)lastInputInfo.dwTime

    此代码(C#)返回不活动时间(键盘和鼠标两者) . 因此,您可以拥有自用户处于非活动状态以来的时间 .

相关问题