1

Тема: AHK: Запуск только одного экземпляра программы по команде "run"

Други, помогайте!
Имеется простой скрипт для запуска некоторых программ горячими клавишами на ноутбуке.

sc142:: Run C:\Program Files\MPC-BE x64\mpc-be64.exe

При повторном нажатии клавиши скодом sc142 происходит запуск второго экземпляра mpc-be64.exe, чего не хотелось бы. Существует ли какая-нибудь проверка, запущено ли уже приложение? Если можно, чирканите пример такой проверки.
Спасибо.

2 (изменено: Alectric, 2016-08-06 23:12:16)

Re: AHK: Запуск только одного экземпляра программы по команде "run"

process,exist,explorer.exe
if errorlevel
  msgbox
Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

3

Re: AHK: Запуск только одного экземпляра программы по команде "run"

Куда этот кусок вставлять?

4

Re: AHK: Запуск только одного экземпляра программы по команде "run"


sc142::
    Process, Exist, mpc-be64.exe
    If (ErrorLevel = 0) {
        Run C:\Program Files\MPC-BE x64\mpc-be64.exe
    }
    Return

5

Re: AHK: Запуск только одного экземпляра программы по команде "run"

Благодарю. Работает.
Интересно, а можно ли в "else" добавить переход на окно этого процесса (разворачивание)?

6

Re: AHK: Запуск только одного экземпляра программы по команде "run"


sc142::
    Process, Exist, mpc-be64.exe
    If (ErrorLevel = 0) {
        Run C:\Program Files\MPC-BE x64\mpc-be64.exe
    } Else {
        WinActivate, Media Player Classic
    }
    Return

7

Re: AHK: Запуск только одного экземпляра программы по команде "run"

YMP
Добрый день. Подскажите пожалуйста с этим примером. Дело в том, что имя процесса в диспетчере отличается (calculator.exe)  а запускается calc.exe. Пробовал через PID, не не работает.

f3::
SelectedFile1 = calc.exe
	Process, Exist, % nPID
	If (ErrorLevel = 0) {
		Run, % SelectedFile1,,, nPID
	} Else {
		WinActivate
	}
Return

8

Re: AHK: Запуск только одного экземпляра программы по команде "run"

Вот так у меня работает, но только если Калькулятор запущен этим скриптом, т.к. для активации нужен хэндл окна. Активация по заголовку не всегда работает, если окно свёрнуто. Если свернуть его нажатием на кнопку Панели задач, то работает, а если нажатием кнопки в заголовке окна, то у Калькулятора зачем-то появляется ещё одно окно с тем же заголовком, и команда активации, видимо, идёт в него, безо всякого эффекта. Если же при запуске получить хэндл окна, то всё работает.


f3::
    Process, Exist, Calculator.exe
    If (ErrorLevel = 0) {
        Run, calc.exe
        WinWaitActive, Calculator
        hwndCalculator := WinExist("A")
    } Else {
        WinActivate, ahk_id %hwndCalculator%
    }
    Return

9

Re: AHK: Запуск только одного экземпляра программы по команде "run"

YMP
К сожалению такой вариант мне не подходит, т.к. exe фал может изменятся. Я думал тут несколько проще, раз такие дела то нет смысла сильно усложнять запуск фала.

10

Re: AHK: Запуск только одного экземпляра программы по команде "run"

Так вы озвучьте всю задачу, а то не понятно, в чём конкретно у вас сложность. Файл можно и в переменной держать.

11

Re: AHK: Запуск только одного экземпляра программы по команде "run"

YMP
По умолчанию, из конфиг файла, в переменную "SelectedFile1" задается "calc.exe" который в свою очередь и запускается командой Run. Также запускной файл можно поменять в соответствующем меню с сохранением в конфиг файл. Увидев эту тему я захотел сделать нечто подобное, но с переменным exe файлом. Вот с калькулятором у меня и возникла сложность. В обще хотелось бы нечто универсальное.

12

Re: AHK: Запуск только одного экземпляра программы по команде "run"

Да, если хранить только имя исполняемого файла, то универсальности с активацией окна не просматривается.

13

Re: AHK: Запуск только одного экземпляра программы по команде "run"

YMP
Нет, когда задаешь другой exe прописывается полный путь к файлу.

14

Re: AHK: Запуск только одного экземпляра программы по команде "run"

Ну, это не принципиально. Имя процесса-то вы не храните. Обычно оно такое же, как имя экзешника, но не всегда.

15

Re: AHK: Запуск только одного экземпляра программы по команде "run"

Может так подойдёт?

SelectedFile1 = calc.exe
f3::
ifWinNotExist, ahk_exe %SelectedFile1%
   Run, %SelectedFile1%
Else
   WinActivate, ahk_exe %SelectedFile1%
Return

16

Re: AHK: Запуск только одного экземпляра программы по команде "run"

Malcev
Да нет, я уже проверил. Второе окно у Калькулятора появляется, если свернуть его кнопкой в заголовке окна. И, видимо, оно и попадается первым под руку вместо того, которое нужно.

17

Re: AHK: Запуск только одного экземпляра программы по команде "run"

Второе окно у меня не появляется.
Просто у вас в 8 коде возможно опечатка.
При запуске калькулятора создается процесс calc.exe, а у вас:

Process, Exist, Calculator.exe

Во всяком случае так происходит на Win7.

18

Re: AHK: Запуск только одного экземпляра программы по команде "run"

Нет, на 10 именно процесс Calculator появляется. Обижаете, коллега. Всё проверено, как в банке. И второе окно — не фантазия, а факт, хотя я и не имею понятия, зачем оно.

19 (изменено: Alectric, 2016-08-08 12:04:48)

Re: AHK: Запуск только одного экземпляра программы по команде "run"

Используйте pid процесса. Если у "другого" имени процесса и pid другой, попробуйте узнать pid родителя.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

20

Re: AHK: Запуск только одного экземпляра программы по команде "run"

Alectric
Родитель - svchost.exe, таких процессов с десяток.