Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Single Post  Topic: Autorun 
Author Message
Skif_off



PostPosted: Mon Jul 03, 2023 20:52    Post subject: Reply with quote

LonerD wrote:
... мой Тотал ... несколько копий моего Тотала ...

Т.е. "мой" лежит в конкретной папке, любой не-"мой" - в любом другом каталоге?
LonerD wrote:
запоминать или записывать в отдельный файл все PID запускаемого процесса ТС и время от времени опрашивать их. Если все PID выгружены - то выгружается и программа-скрипт.

Как-то всё вместе не очень понятно звучит Smile, скрипт сам запускает все другие копии ТС или он для другого? Если второе, то получать и хранить список 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", но некоторые инструменты можно запускать отдельным процессом...
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group