Я хочу обработать щелчок мышью в приложении 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()
То, что я пытаюсь сделать, это, чтобы предотвратить приложение, чтобы получить мыши
Можете ли вы добавить свой код для того, где вы найдете дескриптор окна запуска собственного приложения? – MusiGenesis
Вы не можете сделать это на C#. Указатель функции должен быть действительным внутри процесса, которому принадлежит окно. Который требует инъекции DLL, вы не можете вводить управляемый код. –
@MusiGenesis Я использую GetForegroundWindow – magol