Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для beve

Старожил


Сообщения: 307
Благодарности: 137

Профиль | Отправить PM | Цитировать


Вот, очень по-простому:
Код: Выделить весь код
$SearchDir=@ScriptDir ;папка с файлами *.exe
$txtFile=@ScriptDir&"\file.txt" ;название текстового файла для записи результата

$hSearch = FileFindFirstFile($SearchDir&"\*.exe")  ; Инициализация поиска
If $hSearch= -1 Then
    MsgBox(0, "Error", "No files/directories matched the search pattern")
    Exit
EndIf

;открытие текстового файла для записывания результата в конец файла
$h_txtFile = FileOpen($txtFile, 1)
If $h_txtFile = -1 Then
    MsgBox(0, "Error", "Unable to open file.")
    Exit
EndIf

;цикл - пока существуют файлы в директории
While 1
    $file = FileFindNextFile($hSearch) ;ищем следующий файл
    If @error Then ExitLoop

    $PID=run($file, $SearchDir,@SW_MINIMIZE ) ;запускаем в свернутом режиме
    ProcessWait($PID) 
    Sleep(250) ;ожидание окна, чтобы лишний раз не гонять цикл, который ниже

;цикл для ожидания окна программы, будет работать пока не появится окно программы.
    do 
        $sTitle=_WinGetTitleByPID($PID)
        Sleep(50)
    Until $sTitle<>"" Or ProcessExists($PID)==0

    FileWriteLine($h_txtFile, StringTrimRight($file, 4)& " "& StringRegExpReplace($sTitle,"Установка программы '(.*?)'","\1") & @CRLF) ; запись в файл очередной строки, где будет имя файла без расширения, пробел, нужный заголовок.

    ProcessClose($PID)
    ProcessWaitClose($PID)
    $PID=""
    $sTitle=""
WEnd

; Close the search handle
FileClose($hSearch)
;Close the txt file
FileClose($h_txtFile)

;функция от http://creator-lab.ucoz.ru/load/3-1-0-19
Func _WinGetTitleByPID($iPID, $nArray = 1)
    If IsString($iPID) Then $iPID = ProcessExists($iPID)
    Local $aWList = WinList(), $sHold
    For $iCC = 1 To $aWList[0][0]
        If WinGetProcess($aWList[$iCC][1]) = $iPID And _
            BitAND(WinGetState($aWList[$iCC][1]), 2) Then
            If $nArray Then Return $aWList[$iCC][0]
            $sHold &= $aWList[$iCC][0] & Chr(1)
        EndIf
    Next
    If $sHold Then Return StringSplit(StringTrimRight($sHold, 1), Chr(1))
    Return SetError(1, 0, 0)
EndFunc
P.S. Если программы-установщики похожие, то будет работать, иначе, нужно будет еще дорабатывать. Но суть думаю понятна.

-------
Не в кількості знань полягає освіта, а в повному розумінні і вмілому використанні того, що знаєш.


Последний раз редактировалось beve, 15-06-2010 в 18:16. Причина: опечатка

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:40, 15-06-2010 | #7