覆盖不同进程的WindowProc?

时间:2013-07-24 10:52:34

标签: c# winapi hook wndproc

简单地说:我想评估WinApi发送到窗口的消息。此窗口不是我的应用程序的一部分。

<小时/> 因此,当消息发送到窗口时,假设notepad我想读取它们并将它们转发到记事本进程的实际窗口过程。什么是正确的方法? 到目前为止我有这个。但它似乎不起作用:

private static IntPtr hook = IntPtr.Zero;

private static IntPtr callWndProc(int code, IntPtr wParam, IntPtr lParam)
{
    Console.WriteLine("hello world");
    CWPSTRUCT a = new CWPSTRUCT();
    Marshal.PtrToStructure(lParam, a);
    Console.WriteLine(a.message);
    return Windows.CallNextHookEx(hook, code, wParam, lParam);
}

static void Main(string[] args)
{
    Process[] procs = Process.GetProcessesByName("notepad");
    if (procs.Length > 0)
    {
        hook = Windows.SetWindowsHookEx(WH_CALLWNDPROC, Marshal.GetFunctionPointerForDelegate((HookProc)callWndProc), procs[0].Handle, procs[0].Id);
        // last result: (126) The specified module could not be found.
        // hook == 0
    }
    Console.ReadKey();
}

0 个答案:

没有答案