2012-06-19 2 views
1

Я хочу обработать щелчок мышью в приложении MFC из приложения C#. Для этого я пытаюсь подклассировать собственное приложение. Я не получаю никаких ошибок, но wndproc вызывается newer.Подкласс родного приложения от C#

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); 
    } 

Edit: Чтобы получить HWND я использую GetForegroundWindow()

То, что я пытаюсь сделать, это, чтобы предотвратить приложение, чтобы получить мыши

+0

Можете ли вы добавить свой код для того, где вы найдете дескриптор окна запуска собственного приложения? – MusiGenesis

+1

Вы не можете сделать это на C#. Указатель функции должен быть действительным внутри процесса, которому принадлежит окно. Который требует инъекции DLL, вы не можете вводить управляемый код. –

+0

@MusiGenesis Я использую GetForegroundWindow – magol

ответ