Skif_off
|
Posted: Mon Jul 03, 2023 20:52 Post subject: |
|
|
LonerD wrote: | ... мой Тотал ... несколько копий моего Тотала ... |
Т.е. "мой" лежит в конкретной папке, любой не-"мой" - в любом другом каталоге?
LonerD wrote: | запоминать или записывать в отдельный файл все PID запускаемого процесса ТС и время от времени опрашивать их. Если все PID выгружены - то выгружается и программа-скрипт. |
Как-то всё вместе не очень понятно звучит , скрипт сам запускает все другие копии ТС или он для другого? Если второе, то получать и хранить список PID как-то расточительно, на AutoIt добавил бы в скрипт что-то типа такого:
Code: | #NoTrayIcon
#include "WinAPIEx.au3"
; Регистрируем функцию проверки процессов
AdlibRegister("CheckProc", 3000)
Local $sTCExe = _WinAPI_GetProcessFileName($CmdLine[1])
Local $sTCPath = StringRegExpReplace($sTCExe, "\\[^\\]+$", "\\")
Local $iTCNameLen = StringLen($sTCPath)
; Тут собственно скрипт
Func CheckProc()
AdlibUnRegister("CheckProc")
Local $sTmp
Local $iCount = 0
Local $aProcList = ProcessList()
For $i = 1 To $aProcList[0][0]
If StringMid($aProcList[$i][1], 1, 8) = "TOTALCMD" Then
$sTmp = _WinAPI_GetProcessFileName($aProcList[$i][0])
If StringMid($sTmp, 1, $iTCNameLen) = $sTCPath Then
$iCount += 1
ExitLoop
EndIf
EndIf
Next
If $iCount = 0 Then Exit
EndFunc |
$CmdLine[1] - PID родительского ТС, получаем от Autorun и используем для получения каталога TC из полного имени исполняемого файла, раз в 3 секунды перебираем PID'ы, смотрим, где лежат исполняемые файлы и сравниваем.
Если скрипт что-то пишет, то Exit, наверное, стоит заменить на переменную и обрабатывать ее в основном теле скрипта.
ProcessList() можно запускать с параметром и она сама отфильтрует по имени процесса, выйдет покороче, но процессов может быть два, "TOTALCMD.EXE" и "TOTALCMD64.EXE", поэтому только перебор всех.
Есть ещё вариант получить список всех окон, отфильтрованный по "TTOTAL_CMD", но некоторые инструменты можно запускать отдельным процессом... |
|