Войти

Показать полную графическую версию : [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 [37] 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78

Creat0R
09-07-2008, 20:49
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-файл

Creat0R
10-07-2008, 16:08
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" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом

простоне отображал первые два символа, поставила парочку пробелов и все пашет!!!

AlexNeo
13-07-2008, 17:04
Кок создат форму с двумя кнопками а на кнопках функции запуска установки, например (Setup.exe).

Creat0R
13-07-2008, 23:44
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 - не то по-моему( он только несколько команд выполняет - удалить, апгрейдить и сконнектить( Перерыла архивы форума тоже к сожалению ничего не нашла( Буду благодарна за любой совет.

AlexNeo
15-07-2008, 18:06
Creat0R, Спасибо.

amel27
16-07-2008, 04:39
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? А как быть с другими компьютерами?

Creat0R
20-07-2008, 23:04
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? А как быть с другими компьютерами? »
Придётся включать в код компилятор и компилировать вновь созданный скрипт.

Creat0R
21-07-2008, 08:16
Maza Faka, Придётся включать в код компилятор и компилировать вновь созданный скрипт. »
Зачем? или я не понял что ты имеешь в виду...
Строка что я привёл, будет работать даже при отсутствии установленного аутоита в системе, сам скомпилированный скрипт работает как интерпритатор AutoIt-кода/скрипта.

Maza Faka
21-07-2008, 09:13
Creat0R
Я имел в виду, если доп. скрипт, созданный главным скриптом (программой) будет запускаться не из главного скрипта его создавшего, а скажем спустя некоторое время :)

Creat0R
21-07-2008, 09:59
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