【问题标题】:Get a notification when a window is set as active当窗口设置为活动时获取通知
【发布时间】:2013-01-03 00:28:05
【问题描述】:

我正在尝试用 C++ 编写一个基本的键盘记录器,到目前为止,我设法使用 win api 安装了一个低杠杆键盘挂钩。每次按下一个键时它都会通知我。 我想做类似的事情,每次焦点切换到另一个窗口时通知我,所以我知道用户正在输入哪个窗口。 我试图设置一个 HW_CBT 钩子,但它没有给我任何通知。

最好的方法是什么?

编辑:

我已经编辑了这段代码:

LRESULT CALLBACK CallWndProc(int nCode, WPARAM wParam, LPARAM lParam) {
    cout<<"event";
    return CallNextHookEx(0, nCode, wParam, lParam);
}

SetWindowsHookEx(WH_CALLWNDPROC, CallWndProc, NULL, NULL);

我的程序中也有这个:

while(true)
  GetMessage(&msg,0,WM_KEYFIRST, WM_KEYLAST);

我在运行程序时仍然没有收到任何通知,除了关于击键的通知。

编辑 2!! 我使用GetWindowText()GetForegroundWindow() 和计时器完成了它。不是我想要的,但这会做。 我会接受第一个答案...

【问题讨论】:

  • 刚刚删除了我推荐 SetWindowsHookEx() 的答案,注意到您尝试了 WH_CBT 挂钩。尝试使用 WH_CALLWNDPROC 挂钩来监控所有消息。
  • 试试看……仍然没有收到任何通知……

标签: c++ winapi hook keylogger


【解决方案1】:

也许这对您有用? SetWindowsHookEx

安装一个钩子过程,在系统将消息发送到目标窗口过程之前监控消息

【讨论】:

  • 我用它来获取键盘事件。但是当活动窗口发生变化时,我应该安装什么类型的钩子来获取通知?我尝试了一个 cbt 钩子,但没有收到任何通知。
【解决方案2】:

尝试使用 WH_CALLWNDPROC 或 WH_CALLWNDPROCRET 钩子在 WM_ACTIVATE(窗口激活和取消激活的通知)消息被发送到实际窗口的窗口过程之前或之后发送到您的钩子。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多