钩前景窗口

时间:2011-12-03 13:46:22

标签: c# .net windows

如何挂钩前景窗口?

目前我正在尝试

using (Process processTmp = Process.GetCurrentProcess())
{
  using (ProcessModule module = processTmp.MainModule)
  {
    IntPtr hModule = Win32.GetModuleHandle(module.ModuleName);
    uint threadid = Win32.GetWindowThreadProcessId(Win32.GetForegroundWindow(), IntPtr.Zero);

    //WH_CALLWNDPROC = 4
    m_HookId = Win32.SetWindowsHookEx(4, m_HookProcedure, hModule, threadid); 
    if (m_HookId == IntPtr.Zero)
    {
      int tmp =
        Marshal.GetLastWin32Error();
    }
  }
}

但是m_HookID总是IntPtr.Zero,错误1428 - 无法在没有模块句柄的情况下设置非本地挂钩(ERROR_HOOK_NEEDS_HMOD)。 所以似乎hModule出了问题。

有什么建议吗? TNX。

1 个答案:

答案 0 :(得分:2)

您无法将托管程序集注入流程。需要一个本机DLL,用C,C ++或Delphi等语言编写。 This project可能会作为您需要的DLL的来源。