Я пытаюсь написать сценарий AutoHotKey, который активирует мой Git Gui, обновите его и поместите фокус в текстовое поле коммит-комментарий. Активация и обновление не проблема, но мне не удалось изменить фокус. AutoHotKey, похоже, неправильно определяет дочерние элементы управления в окне Git Gui.
Если я запускаю утилиту Window Spy AutoHotKey, переключаюсь в окно Git Gui и наведу указатель мыши на текстовое поле коммита-комментария, Window Spy покажет следующий результат (сокращенно):
>>>>>>>>>>( Window Title & Class )<<<<<<<<<<<
Git Gui (Tyler08) C:/svn/Tyler08
ahk_class TkTopLevel
>>>>>>>>>>>>( Mouse Position )<<<<<<<<<<<<<
On Screen: 808, 727 (less often used)
In Active Window: 816, 735
>>>>>>>>>( Now Under Mouse Cursor )<<<<<<<<
ClassNN: TkChild18
Text:
Color: 0xF0F0F0 (Blue=F0 Green=F0 Red=F0)
Итак, похоже, что имя класса этого поля редактирования - TkChild18, и я ожидал, что смогу написать следующее в моем скрипте AutoHotKey:
NumpadAdd::
ControlFocus, TkChild18, Git Gui (Tyler08) C:/svn/Tyler08
return
Но когда я запускаю этот сценарий и затем нажимаю Numpad +, ничего не происходит. Я ожидал, что фокус переместится в текстовое поле фиксация-комментарий, но фокус вообще не изменился.
Пытаясь устранить это, я создал следующий сценарий на основе документации AutoHotKey для ControlGetFocus:
NumpadAdd::
ControlGetFocus, OutputVar, Git Gui (Tyler08) C:/svn/Tyler08
if ErrorLevel
MsgBox, The target window doesn't exist or none of its controls has input focus.
else
MsgBox, Control with focus = %OutputVar%
Теперь, если я активирую окно Git Gui и нажимаю Numpad +, AutoHotKey выдает сообщение с сообщением: «Control with focus = TkChild1». Независимо от того, где находится фокус - будь то фокус в текстовом поле фиксация-комментарий, или на панели различий, или в переключателях «Новая фиксация» или «Изменить последнюю фиксацию», или в любой из кнопок - AutoHotKey всегда сообщает, что фокус - TkChild1. Это не согласуется с Window Spy, который может видеть все дочерние окна (TkChild18 и т. Д.)
Приведенный выше сценарий действительно работает по крайней мере с некоторыми другими приложениями (если я изменяю заголовок окна во второй строке). Он показывает сообщение об ошибке «целевое окно не существует ...», если элемент WPF имеет фокус (например, окно вывода в Visual Studio 2010), но успешно, если фокус имеет элемент управления WinForms (например, сетка свойств VS2010). Итак, я знаю, что у меня правильный синтаксис для команды ControlGetFocus. Я подозреваю, что Git Gui делает что-то странное со своими дочерними окнами (он построен на платформе Tk, которая может делать что-то странное, с чем AutoHotKey не может справиться).
У кого-нибудь есть идеи о том, как я могу заставить AutoHotKey успешно менять фокус в окне Git Gui?
Используя AutoHotKey Basic v1.0.48.00 и mSysGit версии 1.7.3.1-preview20101002 в 64-битной Vista.