SendMessage WM_LBUTTONDOWN / UP работает с кнопками, но не с окном - PullRequest
0 голосов
/ 09 августа 2010

Я пытаюсь отправить несколько простых сообщений мыши в Windows Calculator с помощью SendMessage.Я был в состоянии нажимать кнопки, отправляя сообщения на кнопки напрямую.Однако я не смог успешно отправить те же сообщения в дескриптор главного окна калькулятора.Учитывая, что hWnd - это дескриптор окна калькулятора, это мой код.

IntPtr fiveKey = FindWindowEx(hWnd, IntPtr.Zero, "Button", "5"); 

int x = 5; // X coordinate of the click
int y = 5; // Y coordinate of the click

IntPtr lParam = (IntPtr)((y << 16) | x); // The coordinates
IntPtr wParam = IntPtr.Zero; // Additional parameters for the click (e.g. Ctrl)
const uint downCode = 0x201; // Left click down code
const uint upCode = 0x202; // Left click up code
SendMessage(fiveKey, downCode, wParam, lParam); // Mouse button down
SendMessage(fiveKey, upCode, wParam, lParam); // Mouse button up

Может кто-нибудь объяснить мне, почему отправка сообщений в hWnd вместо fiveKey со смещением x / y изменилась на позицию«5» ключ не работает?В конечном итоге я хотел бы использовать этот код для имитации щелчков мыши в другом приложении, в котором нет кнопок, таких как калькулятор.

1 Ответ

0 голосов
/ 09 августа 2010

Я не уверен, что следую за тобой. Вы пытаетесь отправить WM_LBUTTONDOWN в главное окно с координатами, где находится кнопка 5, в надежде, что кнопка 5 будет нажата? Если так, то это просто не сработает. WM_LBUTTONDOWN отправляется только в окно под курсором мыши. Теоретически главное окно может обрабатывать WM_LBUTTONDOWN и видеть, находится ли какое-либо из его дочерних окон в этом месте, но никто этого не делает, потому что WM_LBUTTONDOWN работает не так.

...