子类在C#中的本地应用程序(Subclass a native application from C

2019-10-16 21:12发布

我想处理鼠标点击,从C#应用程序的本机MFC应用程序。 要做到这一点,我想继承本机应用程序。 我没有得到任何错误,但WndProc的是较新的调用。

    private const int GwlWndProc = -4;
    private delegate int Win32WndProc(IntPtr hWnd, int msg, int wParam, int lParam);
    [DllImport("user32")]
    private static extern IntPtr SetWindowLong(IntPtr hWnd, int nIndex, Win32WndProc newProc);

    Win32WndProc _newWndProc = MyWndProc;

    SetLastError(0);
    IntPtr oldWndProc = SetWindowLong(hWnd, GwlWndProc, _newWndProc);
    if (oldWndProc == IntPtr.Zero)
    {
        int errorCode = Marshal.GetLastWin32Error();
        if (errorCode != 0)
            throw new Win32Exception(errorCode);
    }

private int MyWndProc(IntPtr hWnd, int msg, int wParam, int lParam)
    {
        Debug.WriteLine("MyWndProc " + (WindowsMessage)msg);
        if (msg == (int) WindowsMessage.LeftButtonDown)
        {
            MessageBox.Show("Clicked");
            return 0;
        }
        else return CallWindowProc(_subclasses[hWnd], hWnd, msg, wParam, lParam);
    }

编辑:要获得的hWnd我使用GetForegroundWindow()

我尝试做的是是防止应用程序获取鼠标点击

Answer 1:

我认为你需要使用挂钩,因为SetWindowLong函数不跨越不同的工作流程:看看这里http://www.codeproject.com/Articles/5264/Cross-Process-Subclassing



文章来源: Subclass a native application from C#