Показать полную графическую версию : [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.
TERMINAL
10-11-2008, 14:03
amel27, вообще ничего не выдаётся-cmd срабатывает (показывает чётрный экран и изчезает) и всё...что за фигня-понять немогу....
мне это нужно для того чтобы определить-устройство установлено или нет, если нет - начитает устанавливать дрова на устройство.
Maza Faka
10-11-2008, 15:38
Что это значит? »
Ты о чём?
Здравствуй те пару дней уже юзаю поиск и фильтры но немогу найти примеры использования ключевых слов:
#include, #include-once и FileInstall
подскажите путь на топик где обсуждаеться эта тема если такой существует в природе или дайте простейшие образцы написания.
Как включить исполняемый дестребутив програмы в тело скомпилированого скрипта.
немогу найти примеры использования ключевых слов »
#Include служит для подключения библиотек au3.
#Include-once предотвращает повторное поделючение текущей библиотеки (обычно используется в UDF - User Defined Function).
FileInstall служит для включения внешних файлов в компилированный скрипт.
Как включить исполняемый дестребутив програмы в тело скомпилированого скрипта »
FileInstall("Полный\Путь\до\дестребутива\программы", "Путь для распаковки")
* Первый параметр не должен указываться через переменную, только литеральная строка.
В этом случае после компилляции указанный файл будет помещён в скомпилированный скрипт, далее при запуске скрипта, и при том что скрипт дойдёт до выполняемой строки (в том месте где она указана), файл будет распакован в указанное место. Далее можно с ним делать что угодно, если по завершению файл не нужен, то его желательно удалять, скрипт на выходе сам этого не делает.
Спасиба а то в файле справки так тумано и заумно описано что совсем вдругом направлении пробывал писать код.
TERMINAL вообще ничего не выдаётся-cmd срабатывает (показывает чётрный экран и изчезает) »попробуй подправленный (http://forum.oszone.net/post-948247-1115.html) вариант, для отладки замени соответствующую строку на
"$foo = Run(@ComSpec & " /K DevCon Find ^=Media", @SystemDir)"
Я тут придумал безкомпромиссный инсталл, хотя всё довольно просто...
If FileExists($InstallPath) Then Exit
; далее на примере Alcohol тоже следует проверка:
If FileExists(@SystemDir & "\drivers\sptd.sys") Then
; тут весь установочный код
...
...
...
Else
Shutdown(6)
EndIf
И никакие окна не полетят навстречу неожиданно, а юзеру нечего ставить поверх своих програм,
пусть удаляет сначала ;-
хотя msi-тный инсталлер может и выползет даже в таком случае, но думаю что тоже нет :)
Maza Faka
11-11-2008, 08:56
semiono
Можно так-же добавить проверку ключей реестра :)
TERMINAL
11-11-2008, 09:40
amel27, что-то начало двигаться, но мне просто показывыает естественно устройства категории Media, а если имеется неустановленное устройство и вместо Media ставишь Unknown то он почему то пишет что никаких необнаруженных устройств нет.... вот засада...
Maza Faka, ага уже добавил! :)
>> (http://forum.oszone.ru/post-948213-2.html)
Первый мой скрипт выглядел премерно так только пути были прописаны полностьюа здесь использованы макросы и переменые
код:
$MyProga = ""
$MyRazdel1 = ""
$MyRazdel2 = ""
$MyRazdel3 = ""
DirCopy("@AppDataDir/$MyProga", "$MyRazdel1", 1)
DirCopy("@AppDataCommonDir/$MyProga", "$MyRazdel2", 1)
DirCopy("@ProgramFilesDir/$MyProga", "$MyRazdel3", 1)
Shutdown(6)
Проблема была вследующем при тестировании всё работало но на другой машине обнаружилось что скрипт не отрабатываеться полностью а комп уходит на перезагрузку как можно написать чтобы команда "Shutdown" не отрабатывалась пока небудут перемещены все деректории.
И насколько я понял FileInstall("", "") может перемещать только фаилы а с деректориями неработает.
Maza Faka
11-11-2008, 13:07
litus
Вообще-то функция Shutdown() должна "дождаться" завершения функции DirCopy() :unsure: Проверяй, что возвращают функции DirCopy(). Кстати у тебя слеш неправильный используется, нужно использовать обратный \ хотя на работу функции и не влияет, но всё же...:)
И насколько я понял FileInstall("", "") может перемещать только фаилы а с деректориями неработает. »
Угу, только не перемещать, а включать файлы в копмилированный скрипт :)
TERMINAL
показывыает естественно устройства категории Media, а если имеется неустановленное устройство и вместо Media ставишь Unknown то он почему то пишет что никаких необнаруженных устройств нет »
странно, только на вновь установленном буке проверил - семь "вопросов", семь устройств класса Unknown, а что за устройства?.. вообще, класс берется из драйвера, т.е. пока драйвер не установлен класс неопределен... Значит, это устройство должно светиться под другим классом, попробуй следующий код для перечисления всех устройств по классам и найди своё:#include <Constants.au3>
$aClasses = _DevGetClasses()
If IsArray($aClasses) Then
For $i=1 To $aClasses[0]
$txt = _DevConExe("ListClass "& $aClasses[$i])
$buf = StringRegExp($txt, "(?:[&\w]+\\)+[&\w]+", 3)
If IsArray($buf) Then
ConsoleWrite("Class: "& $aClasses[$i] &@CRLF)
ConsoleWrite(@CRLF)
For $j=0 To UBound($buf)-1
ConsoleWrite($buf[$j]&@CRLF)
Next
ConsoleWrite("-----" &@CRLF)
EndIf
Next
EndIf
Func _DevConExe($command)
Local $foo = Run(@ComSpec &" /C DevCon "& $command, @SystemDir, @SW_HIDE, $STDOUT_CHILD)
Local $out = ""
While 1
$out &= StdoutRead($foo)
If @error Then ExitLoop
Wend
Return $out
EndFunc
Func _DevGetClasses()
Local Const $sRoot = "HKLM\System\CurrentControlSet\Control\Class"
Local $sKey, $arr[1]=[0]
For $i=1 To 999
$sKey = RegEnumKey($sRoot, $i)
If @error Then ExitLoop
ReDim $arr[$i+1]
$arr[$i]=RegRead($sRoot &"\"& $sKey,"Class")
Next
$arr[0]=UBound($arr)-1
Return $arr
EndFunc
litus, здесь использованы макросы и переменые »
Они неверно используются, нужно вне кавычках их выводить:
$MyProga = ""
$MyRazdel1 = ""
$MyRazdel2 = ""
$MyRazdel3 = ""
DirCopy(@AppDataDir & "\" & $MyProga, $MyRazdel1, 1)
DirCopy(@AppDataCommonDir & "\" & $MyProga, $MyRazdel2, 1)
DirCopy(@ProgramFilesDir & "\" & $MyProga, $MyRazdel3, 1)
Shutdown(6)
Вообще-то функция Shutdown() должна "дождаться" завершения функции DirCopy() Проверяй, что возвращают функции DirCopy().
---------
Втом и вопрос как проверить значение возращаемое функциейесли она выполняеться то возращает "1" а только потом выполняеться следующая функция.
Втом и вопрос как проверить значение возращаемое функцией »
Подставить переменную перед ней :)
$MyProga = ""
$MyRazdel1 = ""
$MyRazdel2 = ""
$MyRazdel3 = ""
$iDir_1_Copied = DirCopy(@AppDataDir & "\" & $MyProga, $MyRazdel1, 1)
$iDir_2_Copied = DirCopy(@AppDataCommonDir & "\" & $MyProga, $MyRazdel2, 1)
$iDir_3_Copied = DirCopy(@ProgramFilesDir & "\" & $MyProga, $MyRazdel3, 1)
MsgBox(64, "Results", _
StringFormat("$iDir_1_Copied = %i\n$iDir_2_Copied = %i\n$iDir_3_Copied = %i", $iDir_1_Copied, $iDir_2_Copied, $iDir_3_Copied))
If $iDir_1_Copied And $iDir_2_Copied And $iDir_3_Copied Then Shutdown(6)
TERMINAL
11-11-2008, 14:06
amel27, спасибо большое-нашёл другой способ как обходить и решать эту проблему....
Прокоментируйте пожалуста код »
Первое только для отображения значения переменнных, а вторя строка для проверки этих переменных, если они все ровны 1 (True), то выключаем компьютер. Т.е все три папки скопировались.
Можно ещё так:
$iCopied_Dirs_Count = DirCopy(@AppDataDir & "\" & $MyProga, $MyRazdel1, 1)
$iCopied_Dirs_Count += DirCopy(@AppDataCommonDir & "\" & $MyProga, $MyRazdel2, 1)
$iCopied_Dirs_Count += DirCopy(@ProgramFilesDir & "\" & $MyProga, $MyRazdel3, 1)
If $iCopied_Dirs_Count = 3 Then Shutdown(6)
help!
Dim $var1 = '"' & @WindowsDir & '\'
Run(@ComSpec & " /c " & 'rundll32.exe Shell32.dll,Control_RunDLL desk.cpl desk,@Themes /Action:OpenTheme /File:' & $var1 & 'Resources\Themes\Tiger.theme"', "", @SW_HIDE)
WinWait("Display Properties", "",3)
Send("{ENTER}")
Exit
Можно как-то аплет тут запрятать -> @SW_HIDE? Тот который "Display Properties"?
...я сам ещё потружусь, но боюсь не смогу боюсь...
Maza Faka
12-11-2008, 08:28
Можно как-то аплет тут запрятать »
Через Run() нет. Как вариант можно спрятать окно функцией WinSetState()
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.