Window.EnumerateProcesses

table Window.EnumerateProcesses ( boolean TopLevel = true )
Примеры

Описание

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

Параметры

TopLevel

(логический) Возвращать ли данные только от окон верхнего уровня:

ЗНАЧЕНИЕ
VALUE
ОПИСАНИЕ
DESCRIPTION
trueВозвращать список только для окон верхнего уровня. (По умолчанию)
falseВозвращать список для всех доступных окон.

Примечание: Каким образом определяется окно верхнего уровня - оно должно не иметь окна-хозяина (владельца) и должно быть видимым.

Возврат

ResultVariable

(таблица) Таблица дескрипторов окна и процессов им принадлежащих. В этой таблице дескрипторы окна являются ключами, а значениями являются пути к исполняемым файлам, породившим эти процессы. Если происходит ошибка или не существует процессов (процессы всегда должны быть), возвращается значение nil. Можно использовать действие Application.GetLastError для определения случился ли отказ в работе этого действия и почему.

При добавлении действия из редактора скрипта, можно использовать это поле для определения переменной, которая возвращает значение, сохраняющееся в ней.
Смотрите также: Связанные действия

Примеры

Пример 1

open_processes = Window.EnumerateProcesses();
Получаем дескрипторы окна и пути к исполняемым файлам для каждого процесса, работающего в настоящий момент, и сохраняем их в таблице по имени open_processes.

Пример 2

instances_of_file = 0;
file_to_check_for = "autorun.exe"; -- have all lowercase (все буквы строчные)
processes = Window.EnumerateProcesses();

for j, file_path in pairs(processes) do
    file = String.SplitPath(file_path);
    if (String.Lower(file.Filename .. file.Extension)) == file_to_check_for then
        instances_of_file = instances_of_file + 1;
    end
end

if instances_of_file > 1 then
    Window.Hide(Application.GetWndHandle());
    Dialog.Message("Error", "Autorun already running: code: already running");
    Window.Close(Application.GetWndHandle(), CLOSEWND_TERMINATE);
else
    Window.Show(Application.GetWndHandle());
end
В качестве примера, предположим, что вы запускаете вашу программу, только в том случае, если нет другого файла autorun.exe, запущенного в системе. Для этого используем действие Window.EnumerateProcesses, и проверяем каждый процесс против имени файла autorun.exe.
Смотрите также: Связанные действия