Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Поиск программы по имени и ее запуск (http://forum.oszone.net/showthread.php?t=268714)

eus_deus 24-09-2013 22:10 2223392

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

Creat0R 25-09-2013 00:19 2223461

Цитата:

Цитата eus_deus
Не знаю, насколько реальна задача »

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

Цитата:

Цитата eus_deus
Задача - если программа не обнаружена в папке скрипта, находить ее и запускать »

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

eus_deus 25-09-2013 12:24 2223662

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

Creat0R 25-09-2013 14:32 2223744

Цитата:

Цитата eus_deus
давайте попробуем диск, откуда запускается скрипт »

Можно искать и на всех дисках, но сколько времени это займёт...
Может проще предоставить выбор поиска пользователю, который сам укажет путь?

eus_deus 25-09-2013 14:57 2223753

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

Creat0R 25-09-2013 17:05 2223810

Тоже верно.

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

Код:

$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


eus_deus 25-09-2013 17:53 2223836

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


Время: 03:37.

Время: 03:37.
© OSzone.net 2001-