Показать полную графическую версию : [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.
amel27, сходу тоже не нашел »
Вот (http://www.autoitscript.com/forum/index.php?showtopic=75114) вроде что-то похожее, но это не совсем оно....
Но пока мой последний метод подходит, не думаю что будут с ним проблемы.
Maza Faka
10-07-2008, 14:58
amel27
Помоги пожалуйста, пытаюсь создать zip-архив:
$hDLL = DllOpen("zip32.dll")
$hCallBack_Print = DllCallbackRegister("_Print", "int", "str;long")
$hCallBack_Password = DllCallbackRegister("_Password", "int", "str;int;str;str")
$hCallBack_Comment = DllCallbackRegister("_Comment", "int", "str")
$hCallBack_Progress = DllCallbackRegister("_Progress", "int", "str;long")
$ZIPUSERFUNCTIONS = DllStructCreate("ptr print;ptr pwd;ptr comment;ptr progress")
DllStructSetData($ZIPUSERFUNCTIONS, "print", DllCallbackGetPtr($hCallBack_Print))
DllStructSetData($ZIPUSERFUNCTIONS, "pwd", DllCallbackGetPtr($hCallBack_Password))
DllStructSetData($ZIPUSERFUNCTIONS, "comment", DllCallbackGetPtr($hCallBack_Comment))
DllStructSetData($ZIPUSERFUNCTIONS, "progress", DllCallbackGetPtr($hCallBack_Progress))
$ZPOPT = DllStructCreate("ptr Date;ptr szRootDir;ptr szTempDir;int fTemp;int fSuffix;int fEncrypt;int fSystem;int fVolume;" & _
"int fExtra;int fNoDirEntries;int fExcludeDate;int fIncludeDate;int fVerbose;int fQuiet;int fCRLFLF;" & _
"int fLFCRLF;int fJunkDir;int fGrow;int fForce;int fMove;int fDeleteEntries;int fUpdate;int fFreshen;" & _
"int fJunkSFX;int fLatestTime;int fComment;int fOffsets;int fPrivilege;int fEncryption;int fRecurse;" & _
"int fRepair;byte fLevel")
$Date = DllStructCreate("char[256]")
DllStructSetData($Date, 1, "07/10/08")
$RootDir = DllStructCreate("char[256]")
DllStructSetData($Date, 1, "D:\Work\UnZIP")
$TempDir = DllStructCreate("char[256]")
DllStructSetData($TempDir, 1, "D:\Work\UnZIP")
$Level = DllStructCreate("char[1]")
DllStructSetData($Level, 1, 9)
DllStructSetData($ZPOPT, "Date", DllStructGetPtr($Date))
DllStructSetData($ZPOPT, "szRootDir", DllStructGetPtr($RootDir))
DllStructSetData($ZPOPT, "szTempDir", DllStructGetPtr($TempDir))
DllStructSetData($ZPOPT, "fTemp", 0)
;DllStructSetData($ZPOPT, "fSuffix", 0)
DllStructSetData($ZPOPT, "fEncrypt", 0)
DllStructSetData($ZPOPT, "fSystem", 1)
DllStructSetData($ZPOPT, "fVolume", 0)
DllStructSetData($ZPOPT, "fExtra", 1)
DllStructSetData($ZPOPT, "fNoDirEntries", 0)
DllStructSetData($ZPOPT, "fExcludeDate", 1)
DllStructSetData($ZPOPT, "fIncludeDate", 0)
DllStructSetData($ZPOPT, "fVerbose", 0)
DllStructSetData($ZPOPT, "fQuiet", 0)
DllStructSetData($ZPOPT, "fCRLFLF", 0)
DllStructSetData($ZPOPT, "fLFCRLF", 0)
DllStructSetData($ZPOPT, "fJunkDir", 0)
DllStructSetData($ZPOPT, "fGrow", 0)
DllStructSetData($ZPOPT, "fForce", 0)
DllStructSetData($ZPOPT, "fMove", 0)
DllStructSetData($ZPOPT, "fDeleteEntries", 0)
DllStructSetData($ZPOPT, "fUpdate", 0)
DllStructSetData($ZPOPT, "fFreshen", 0)
DllStructSetData($ZPOPT, "fJunkSFX", 0)
DllStructSetData($ZPOPT, "fLatestTime", 0)
DllStructSetData($ZPOPT, "fComment", 0)
DllStructSetData($ZPOPT, "fOffsets", 0)
DllStructSetData($ZPOPT, "fPrivilege", 0)
DllStructSetData($ZPOPT, "fEncryption", 0)
DllStructSetData($ZPOPT, "fRecurse", 1)
DllStructSetData($ZPOPT, "fRepair", 0)
DllStructSetData($ZPOPT, "fLevel", 0)
$aRet = DllCall($hDLL, "int", "ZpSetOptions", "ptr", DllStructGetPtr($ZPOPT))
ConsoleWrite($aRet[0] & @LF)
;$aRet = DllCall($hDLL, "int", "ZpGetOptions", "ptr", DllStructGetPtr($ZPOPT))
;ConsoleWrite($aRet[0] & @LF)
$aRet = DllCall($hDLL, "int", "ZpInit", "ptr", DllStructGetPtr($ZIPUSERFUNCTIONS))
ConsoleWrite($aRet[0] & @LF)
;============================ZpArchive()==========================================================
$ArchName = DllStructCreate("char[256]")
DllStructSetData($ArchName, 1, "test.zip")
$FileName = DllStructCreate("char[256]")
DllStructSetData($FileName, 1, "test.jpg")
$ZpArchive_Struct = DllStructCreate("int count;ptr arc;ptr file")
DllStructSetData($ZpArchive_Struct, "count", 1)
DllStructSetData($ZpArchive_Struct, "arc", DllStructGetPtr($ArchName))
DllStructSetData($ZpArchive_Struct, "file", DllStructGetPtr($FileName))
$aRet = DllCall($hDLL, "int", "ZpArchive", "ptr", DllStructGetPtr($ZpArchive_Struct))
ConsoleWrite("!> ZpArchive: " & $aRet[0] & @LF)
;=============================================================================================
DllCallbackFree($hCallBack_Print)
DllCallbackFree($hCallBack_Password)
DllCallbackFree($hCallBack_Comment)
DllCallbackFree($hCallBack_Progress)
Func _Print($sFile, $sPos)
ConsoleWrite($sFile & @LF)
EndFunc
Func _Password($sPWD, $sX, $sS2, $sName)
ConsoleWrite("Password" & @LF)
EndFunc
Func _Comment($sComment)
ConsoleWrite("!> File " & $sComment & " is overwrite" & @LF)
EndFunc
Func _Progress($sName, $sSize)
ConsoleWrite("---> Arch name: " & $sName & @LF & _
"---> Pos: " & $sSize & @LF)
EndFunc
Прилагаю dll-ку и help-файл
Maza Faka,
На оф. форуме много раз приводили примеры, вот например: Zip plugin (http://www.autoitscript.com/forum/index.php?showtopic=44524&hl=%5Czip+plugin%5C).
Maza Faka
10-07-2008, 18:02
Creat0R
Знаю, скачал недавно, распаковал архив, а там каша из файлов и директорий, непонятно, что куда "втыкать", примеров нет, можно конечно разобраться, но попробовал запустить и получив вот такое окно
http://www.new-page.info/img/quest.jpg
от дальнейшего "ковыряния" отказался :)
amel27
Вопрос снимается (временно?) С основными функциями разобрался, есть конечно пара проблемных параметров, попробую разобраться сам, если не получиться придётся тебя побеспокоить :)
chumova9I
11-07-2008, 13:20
привет!
учусь работать с autoit.
возник вопрос.
вот код:
Run("C:\WINDOWS\system32\cmd.exe /k chcp 866 && set PGPORT=5432")
WinActivate("C:\WINDOWS\system32\cmd.exe")
Send("pg_dumpall -U postgres -f atest2.dump")
Send("{ENTER}")
Send("irishka")
Send("{ENTER}")
Send("psql -U postgres < atest2.dunp")
Send("{ENTER}")
после запуска получаю ошибку, обьясните что не правильно и как решить проблему!
вот ошибка :
Текущая кодовая страница: 866
C:\Program Files\PostgreSQL\8.2\bin>_dumpall -U postgres -f atest2.dump
"_dumpall" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
C:\Program Files\PostgreSQL\8.2\bin>irishka
"irishka" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
C:\Program Files\PostgreSQL\8.2\bin>psql -U postgres < atest2.dunp
Не удается найти указанный файл.
C:\Program Files\PostgreSQL\8.2\bin>
заранее спасибо!
chumova9I
11-07-2008, 15:54
все разобралась, это был глюк!
C:\Program Files\PostgreSQL\8.2\bin>_dumpall -U postgres -f atest2.dump
"_dumpall" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом
простоне отображал первые два символа, поставила парочку пробелов и все пашет!!!
Кок создат форму с двумя кнопками а на кнопках функции запуска установки, например (Setup.exe).
AlexNeo, создат форму с двумя кнопками а на кнопках функции запуска установки, например (Setup.exe). »
Пример:
#include <GuiConstantsEx.au3>
$GUI = GUICreate("Setup Demo", 300, 200)
$MyApp_Button = GUICtrlCreateButton("My App", 20, 40, 60, 20)
$OtherApp_Button = GUICtrlCreateButton("Other App", 20, 70, 60, 20)
GUISetState(@SW_SHOW, $GUI)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $MyApp_Button
Run("MySetup.exe")
Case $OtherApp_Button
Run("OtherSetup.exe")
EndSwitch
WEnd
SvetlanaK
15-07-2008, 14:47
Здравствуйте! а не подскажет ли кто, как обратиться к фтп и считать с него файлы для последующей записи на другой сервер?
$oIE = _IECreate ()
_IENavigate ($oIE, "ftp://ё.ёёё.ёё.ёё") -это в принципе иногда срабатывает, но меня интересует что-то вроде UDF, как ExcelCOM_UDF.au3, чтобы можно было папку с файлами на фтп обработать как объект, определить имена файлов, даты и т.д, списком. Нарыла FTP.au3 - не то по-моему( он только несколько команд выполняет - удалить, апгрейдить и сконнектить( Перерыла архивы форума тоже к сожалению ничего не нашла( Буду благодарна за любой совет.
SvetlanaKон только несколько команд выполняет »AFAIK последняя редакция FTP.AU3 лежит тут: http://www.autoitscript.com/forum/index.php?showtopic=44638&st=0&p=332541&#entry332541
SvetlanaK
16-07-2008, 15:32
amel27, ага...поняла. Спасибо Вам большое!
leprecon
20-07-2008, 13:11
Ответьте пожалуйста на мои возникшие вопросы:
1. Как из строки C:\Program Files\1123\dfgfdfgdg.exe с помощью скрипта скопировать dfgfdfgdg.exe? (имеется ввиду что dfgfdfgdg.exe будет каждый раз разное:) )
2. Можно ли при помощи Autoit генерировать другие ехе приложения? Мне нужно, чтобы после указания нужного файла создался новый exe файл который будет использовать заранее указанные настройки.
Maza Faka
20-07-2008, 14:06
leprecon
1.
$string = "C:\Program Files\1123\dfgfdfgdg.exe"
$result = StringRegExpReplace($string, "^.*\\", "")
MsgBox(0, "", $result)
2.
$hFileOpen = FileOpen(@TempDir & "\tmp.au3", 2)
$val = "Hello world!"
$string = 'Sleep(2000)' & @LF & _
'Global $Var = "' & $val & '"' & @LF & _
'GUICreate("Test", 200, 100)' & @LF & _
'GUICtrlCreateLabel($Var, 50, 50, 100, 16)' & @LF & _
'GUISetState()' & @LF & _
'Do' & @LF & _
'Until GuiGetMsg() = -3'
FileWrite($hFileOpen, $string)
FileClose($hFileOpen)
Run("c:\Program Files\AutoIt3\AutoIt3.exe " & @TempDir & "\tmp.au3")
Я реализовал подобное в своём проекте (http://www.autoitscript.com/forum/index.php?showtopic=71591&view=findpost&p=523767)
leprecon
20-07-2008, 19:27
Подскажите, в чем тут ошибка?
$var = FileOpenDialog("Выберите файл с игрой", @ProgramFilesDir & "\", "Exe file (*.exe)", 1 )
GUICtrlSetData(10,$var, "")
$trimright = StringRegExpReplace($var, "^.*\\", "")
$result = StringTrimRight( $trimright, 4 )
GUICtrlSetData(3,$result, "" )
IniWrite( "reflexive.ini", "STROKA", "file", $result )
IniWrite( "reflexive.ini", "Directory", "File", $var )
Теоретически, после запуска и выбора нужного файла, в папке со скриптом должен создоваться INI файл который содержит путь к ранее указаному файлу. Но на практике такой файл не создается... :(
Я пробывал просто прописывать числа в INI файл через переменные:
$stroka1 = InputBox( "Строка 1", "Строка первая" )
$stroka2 = InputBox( "Строка 2", "Строка вторая" )
IniWrite( "reflexive.ini", "STROKA", "File", $stroka1 )
IniWrite( "reflexive.ini", "Directory", "File", $stroka2 )
Такой способ срабатывает, да и вообще во всех остальных случаях IniWrite работает нормально...
Run("c:\Program Files\AutoIt3\AutoIt3.exe " & @TempDir & "\tmp.au3") »
Как я понял тут используется установленный Autoit? А как быть с другими компьютерами?
leprecon,
Теоретически, после запуска и выбора нужного файла, в папке со скриптом должен создоваться INI файл »
Нет, файл будет создан там, куда указывает рабочий каталог (@WorkingDir). FileOpenDialog() (и ей подобные) задаёт рабочий каталог тот, в котором был выбран файл.
Поэтому указывать нужно полный путь (это касается всех случаях когда используются относительные пути):
IniWrite(@ScriptDir & "\reflexive.ini", "STROKA", "File", $stroka1)
тут используется установленный Autoit? А как быть с другими компьютерами? »
Run(@AutoItExe & ' /AutoIt3ExecuteScript "' & @TempDir & '\tmp.au3"')
Maza Faka
21-07-2008, 08:09
Как я понял тут используется установленный Autoit? А как быть с другими компьютерами? »
Придётся включать в код компилятор и компилировать вновь созданный скрипт.
Maza Faka, Придётся включать в код компилятор и компилировать вновь созданный скрипт. »
Зачем? или я не понял что ты имеешь в виду...
Строка что я привёл, будет работать даже при отсутствии установленного аутоита в системе, сам скомпилированный скрипт работает как интерпритатор AutoIt-кода/скрипта.
Maza Faka
21-07-2008, 09:13
Creat0R
Я имел в виду, если доп. скрипт, созданный главным скриптом (программой) будет запускаться не из главного скрипта его создавшего, а скажем спустя некоторое время :)
Maza Faka, Я имел в виду, если доп. скрипт, созданный главным скриптом (программой) будет запускаться не из главного скрипта его создавшего, а скажем спустя некоторое время »
Как отдельная программа (exe'шник)? Нет, так не получится, компиллятор аутоита портировать в скрипт это не выход, тем более что оно нарушает лицензионное соглашение.
Есть ещё вариант...
* Берём бесплатный (ещё и с открытым кодом) 7zip (http://www.7-zip.org/) (его консольную версию).
* Берём пустой скомпилированный скрипт (будет в качестве интерпритатора).
- Компиллируем это всё (с испол. FileInstall()) в нужный нам скрипт.
- А в момент необходимости создать отдельный exe'шник, пишем нужный нам код во временный файл (например Au3Script.plg), запускаем 7zip с параметрами на создание SFX-архива в который поместить наш файл с кодом, плюс наш пустой скомпилированный скрипт, а как параметр при запуске после распаковки указать файл с кодом (типа «Interpritator.exe Au3Script.plg»). Ну или вместо пустого скрипта копировать сам родительский скрипт, т.е паковать его самого как интерпритатор.
Вот такой вот извращённый метод :biggrin:
Но должно получиться :beta: .
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.