2013-11-06 3 views
0

Я хочу передать заголовок окна в функцию, которую я написал в AutoHotKey, это заголовок окна WinTitle a string? У меня есть 4 названия окон, и мне нужно передать их в ту же функцию.Как передать название окна пользовательской функции в AutoHotKey

Extract(my_window_title) { 
; Wake and select the correct window to be in focus 
WinWait, my_window_title, 
IfWinNotActive, my_window_title, , WinActivate, my_window_title, 
WinWaitActive, my_window_title, 
; ... do a bunch of things 
} 

я вызываю функцию, как этот

title1 = "Some title" 
Extract(title1) 

, и я также пытался ставить % во всех переменных

+1

Пожалуйста, отформатируйте многострочный код, выделив его и нажав кнопку '{}'. – MCL

ответ

2

Да WinTitle - это в основном строка. Проверьте свою папку Autohotkey, должен быть файл под названием «AU3_Spy.exe». Используйте его, чтобы найти названия окон.

И как уже упоминал Эллиот ДеНольф, вы допустили некоторые ошибки с переменными. Вы также должны взглянуть на синтаксис IfWInNotActive. Это должно работать:

Extract(my_window_title) { 
    ; Wake and select the correct window to be in focus 
    WinWait, %my_window_title% 
    IfWinNotActive, %my_window_title% 
    { 
     WinActivate, %my_window_title% 
     WinWaitActive, %my_window_title% 
    } 
    msgbox, %my_window_title% 
    ; ... do a bunch of things 
} 

title1 = MyWindowTitle 
Extract(title1) ;functions always expect variables, no percent-signs here 
1

Есть несколько вещей, которые выглядят как они вызывают проблему в вашем скрипте ,

При присвоении строкового значения и использовании = котировки не нужны. Если вы присвоите значение с помощью :=, вам понадобятся кавычки. Эти 2 строки эквивалентны:

title1 := "Some Title" 
    title1 = Some Title 

Как только эти значения вызывают через функцию ie. Extract(title1), % символы должны быть использованы (как вы упомянули в конце своего вопроса). Это можно назвать 2-мя способами:

WinActivate, %my_window_title% 
    WinActivate, % my_window_title 

Если заголовок является недействительным, ваш сценарий будет ждать до бесконечности на WinWait и WinWaitActive. Я бы рекомендовал использовать timeout value, а затем проверить ErrorLevel, чтобы узнать, было ли оно успешным или нет.

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