1

Тема: AHK:Работа модификаторов при посылке ControlSend

В момент посылки клавиш ControlSend'ом, скрипт отпускает нажатые физически клавиши модификаторов (Ctrl, Alt, Shift и CapsLock), при этом, не затрагивая остальные клавиши.
Если при запущенном скрипте нажать CapsLock, то он начинает переключаться по своему усмотрению.
Можно ли заставить скрипт работать только с целевым окном, не затрагивая остальные.
Скрипт ниже вызывает у меня эти проблемы.

Run, Notepad.exe, , , Pid1
Run, Notepad.exe, , , Pid2
WinWaitActive, % "ahk_pid " Pid2
WinMove, % A_ScreenWidth/4, % A_ScreenHeight/4
WinMove, % "ahk_pid " Pid1, , % A_ScreenWidth/5, % A_ScreenHeight/5
ControlSetText, , В этом окне блокнота при помощи Ctrl+A или Shift+Left \ Right попытаться выделить текст., % "ahk_pid " Pid2
While WinActive("ahk_pid" Pid2) {
ControlSend, , {sc1E}{scE}, % "ahk_pid " Pid1 ; sc1E - a, scE - BackSpace.
Sleep 10
}
Process, Close, % Pid1
Process, Close, % Pid2

2

Re: AHK:Работа модификаторов при посылке ControlSend

Похоже, не лечится. Максимум что удалось - стабильно работает Ctrl+A.

3 (изменено: Alectric, 2015-11-30 21:07:19)

Re: AHK:Работа модификаторов при посылке ControlSend

Мне кажется разработчики AHK что-то перехимичили.
Если зажать F1 в этом скрипте, то выдаст "AAaaaAAAaAAAaaaAAaAaaAaaaAaAAaaaAAAaaAa":

Run, Notepad.exe, , , Pid1
f1::
ControlSend, , A, % "ahk_pid " Pid1
return

...

Подтверждаю! В версии 112207 такого глюка нет... хотя все-таки есть, если отправлять маленькую букву.

...

Но CapsLock все-таки моргает.

...

Есть такой вариант:





Run, %a_windir%\Notepad.exe, , , Pid1
winwait,ahk_pid %Pid1%
ControlGetFocus,hControl,ahk_pid %Pid1%

Run, %a_windir%\Notepad.exe, , , Pid2
WinMove, % A_ScreenWidth/4, % A_ScreenHeight/4
WinMove, % "ahk_pid " Pid1, , % A_ScreenWidth/5, % A_ScreenHeight/5
ControlSetText, , В этом окне блокнота при помощи Ctrl+A или Shift+Left \ Right попытаться выделить текст., % "ahk_pid " Pid2
WinWaitActive, % "ahk_pid " Pid2

While WinActive("ahk_pid" Pid2)
{
  PostMessage,0x100,0x41,,%hControl%,ahk_pid %Pid1%
  PostMessage,0x100,0x08,,%hControl%,ahk_pid %Pid1%
  Sleep 10
}
Process, Close, % Pid1
Process, Close, % Pid2

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

4

Re: AHK:Работа модификаторов при посылке ControlSend

Alectric пишет:
+ Есть такой вариант:




Run, %a_windir%\Notepad.exe, , , Pid1
winwait,ahk_pid %Pid1%
ControlGetFocus,hControl,ahk_pid %Pid1%

Run, %a_windir%\Notepad.exe, , , Pid2
WinMove, % A_ScreenWidth/4, % A_ScreenHeight/4
WinMove, % "ahk_pid " Pid1, , % A_ScreenWidth/5, % A_ScreenHeight/5
ControlSetText, , В этом окне блокнота при помощи Ctrl+A или Shift+Left \ Right попытаться выделить текст., % "ahk_pid " Pid2
WinWaitActive, % "ahk_pid " Pid2

While WinActive("ahk_pid" Pid2)
{
  PostMessage,0x100,0x41,,%hControl%,ahk_pid %Pid1%
  PostMessage,0x100,0x08,,%hControl%,ahk_pid %Pid1%
  Sleep 10
}
Process, Close, % Pid1
Process, Close, % Pid2

А с этим вариантом модификаторы передаются не активному окну блокнота.

5

Re: AHK:Работа модификаторов при посылке ControlSend

Значит ничего не поделаешь. Так устроен фокус ввода.

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