Как я могу имитировать нажатие кнопки, задав дескриптор окна кнопки? Я хочу, чтобы имитировать щелчок по кнопке, расположенной в диалоговом окне. У меня есть дескриптор этого окна. Это окно Abort/Retry/Ignore. Я не хочу идти с симуляцией щелчка с координатами X и Y, так как это не соответствует моим потребностям. Ответ 1 Найдите дескриптор кнопки, которую вы хотите щелкнуть (используя FindWindowEx), и просто отправьте сообщение с кликом: SendMessage(hButton, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(0, 0)); SendMessage(hButton, WM_LBUTTONUP, MK_LBUTTON, MAKELPARAM(0, 0)); Ответ 2 Отправьте сообщение BM_CLICK в HWND кнопки: SendMessage(hButton, BM_CLICK, 0, 0); Это заставляет кнопку получать сообщения WM_LBUTTONDOWN и WM_LBUTTONUP, а родительский - получать уведомление BN_CLICKED, как если бы пользователь физически нажал на кнопку. Ответ 3 SendMessage(hParent, WM_COMMAND, MAKEWPARAM(IdOfButton, BN_CLICKED), (LPARAM)hwndOfButton); Как правило, вы можете обойтись без hwndOfButton, если вы его не знаете - зависит от реализации диалога! Это может быть SendMessage или PostMessage, в зависимости от вашего варианта использования. Ответ 4 Попробуйте это для OK: SendMessage(hWnd, WM_COMMAND, 1, NULL); Ответ 5 Вот полная функция: void clickControl(HWND hWnd, int x, int y) { POINT p; p.x = x; p.y = y; ClientToScreen(hWnd, &p); SetCursorPos(p.x, p.y); PostMessage(hWnd, WM_MOUSEMOVE, 0, MAKELPARAM(x, y)); PostMessage(hWnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(x, y)); PostMessage(hWnd, WM_LBUTTONUP, MK_LBUTTON, MAKELPARAM(x, y)); }
Ответ 1 Найдите дескриптор кнопки, которую вы хотите щелкнуть (используя FindWindowEx), и просто отправьте сообщение с кликом: SendMessage(hButton, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(0, 0)); SendMessage(hButton, WM_LBUTTONUP, MK_LBUTTON, MAKELPARAM(0, 0));
Ответ 2 Отправьте сообщение BM_CLICK в HWND кнопки: SendMessage(hButton, BM_CLICK, 0, 0); Это заставляет кнопку получать сообщения WM_LBUTTONDOWN и WM_LBUTTONUP, а родительский - получать уведомление BN_CLICKED, как если бы пользователь физически нажал на кнопку.
Ответ 3 SendMessage(hParent, WM_COMMAND, MAKEWPARAM(IdOfButton, BN_CLICKED), (LPARAM)hwndOfButton); Как правило, вы можете обойтись без hwndOfButton, если вы его не знаете - зависит от реализации диалога! Это может быть SendMessage или PostMessage, в зависимости от вашего варианта использования.
Ответ 5 Вот полная функция: void clickControl(HWND hWnd, int x, int y) { POINT p; p.x = x; p.y = y; ClientToScreen(hWnd, &p); SetCursorPos(p.x, p.y); PostMessage(hWnd, WM_MOUSEMOVE, 0, MAKELPARAM(x, y)); PostMessage(hWnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(x, y)); PostMessage(hWnd, WM_LBUTTONUP, MK_LBUTTON, MAKELPARAM(x, y)); }