2013-09-16 2 views
4

Я хочу создать сценарий AutoHotkey, чтобы изменить шрифт в клиенте PuTTY SSH. (Я предпочитаю небольшой шрифт высокой плотности информации, но когда я показываю что-то сотрудник, они должны быть в состоянии видеть это ясно.) Я получил это далеко:Использование AutoHotkey для нажатия кнопки в окне

#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases. 
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory. 
SendMode Input ; Recommended for new scripts due to its superior speed and reliability. 
#SingleInstance force ; Lets the RunMe plugin for Notepad++ reload the script with Shift-F5. 

#IfWinActive ahk_class PuTTY ; If PuTTY is active 
    ^+1::       ; and Ctrl-Shift-1 is pressed 
    { 
    Send !{Space}    ; Alt-Space to open the system menu 
    Send g      ; open Change Settings 
    Send !g      ; select the Category menu 
    Send w      ; select the Window category 
    Send {Right}    ; expand the category 
    Send a      ; select the Appearance subcategory 
    ControlClick, ClassNN Button8, ahk_class PuTTYConfigBox, , Left, 1 
    } 
#IfWinActive 

При запуске из окно терминала PuTTY, все через «Отправить» перемещается по меню PuTTY, как и ожидалось, доведя меня до подкатегории «Внешний вид». На этом этапе я хочу нажать кнопку «Изменить ...», чтобы установить шрифт. Я бы предпочел не отправлять кучу вкладок или указать координату экрана, чтобы выбрать кнопку; как это кажется kludgey и, вероятно, сломается с будущими обновлениями. Однако я не могу заставить ControlClick работать. Линия, которую я использовал выше, является моей лучшей предпосылкой после нескольких часов исследований, и я не понимаю, почему она ничего не делает.

Вот выход из окна Шпион, когда я зависания над кнопкой:

>>>>>>>>>>(Window Title & Class)<<<<<<<<<<< 
PuTTY Reconfiguration 
ahk_class PuTTYConfigBox 

>>>>>>>>>>>>(Mouse Position)<<<<<<<<<<<<< 
On Screen: 1051, 207 (less often used) 
In Active Window: 432, 202 

>>>>>>>>>(Now Under Mouse Cursor)<<<<<<<< 
ClassNN: Button8 
Text: Change... 
Color: 0xF0F0F0 (Blue=F0 Green=F0 Red=F0) 

>>>>>>>>>>(Active Window Position)<<<<<<<<<< 
left: 619  top: 5  width: 456  height: 438 

>>>>>>>>>>>(Status Bar Text)<<<<<<<<<< 

>>>>>>>>>>>(Visible Window Text)<<<<<<<<<<< 
&Apply 
&Cancel 
Cate&gory: 
Cursor appearance: 
B&lock 
&Underline 
&Vertical line 
Cursor &blinks 
Adjust the use of the cursor 
Fo&nt used in the terminal window 
Font: Lucida Console, 24-point 
Change... 
Allow selection of variable-pitch fonts 
Font &quality: 
Antialiased 
Non-Antialiased 
ClearType 
Default 
Font settings 
Hide mouse &pointer when typing in window 
Adjust the use of the mouse pointer 
Gap b&etween text and window edge: 
&Sunken-edge border (slightly thicker) 
Adjust the window border 

>>>>>>>>>>>(Hidden Window Text)<<<<<<<<<<< 

>>>>(TitleMatchMode=slow Visible Text)<<<< 
1 

>>>>(TitleMatchMode=slow Hidden Text)<<<< 

Спасибо за вашу помощь.

+1

Появляется ли меню в новом окне? Если да, выполняйте ли команды навигации (например, «Отправить g» и т. Д.) Открывать новые окна или изменять заголовок окна? Если это так, попробуйте добавить 'WinWait' перед' ControlClick'. Выберите подходящий идентификатор (вероятно, заголовок окна в сочетании с 'ahk_class'), который найдет ** только ** окно, появившееся после последней команды (' Send a'). Надеюсь, это достаточно ясно. – MCL

+0

Навигационные команды не могут, насколько я могу судить, открывать новые окна или изменять заголовок окна. Однако ваше предложение все равно (вместе с изменением параметров ControlClick). Благодаря! – Robert

ответ

2

Мне нужно было сделать две вещи, чтобы заставить это работать.

Во-первых, включая слово «ClassNN» в первом параметре ControlClick было неправильно, несмотря на несколько примеров, которые я нашел, что использовал это. Параметром может быть текст кнопки (Изменить ...), начало текста (Изменить) или его ClassNN (Button8), но не «ClassNN Button8». Все после этого не нужно и отлично работает со значениями по умолчанию. В настоящее время я просто использую «ControlClick, Change ...» в качестве всей строки, хотя было бы разумнее явно указать WinTitle (работает «Реконфигурация PuTTY» или «ahk_class PuTTYConfigBox»).

Во-вторых, как указывал MCL, мне нужно было «WinWait, PuTTY Reconfiguration» перед командой ControlClick. Я не совсем понимаю, почему, но это работает.

Вот мой окончательный, рабочий код, с F9 переключение на ProggyCleanTT 12 пунктов, и переключение F10 на Lucida Console 20 пункт:

#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases. 
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory. 
SendMode Input ; Recommended for new scripts due to its superior speed and reliability. 
#SingleInstance force ; Lets the RunMe plugin for Notepad++ reload the script with Shift-F5. 

; This will only work for PuTTY sessions in which, under Window/Behavior, you have checked 
; "System menu appears on ALT-Space". Don't forget to save the change. 

#IfWinActive ahk_class PuTTY 
    F9::ChangePuttyFont("ProggyCleanTT", 12) 
    F10::ChangePuttyFont("Lucida Console", 20) 
#IfWinActive 

ChangePuttyFont(font, size) 
{ 
    Send !{Space}    ; open the system menu 
    Send g      ; open Change Settings 
    Send !g      ; select the Category menu 
    Send Window     ; select the Window category 
    Send {Right}    ; expand the category 
    Send Appearance    ; select the Appearance subcategory 
    WinWait, PuTTY Reconfiguration ; This is necessary for some reason 
    ControlClick, Change...  ; click the "Change..." button (under Font Settings) 
    Send %font%     ; select font 
    Send !s      ; select size field 
    Send %size%     ; select size 
    Send {Enter}    ; close font window 
    SEND !a      ; close settings window 
    return 
} 

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

Смежные вопросы