[решено] Поиск программы по имени и ее запуск

Ответить
Аватара пользователя
eus_deus

[решено] Поиск программы по имени и ее запуск

Сообщение eus_deus »

Всем привет!

Не знаю, насколько реальна задача - в скрипте предопределено в коде запуск программы, если она расположена в одной папке со скриптом. Но это может быть и не так. Задача - если программа не обнаружена в папке скрипта, находить ее и запускать. Если не находится - выдавать сообщение.Рабочих примеров нет, программа может быть любой
Аватара пользователя
Creat0R

Re: [решено] Поиск программы по имени и ее запуск

Сообщение Creat0R »

Цитата eus_deus:



Не знаю, насколько реальна задача
[решено] Поиск программы по имени и ее запуск




Ты будешь удивлён, но на AutoIt много чего реально Изображение.




Цитата eus_deus:



Задача - если программа не обнаружена в папке скрипта, находить ее и запускать
[решено] Поиск программы по имени и ее запуск




Встречный вопрос - где искать?
Аватара пользователя
eus_deus

Re: [решено] Поиск программы по имени и ее запуск

Сообщение eus_deus »

Creat0R, если бы я знал, куда ее могут закидывать люди, было бы просто.. давайте попробуем диск, откуда запускается скрипт
Аватара пользователя
Creat0R

Re: [решено] Поиск программы по имени и ее запуск

Сообщение Creat0R »

Цитата eus_deus:



давайте попробуем диск, откуда запускается скрипт
[решено] Поиск программы по имени и ее запуск




Можно искать и на всех дисках, но сколько времени это займёт...

Может проще предоставить выбор поиска пользователю, который сам укажет путь?
Аватара пользователя
eus_deus

Re: [решено] Поиск программы по имени и ее запуск

Сообщение eus_deus »

Creat0R, тогда самое простое - вообще ничего не менять и явно сказать, что скрипт должен быть в одной папке с программой.
Аватара пользователя
eus_deus

Re: [решено] Поиск программы по имени и ее запуск

Сообщение eus_deus »

Creat0R, да, поиск катастрофически долгий (около двух минут)
Аватара пользователя
Creat0R

Re: [решено] Поиск программы по имени и ее запуск

Сообщение Creat0R »

Тоже верно.



Но всё таки вот пример поиска первого файла (на всех локальных дисках):



Код: Выделить всё

$aDrives = DriveGetDrive('FIXED') ;Только локальные диски
$sAppName = 'MyApp.exe'
$sAppPath = ''
For $i = 1 To UBound($aDrives)-1
    $aSearch = _FileSearch($aDrives[$i], $sAppName)
    If Not @error Then
        $sAppPath = $aSearch[1]
        ExitLoop
    EndIf
Next
If $sAppPath <> '' Then
    MsgBox(64, 'Title', $sAppName & ' found as: ' & $sAppPath)
Else
    MsgBox(48, 'Title', $sAppName & ' not found.')
EndIf
Func _FileSearch($sPath, $sFile)
    Local $sOut, $aOut, $sRead, $hDir
    If Not StringInStr(FileGetAttrib($sPath), 'D') Then
        Return SetError(1, 0, 0)
    EndIf
    $sOut = StringToBinary('0' & @CRLF, 2)
    $sPath = StringRegExpReplace($sPath, '\\+$', '')
    $hDir = Run(@ComSpec & ' /U /C DIR "' & $sPath & '\' & $sFile & '" /B /S /A-D', @SystemDir, @SW_HIDE, 6)
    While ProcessExists($hDir)
        $sRead = StdoutRead($hDir, False, True)
        If @error Then
            ExitLoop
        EndIf
        If $sRead <> '' Then
            $sOut &= $sRead
            If StringInStr($sOut, $sFile) Then
                ExitLoop
            EndIf
        EndIf
    Wend
    $aOut = StringRegExp(BinaryToString($sOut, 2), '[^\r\n]+', 3)
    If @error Or UBound($aOut) < 2 Then
        Return SetError(2, 0, 0)
    EndIf
    $aOut[0] = UBound($aOut)-1
    Return $aOut
EndFunc
Ответить

Вернуться в «AutoIt»