1

Тема: AHK v2: Нестабильность ControlClick

У меня ControlClick часто не срабатывает: кнопка выделяется, но действия по ней не происходит. В результате все ControlClick заменил на

	WinExist("A") ; Set the Last Found Window to the active window
	hWndControl := ControlGetHwnd(Control)  ; Get HWND of Button
	SendMessage 0x0028, hWndControl, True  ; 0x0028 is WM_NEXTDLGCTL
	send '{Enter}'

Это работает.
В чём тут дело? Хотелось бы, конечно, просто кликать.

2

Re: AHK v2: Нестабильность ControlClick

Возможно проблема в таймингах. Попробуй настроить время отклика с SetControlDelay.

Справка пишет:

Reliability

To improve reliability -- especially during times when the user is physically moving the mouse during the ControlClick -- one or both of the following may help:

1) Use SetControlDelay -1 prior to ControlClick. This avoids holding the mouse button down during the click, which in turn reduces interference from the user's physical movement of the mouse.

2) Specify the string NA anywhere in the sixth parameter (Options) as shown below:
SetControlDelay -1
ControlClick, Toolbar321, WinTitle,,,, NA


NA avoids marking the target window as active and avoids merging its input processing with that of the script, which may prevent physical movement of the mouse from interfering (but usually only when the target window is not active). However, this method might not work for all types of windows and controls.

+ Перевод

Надежность

Для повышения надежности — особенно в моменты, когда пользователь физически перемещает мышь во время ControlClick — может помочь один или оба из следующих способов:

1) Используйте SetControlDelay -1 перед ControlClick. Это позволяет избежать удержания кнопки мыши во время щелчка, что, в свою очередь, уменьшает помехи от физического перемещения мыши пользователем.

2) Укажите строку NA в любом месте шестого параметра (Параметры), как показано ниже:
SetControlDelay -1
ControlClick, Toolbar321, WinTitle,,,, NA


NA предотвращает пометку целевого окна как активного и предотвращает слияние его обработки ввода с обработкой скрипта, что может предотвратить помехи от физического перемещения мыши (но обычно только когда целевое окно неактивно). Однако этот метод может не работать для всех типов окон и элементов управления.

Win 10 x64
AHK
                       Справка AHK v1 тебе в помощь.

3

Re: AHK v2: Нестабильность ControlClick

Alectric
SetControlDelay я пробовал, не помогло. Вряд ли дело в таймингах, ведь при тех же таймингах одно работает, а другое нет. Другое дело, что у тебя ControlClick работает. Вот это и непонятно.

4

Re: AHK v2: Нестабильность ControlClick

Попробуйте сообщение BM_CLICK вместо ControlClick. Судя по описанию, оно более надёжно.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: AHK v2: Нестабильность ControlClick

Спасибо! Работает, буду пользоваться.

SendMessage(0x00F5,,, '&Найти далее') ; 0x00F5 is BM_CLICK

6 (изменено: haridev, 2026-05-29 16:09:57)

Re: AHK v2: Нестабильность ControlClick

Alectric
Был неправ. Я пробовал SetControlDelay 200, но не пробовал SetControlDelay -1. Думал, раз мышью не двигаю, -1 не мой случай. Однако сейчас проверил с -1, работает.

--
Дополнение.
Оказалось, с -1 работает там, где не работает с BM_CLICK. Буду смотреть.

7

Re: AHK v2: Нестабильность ControlClick

По итогу, рекомендация "Use SetControlDelay -1 prior to ControlClick" оказалась правильной.
PostMessage(0x00F5... также работает стабильно, без SetControlDelay -1.
SendMessage(0x00F5... выдаёт таймаут, когда открывает модальное окно.