AHK ControlSend - PullRequest
       12

AHK ControlSend

0 голосов
/ 30 марта 2020

Я не особо разбирался с AHK, но я видел скрипт, который умеет посылать нажатия клавиш в окно, а Window интерпретирует нажатия клавиш и отображает их соответственно. Скрипт использовал функцию под названием ControlSend. И мне было любопытно, что на самом деле делает эта функция в Win32 API. Самая близкая функция, которую я мог предположить, это использует SendMessage / PostMessag; Однако, когда я фактически протестировал PostMessage / SendMessage в окне, используя WM_KEYDOWN в качестве сообщения, окно не смогло его интерпретировать. Так что на самом деле это не вопрос кодирования, но на какие функции на самом деле полагается ControlSend в AHK в Win32 API? Он не имитирует клавиатуру с помощью keybd_event или SendInput, потому что ей удается отправлять нажатия клавиш, даже когда окно процесса находится в фоновом режиме и не сфокусировано. Я пытался найти это, но без объяснения причин.

Это был скрипт AHK

Loop{

sendKey("a")
}


F1::
if (mypid == 0){
    WinGet, var, PID, A
    mypid = %var%
    MsgBox, Found client %mypid%
}



sendKey(key)
{
global mypid
WinClose
ControlSend,,{%key%}, ahk_pid %mypid%
}

1 Ответ

1 голос
/ 30 марта 2020

AutoHotkey является открытым исходным кодом, и вы можете просматривать основной код C ++ непосредственно на Lexikos 'GitHub .

Здесь - это нужная вам функция
HWND * 1008 будет ненулевым, если вы управляете отправкой.
Все виды чеков и магов c уже сделаны, но в конце вы получите больше часто, чем не получается эта функция, где ключ отправляется путем отправки сообщений WM_KEYDOWN и WM_KEYUP в целевое окно.
В некоторых особых случаях (если ключ, похоже, не имеет VK или S C), он отправляется путем отправки сообщения WM_CHAR.

Это то, что я могу сказать, бросив быстрый взгляд на источник, но, как уже было сказано, там много всего. Я бы посоветовал взглянуть на себя, прочитав эти очень полезные комментарии, в которых много

...