-
AutoIt
(
http://forum.oszone.net/forumdisplay.php?f=103)
Поиск программы по имени и ее запуск
Всем привет!
Не знаю, насколько реальна задача - в скрипте предопределено в коде запуск программы, если она расположена в одной папке со скриптом. Но это может быть и не так. Задача - если программа не обнаружена в папке скрипта, находить ее и запускать. Если не находится - выдавать сообщение.Рабочих примеров нет, программа может быть любой
|
Цитата:
Цитата eus_deus
Не знаю, насколько реальна задача »
|
Ты будешь удивлён, но на AutoIt много чего реально ;).
Цитата:
Цитата eus_deus
Задача - если программа не обнаружена в папке скрипта, находить ее и запускать »
|
Встречный вопрос - где искать?
|
Creat0R, если бы я знал, куда ее могут закидывать люди, было бы просто.. давайте попробуем диск, откуда запускается скрипт
|
Цитата:
Цитата eus_deus
давайте попробуем диск, откуда запускается скрипт »
|
Можно искать и на всех дисках, но сколько времени это займёт...
Может проще предоставить выбор поиска пользователю, который сам укажет путь?
|
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
|
Creat0R, да, поиск катастрофически долгий (около двух минут)
|
Время: 03:37.
© OSzone.net 2001-