PDA

Показать полную графическую версию : [решено] Поиск программы по имени и ее запуск


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

Creat0R
25-09-2013, 00:19
Не знаю, насколько реальна задача »
Ты будешь удивлён, но на AutoIt много чего реально ;).

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

eus_deus
25-09-2013, 12:24
Creat0R, если бы я знал, куда ее могут закидывать люди, было бы просто.. давайте попробуем диск, откуда запускается скрипт

Creat0R
25-09-2013, 14:32
давайте попробуем диск, откуда запускается скрипт »
Можно искать и на всех дисках, но сколько времени это займёт...
Может проще предоставить выбор поиска пользователю, который сам укажет путь?

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

Creat0R
25-09-2013, 17:05
Тоже верно.

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

$aDrives = DriveGetDrive (http://autoit-script.ru/autoit3_docs/functions/DriveGetDrive.htm)('FIXED') ;Только локальные диски
$sAppName = 'MyApp.exe'
$sAppPath = ''

For (http://www.autoitscript.com/autoit3/docs/keywords.htm#For) $i = 1 To (http://www.autoitscript.com/autoit3/docs/keywords.htm#To) UBound (http://autoit-script.ru/autoit3_docs/functions/UBound.htm)($aDrives)-1
$aSearch = _FileSearch($aDrives[$i], $sAppName)

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) @error (http://autoit-script.ru/autoit3_docs/macros.htm#@error) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$sAppPath = $aSearch[1]
ExitLoop (http://www.autoitscript.com/autoit3/docs/keywords.htm#ExitLoop)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
Next (http://www.autoitscript.com/autoit3/docs/keywords.htm#Next)

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $sAppPath <> '' Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
MsgBox (http://autoit-script.ru/autoit3_docs/functions/MsgBox.htm)(64, 'Title', $sAppName & ' found as: ' & $sAppPath)
Else (http://www.autoitscript.com/autoit3/docs/keywords.htm#Else)
MsgBox (http://autoit-script.ru/autoit3_docs/functions/MsgBox.htm)(48, 'Title', $sAppName & ' not found.')
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)

Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _FileSearch($sPath, $sFile)
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $sOut, $aOut, $sRead, $hDir

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) StringInStr (http://autoit-script.ru/autoit3_docs/functions/StringInStr.htm)(FileGetAttrib (http://autoit-script.ru/autoit3_docs/functions/FileGetAttrib.htm)($sPath), 'D') Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) SetError (http://autoit-script.ru/autoit3_docs/functions/SetError.htm)(1, 0, 0)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)

$sOut = StringToBinary (http://autoit-script.ru/autoit3_docs/functions/StringToBinary.htm)('0' & @CRLF (http://autoit-script.ru/autoit3_docs/macros.htm#@crlf), 2)
$sPath = StringRegExpReplace (http://autoit-script.ru/autoit3_docs/functions/StringRegExpReplace.htm)($sPath, '\\+$', '')

$hDir = Run (http://autoit-script.ru/autoit3_docs/functions/Run.htm)(@ComSpec (http://autoit-script.ru/autoit3_docs/macros.htm#@comspec) & ' /U /C DIR "' & $sPath & '\' & $sFile & '" /B /S /A-D', @SystemDir (http://autoit-script.ru/autoit3_docs/macros.htm#@systemdir), @SW_HIDE (http://autoit-script.ru/autoit3_docs/macros.htm#@sw_hide), 6)

While (http://www.autoitscript.com/autoit3/docs/keywords.htm#While) ProcessExists (http://autoit-script.ru/autoit3_docs/functions/ProcessExists.htm)($hDir)
$sRead = StdoutRead (http://autoit-script.ru/autoit3_docs/functions/StdoutRead.htm)($hDir, False (http://www.autoitscript.com/autoit3/docs/keywords.htm#False), True (http://www.autoitscript.com/autoit3/docs/keywords.htm#True))

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) @error (http://autoit-script.ru/autoit3_docs/macros.htm#@error) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
ExitLoop (http://www.autoitscript.com/autoit3/docs/keywords.htm#ExitLoop)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $sRead <> '' Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$sOut &= $sRead

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) StringInStr (http://autoit-script.ru/autoit3_docs/functions/StringInStr.htm)($sOut, $sFile) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
ExitLoop (http://www.autoitscript.com/autoit3/docs/keywords.htm#ExitLoop)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
Wend (http://www.autoitscript.com/autoit3/docs/keywords.htm#WEnd)

$aOut = StringRegExp (http://autoit-script.ru/autoit3_docs/functions/StringRegExp.htm)(BinaryToString (http://autoit-script.ru/autoit3_docs/functions/BinaryToString.htm)($sOut, 2), '[^\r\n]+', 3)

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) @error (http://autoit-script.ru/autoit3_docs/macros.htm#@error) Or (http://www.autoitscript.com/autoit3/docs/keywords.htm#Or) UBound (http://autoit-script.ru/autoit3_docs/functions/UBound.htm)($aOut) < 2 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) SetError (http://autoit-script.ru/autoit3_docs/functions/SetError.htm)(2, 0, 0)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)

$aOut[0] = UBound (http://autoit-script.ru/autoit3_docs/functions/UBound.htm)($aOut)-1
Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) $aOut
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc)

eus_deus
25-09-2013, 17:53
Creat0R, да, поиск катастрофически долгий (около двух минут)




© OSzone.net 2001-2012