2015-09-09 2 views
0

Я довольно новичок в AutoHotkey, но мне удалось запустить мою желаемую программу и отправить Enter-Key, но проблема здесь в том, что программа должна запускаться только один раз и если он запущен, он должен получить только эту клавишу ввода, когда я снова и снова нажимаю клавишу, он должен только отправить этот ключ ввода.AutoHotKey - Запуск программы после отправки несколько раз

И программа должна оставаться в фоновом режиме и не фокусироваться после того, как она получит ключ ввода.

Мой код:

#n:: 
Run F:\V..c.exe 
Send {enter} 
return 
+0

Вы хотите, чтобы вы запускали программу 'V..c.exe' только один раз? – TechJS

+0

Да, и если программа вставлена, она должна получать только входной ключ int background – user254197

ответ

1

Detect, если process exists и запустить программу minimized, затем wait for its window появляться.

#n:: 
    process, exist, PROGRAM.EXE 
    if (errorlevel = 0) { 
    run, d:\program.exe, , min 
    winwait, ahk_class PROGRAM_WINDOW_CLASS 
    } 
    controlSend, , {Enter}, ahk_class PROGRAM_WINDOW_CLASS 
    ;or use the line below 
    ;controlSend, ahk_parent, {Enter}, ahk_class PROGRAM_WINDOW_CLASS 
    return 

Заменить PROGRAM.EXE с исполняемым именем вашей программы и PROGRAM_WINDOW_CLASS с классом окна, как показано в утилите AutoHotKey Window Spy, доступных в меню Пуск или в папке AutoHotkey (AU3_Spy.exe) или справа щелкните меню значка на панели «Фотошоп».


Вместо того, чтобы запустить программу минимизируется также возможно использовать SW_SHOWNOACTIVATE флаг shellExecute, так что вы можете заменить run, d:\program,, min с этим:

dllCall("shell32\ShellExecute", uint,0, uint,0, str,"d:\program.exe", uint,0, uint,0 
     ,uint,SW_SHOWNOACTIVATE:=4) 
+0

Попробуйте заменить 'winwait, ahk_class PROGRAM_WINDOW_CLASS' на' sleep 100', который будет спать в течение 100 миллисекунд. – wOxxOm

+0

Это программа wpf (C#), которую я написал, поэтому должен ли я предоставить что-то из своей программы? хорошо, я пытался использовать 'sleep', но он все еще не отменяет метод в моей программе. (даже изменив 'sleep' на' 1000' – user254197

+0

Запустите вышеупомянутый Window Spy и наведите указатель мыши на необходимый элемент (кнопку или что-то еще) в окне вашей программы и скопируйте его имя в 'controlSend, elementName, {Enter}, ... ......... ' – wOxxOm

0

вы могли бы попробовать:

hasran := false 
#n:: 
if (!hasran) { 
    Run F:\V..c.exe 
    hasran := true 
} 
Send {enter} 
return 

Он не проверяет, существуют ли эти окна, но он будет запускать программу только один раз. то вы можете перейти к этой программе, и она попадет только в клавишу ввода. (если эта программа не является gui, я не думаю, что вы можете отправлять ей ключевые события)

+0

работает только в том случае, если окно активно, но тогда я могу просто нажать клавишу ввода, как и раньше ... – user254197

+0

вы забыли скобки, код не будет работать должным образом – Blauhirn

+0

где именно? – user254197

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