Показать полную графическую версию : [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.
Maza Faka
04-01-2009, 07:40
Помогите сделать небольшой скрипт »
Довольно-таки сумбурное изложение проблемы :) Как я понял тебе нужно реализовать
окно с полосой проверки измененных файлов в папке "sys"
?
Frag-o-Matik
04-01-2009, 08:57
окно с полосой проверки измененных файлов в папке "sys" »
нет)
Довольно-таки сумбурное изложение проблемы »
ну не знаю как объяснить по другому, ща попытаюсь
вот структура папок:
-Path
-*.ini
-Ustanovka.exe
-Sys
-*.ini
-Ustanovka.exe
-Zapusk.exe
Запуск производится только файлом Zapusk.exe, который сначала проверяет ini файлы на изменения через сервер в интернете. После проверки в окне Zapusk.exe становится активной кнопка Установить, при нажатии которой запускается файл с папки Sys - Ustanovka.exe. Но прежде чем нажать эту кнопку, я запускаю бат файл (после проверки инишников), который подменяет папку систем со своими ини файлами и файлом Ustanovka.exe. Хотелось бы автоматизировать процесс, чтобы постоянно вручную не переименовывать папки, потому что иногда забываешь :)
katok888
04-01-2009, 09:31
Creat0R, 2009-01-04 09:29:03>> ============ Debug Log For [Folder.exe] Started...
2009-01-04 09:29:03>> ============ Operating System: WIN_XP
2009-01-04 09:29:03>> ============ Service Pack: Service Pack 3
2009-01-04 09:29:03>> ============ File System: NTFS ============
...
2009-01-04 09:29:37>> ============ Debug Log Finished (EXIT CODE: 0) ============
Maza Faka
04-01-2009, 10:37
Хотелось бы автоматизировать процесс, чтобы постоянно вручную не переименовывать папки »
Но ты ведь вроде ответил на свой вопрос?
If FileExists("path") Then
RunWait("Zapusk.exe", "")
ProcessWaitClose ( "Zapusk.exe" )
???; ВОТ ЗДЕСЬ Я НЕ ПОНИМАЮ ЧТО НАПИСАТЬ)
DirMove("sys", "sys1")
DirMove("path", "sys")
EndIf
ProcessWaitClose ( "Ustanovka.exe" )
DirMove("system", "path")
DirMove("system1", "system")
exit
Может так?
If FileExists("path") Then
DirMove("sys", "sys1")
DirMove("path", "sys")
RunWait("Zapusk.exe", "")
ProcessWaitClose("Zapusk.exe")
EndIf
ProcessWaitClose("Ustanovka.exe")
DirMove("system", "path")
DirMove("system1", "system")
katok888, Я не вижу что вообще была попытка создать папку, ведь для этого нужно нажать «Ctrl + Shift + N» :)
лог в студию: »
2009-01-04 12:54:55>> ============ Debug Log For [AutoIt v3 Script.au3] Started...
2009-01-04 12:54:55>> ============ Operating System: WIN_XP
2009-01-04 12:54:55>> ============ Service Pack: Service Pack 2
2009-01-04 12:54:55>> ============ File System: NTFS ============
...
2009-01-04 12:55:04>> _CreateFolder_Proc Call: Found active window with following Class Name: [CLASS:Progman]
2009-01-04 12:55:04>> _CreateFolder_Proc Call: And with following Title: Program Manager
2009-01-04 12:55:04>> _CreateFolder_Proc Call: Detected path for creating folder in: C:\Documents and Settings\gansello\Рабочий стол
2009-01-04 12:55:04>> _CreateFolder_Proc Call: Creating folder with the following name: New_1...
2009-01-04 12:55:04>> _CreateFolder_Proc Call: Folder created(?): True
2009-01-04 12:55:13>> _CreateFolder_Proc Call: Found active window with following Class Name: [CLASS:CabinetWClass]
2009-01-04 12:55:13>> _CreateFolder_Proc Call: And with following Title: Multimedia (D:)
2009-01-04 12:55:13>> _CreateFolder_Proc Call: Path for creating folder was not found:
2009-01-04 12:55:17>> _CreateFolder_Proc Call: Found active window with following Class Name: [CLASS:CabinetWClass]
2009-01-04 12:55:17>> _CreateFolder_Proc Call: And with following Title: Multimedia (D:)
2009-01-04 12:55:17>> _CreateFolder_Proc Call: Path for creating folder was not found:
А что во вкладке Hidden Text? »
Пусто.
katok888
04-01-2009, 13:15
Creat0R, Ну так я и нажимал
ganselo, katok888,
Проблему нашёл вроде, у вас адресная строка выключенна в проводнике? :) - Щас попробую найти решение...
у вас адресная строка выключенна в проводнике »
У меня да.
katok888
04-01-2009, 13:39
Проблему нашёл вроде, у вас адресная строка выключенна в проводнике? »
У меня вообще QTadressbar
Включил адресную строку и всё заработало.
Вообщем вот ещё одна версия, если путь не найден, путь определяется методом создания временного файла с использованием буфера обмена. Есть также метод где происходит откат адресной строки, для этого нужно установить 1 у переменной $iGet_Path_Method. Так или иначе, оба метода не самые надёжные :beta: :jester:
* Также добавил поддержку очерёдности запуска функции - По идее, если нажимать заветные горячие клавиши несколько раз подряд, то папки будут создаваться по очерёдно, в логе будет это записано (попытка двойного вызова, и запись с очереди).
#NoTrayIcon
#include <File.au3>
#include <Misc.au3>
_Singleton("_CreateFolder_Proc")
Opt("WinWaitDelay", 1)
Global $i_CreateFolder_Proc_IsRuning = False
Global $iQueue_Calls = 0
Global $iDebug = True
Global $sDebug_LogFile = @ScriptDir & "\DebugLog.log"
Global $iGet_Path_Method = -1
Global $sFileNameFormat = "New_%i"
HotKeySet("^+n", "_CreateFolder_Proc") ;Ctrl + Shift + n
HotKeySet("^+т", "_CreateFolder_Proc") ;Ctrl + Shift + n
HotKeySet("^+w", "_Quit") ;Ctrl + Shift + w
HotKeySet("^+ц", "_Quit") ;Ctrl + Shift + w
OnAutoItStart_Init()
While 1
Sleep(1000)
If $iQueue_Calls > 0 Then
For $i = 1 To $iQueue_Calls
_CreateFolder_Proc($i)
Next
EndIf
WEnd
Func _CreateFolder_Proc($iQueue_Call=0)
If $i_CreateFolder_Proc_IsRuning Then
$iQueue_Calls += 1
Return _DebugToLog_Proc("_CreateFolder_Proc Call: ### Double Call Try... Added to the Queue (#" & $iQueue_Calls & ").")
EndIf
$i_CreateFolder_Proc_IsRuning = True
Local $s_CreateFolder_Proc_DebugData = "_CreateFolder_Proc Call: Called by HotKey(" & @HotKeyPressed & ")"
If IsDeclared("iQueue_Call") And $iQueue_Call > 0 Then
$s_CreateFolder_Proc_DebugData &= " ==> Queue Call #" & $iQueue_Call
$iQueue_Calls -= 1
EndIf
_DebugToLog_Proc($s_CreateFolder_Proc_DebugData & ".")
Local $sExplorer_Title = "[CLASS:CabinetWClass]"
Local $sPath, $iFolder_Created = 0
If Not WinActive($sExplorer_Title) Then $sExplorer_Title = "[CLASS:ExploreWClass]"
If Not WinActive($sExplorer_Title) Then $sExplorer_Title = "[CLASS:Progman]"
If Not WinActive($sExplorer_Title) Then
$i_CreateFolder_Proc_IsRuning = False
Return _DebugToLog_Proc("_CreateFolder_Proc Call: Dir creation is not possible in currently active window: " & _
WinGetTitle("[ACTIVE]") & @CRLF)
EndIf
Switch $sExplorer_Title
Case "[CLASS:CabinetWClass]", "[CLASS:ExploreWClass]"
Local $sWin_Title = WinGetTitle($sExplorer_Title)
Local $sWin_Text = WinGetText($sExplorer_Title)
$sPath = StringRegExpReplace($sWin_Text, "(?s).*(\r\n|)(\w+:\\.*" & $sWin_Title & ")(\r\n|.*)", "\2")
Case "[CLASS:Progman]"
$sPath = @DesktopDir
Case Else
$i_CreateFolder_Proc_IsRuning = False
Return _DebugToLog_Proc( _
"_CreateFolder_Proc Call: " & _
"Unexpected error (can not get window class name, perhaps a memory unavailable)." & @CRLF)
EndSwitch
_DebugToLog_Proc("_CreateFolder_Proc Call: Found active window with following Class Name: " & $sExplorer_Title)
_DebugToLog_Proc("_CreateFolder_Proc Call: And with the following Title: " & WinGetTitle($sExplorer_Title))
If Not StringInStr(FileGetAttrib($sPath), "D") Then $sPath = ControlGetText($sExplorer_Title, "", "Edit1")
If Not StringInStr(FileGetAttrib($sPath), "D") Then
_DebugToLog_Proc("_CreateFolder_Proc Call: Path for creating folder was not found... ")
_DebugToLog_Proc("_CreateFolder_Proc Call: Trying to get path in a hard way :)... (MODE: " & $iGet_Path_Method & ")")
Switch $iGet_Path_Method
Case 1
ControlSend($sExplorer_Title, "", "ToolbarWindow322", "!в{Right}{Down}{Enter}")
Sleep(200)
$sPath = ControlGetText($sExplorer_Title, "", "Edit1")
ControlSend($sExplorer_Title, "", "ToolbarWindow322", "!в{Right}{Down}{Enter}")
Case Else
Local $sTmp_File = _TempFile(@TempDir, "~__Au3_DirCreate_Tmp_Module__")
Local $sTmp_FileName = StringRegExpReplace($sTmp_File, "^.*\\|\.[^\.]*$", "")
Local $hOpenFile = FileClose(FileOpen($sTmp_File, 2))
_ClipPutFile($sTmp_File)
If @error Then _DebugToLog_Proc("_CreateFolder_Proc Call: _ClipPutFile Failed.")
ControlSend($sExplorer_Title, "", "SysListView321", "+{Insert}")
Sleep(500)
$iItem = ControlListView($sExplorer_Title, "", "SysListView321", "FindItem", $sTmp_FileName)
ControlListView($sExplorer_Title, "", "SysListView321", "SelectClear")
ControlListView($sExplorer_Title, "", "SysListView321", "Select", $iItem, $iItem)
Sleep(200)
ControlSend($sExplorer_Title, "", "SysListView321", "^{Insert}")
Sleep(500)
$sPath = ClipGet()
If @error Then _DebugToLog_Proc("_CreateFolder_Proc Call: ClipGet() Failed (ERROR: " & @error & ").")
If StringInStr($sPath, @CRLF) Then _
$sPath = StringLeft($sPath, StringInStr($sPath, @CRLF)-1)
$sPath = StringLeft($sPath, StringInStr($sPath, "\", 0, -1)-1)
FileDelete($sPath & "\" & $sTmp_FileName & ".tmp")
FileDelete($sTmp_File)
EndSwitch
If Not StringInStr(FileGetAttrib($sPath), "D") Then
$i_CreateFolder_Proc_IsRuning = False
Return _DebugToLog_Proc("_CreateFolder_Proc Call: Path for creating folder was not found: " & $sPath)
EndIf
EndIf
_DebugToLog_Proc("_CreateFolder_Proc Call: Detected path for creating folder in: " & $sPath)
Local $iFolder_Num = 1
Local $sNewFolderName = StringFormat($sFileNameFormat, $iFolder_Num)
While StringInStr(FileGetAttrib($sPath & "\" & $sNewFolderName), "D")
$iFolder_Num += 1
$sNewFolderName = StringFormat($sFileNameFormat, $iFolder_Num)
WEnd
_DebugToLog_Proc("_CreateFolder_Proc Call: Creating folder with the following name: " & $sNewFolderName & "...")
$iFolder_Created = DirCreate($sPath & "\" & $sNewFolderName)
_DebugToLog_Proc("_CreateFolder_Proc Call: Folder created(?): " & ($iFolder_Created = 1) & @CRLF)
$i_CreateFolder_Proc_IsRuning = False
EndFunc ;==>_CreateFolder_Proc
Func _DebugToLog_Proc($sDebug_Info)
If Not $iDebug Then Return
_FileWriteLogEx($sDebug_LogFile, $sDebug_Info & @CRLF)
EndFunc ;==>_DebugToLog_Proc
Func _FileWriteLogEx($sLogPath, $sLogMsg, $iFlag = -1)
Local $sDateNow, $sTimeNow, $sMsg, $iWriteFile, $hOpenFile, $iOpenMode = 1
$sDateNow = @YEAR & "-" & @MON & "-" & @MDAY
$sTimeNow = @HOUR & ":" & @MIN & ":" & @SEC
$sMsg = $sDateNow & " " & $sTimeNow & ">> " & $sLogMsg
If $iFlag <> -1 Then
$sMsg &= FileRead($sLogPath)
$iOpenMode = 2
EndIf
$hOpenFile = FileOpen($sLogPath, $iOpenMode)
If $hOpenFile = -1 Then Return SetError(1, 0, 0)
$iWriteFile = FileWriteLine($hOpenFile, $sMsg)
If $iWriteFile = -1 Then Return SetError(2, 0, 0)
Return FileClose($hOpenFile)
EndFunc ;==>_FileWriteLogEx
Func _Quit()
Exit
EndFunc ;==>_Quit
Func OnAutoItStart_Init()
If $iDebug Then
If FileRead($sDebug_LogFile) <> "" Then
_FileWriteLogEx($sDebug_LogFile, _
StringFormat("============ Debug Log For [%s] Started ============\r\n\r\n...\r\n\r\n", @ScriptName))
Else
_FileWriteLogEx($sDebug_LogFile, StringFormat("============ Debug Log For [%s] Started...", @ScriptName))
_FileWriteLogEx($sDebug_LogFile, StringFormat("============ Operating System: %s\r\n", @OSVersion))
_FileWriteLogEx($sDebug_LogFile, StringFormat("============ Service Pack: %s\r\n", @OSServicePack))
_FileWriteLogEx($sDebug_LogFile, _
StringFormat("============ File System: %s ============\r\n\r\n...\r\n\r\n", DriveGetFileSystem(@HomeDrive)))
EndIf
EndIf
EndFunc ;==>OnAutoItStart_Init
Func OnAutoItExit()
If $iDebug Then
_FileWriteLogEx($sDebug_LogFile, _
StringFormat("============ Debug Log Finished (EXIT CODE: %i) ============\r\n\r\n\r\n", @ScriptName, @exitCode))
$iOpen_LogFile = MsgBox(36, @ScriptName & " - Attention", "Open Debug Log File?" & @CRLF & @CRLF & $sDebug_LogFile)
If $iOpen_LogFile = 6 Then ShellExecute($sDebug_LogFile, "", "", "Open", @SW_SHOWNORMAL)
EndIf
EndFunc ;==>OnAutoItExit
Frag-o-Matik
04-01-2009, 18:42
Может так?
Код:
If FileExists("path") Then
DirMove("sys", "sys1")
DirMove("path", "sys")
RunWait("Zapusk.exe", "")
ProcessWaitClose("Zapusk.exe")
EndIf
ProcessWaitClose("Ustanovka.exe")
DirMove("system", "path")
DirMove("system1", "system") »
если будет так, то сразу после запуска файла zapusk.exe он мне обновит все пропатченные файлы, уже в переименованной папке :)
Ребят, прошу помощи по следующему вопросу, я уже как-то постил подобное, но вот сегодня решил всё же решить, если это решаемо.
Есть окно с вот таким заголовком:
http://img154.imageshack.us/img154/4624/12279482hd8.th.png (http://img154.imageshack.us/img154/4624/12279482hd8.png)
Нужно его свернуть, но только что бы скрипт например отработал после своего запуска через определённое количество секунд, например 5.
Можно попросить кого-нить, если не затруднит написать скриптик подобный, если достаточно того, что я предоставил, т.е. заголовок содержит SoulSeek? Заранее благодарен.
Нужно его свернуть, но только что бы скрипт например отработал после своего запуска через определённое количество секунд, например 5. »
$iTimer = TimerInit()
While 1
If $iTimer <> 0 And TimerDiff($iTimer) >= 5000 Then
$iTimer = 0
WinSetState("SoulSeek", "", @SW_MINIMIZE)
EndIf
Sleep(10)
WEnd
;Или сразу паузу ставить...
Sleep(5000)
WinSetState("SoulSeek", "", @SW_MINIMIZE)
shyra1976
05-01-2009, 11:22
_Test()
If @error Then MsgBox(0, "", "::: ERROR :::")
Func _Test()
$AnswTest = MsgBox(4, "TEST", "Test Passed?")
If $AnswTest = 7 Then ; NO (Test Failed)
$Answ = MsgBox(21, "Error", "Communication ERROR")
Select
Case $Answ = 4 ;Retry
_Test()
Case $Answ = 2 ;Cancel
;~ ConsoleWrite($Answ & @LF)
Return SetError(1)
EndSelect
EndIf
ConsoleWrite(@error & @LF)
ConsoleWrite("Test Passed" & @LF)
Return
EndFunc ;==>_Test
мужики,помогите
Есть рекурсия , она вызывает сому себя .А когда выходит закрывает себя столко раз сколко открыла себя
Вопрос : как сделат так ,что бы Return SetError(1) деиствително возврощал "1" после закритии рекурсии
Да же если она откривалась несколко раз
как сделат так ,что бы Return SetError(1) деиствително возврощал "1" после закритии рекурсии »
Нужно ещё проверять @error после отработки рекурсии:
_Test()
If @error Then MsgBox(0, "", "::: ERROR :::")
Func _Test()
$AnswTest = MsgBox(4, "TEST", "Test Passed?")
If $AnswTest = 7 Then ; NO (Test Failed)
$Answ = MsgBox(21, "Error", "Communication ERROR")
Select
Case $Answ = 4 ;Retry
_Test()
Return SetError(@error)
Case $Answ = 2 ;Cancel
;~ ConsoleWrite($Answ & @LF)
Return SetError(1)
EndSelect
EndIf
ConsoleWrite(@error & @LF)
ConsoleWrite("Test Passed" & @LF)
Return
EndFunc ;==>_Test
А вообще подобное циклами делается, на рекурсию есть ограничение:
_Test()
If @error Then MsgBox(0, "", "::: ERROR :::")
Func _Test()
While 1
$AnswTest = MsgBox(4, "TEST", "Test Passed?")
If $AnswTest = 7 Then ; NO (Test Failed)
$Answ = MsgBox(21, "Error", "Communication ERROR")
Switch $Answ
Case 4 ;Retry
ContinueLoop
Case 2 ;Cancel
Return SetError(1)
EndSwitch
EndIf
ExitLoop
WEnd
ConsoleWrite(@error & @LF)
ConsoleWrite("Test Passed" & @LF)
EndFunc ;==>_Test
Забавно что Jos дал (http://www.autoitscript.com/forum/index.php?s=&showtopic=87149&view=findpost&p=625250) почти такой же ответ, но у него способ без рекурсии попроще/покороче :).
Creat0R, а можно что бы после завершения своих действий, скрипт закрывался?
И ещё, можно ли сделать так, что бы скрипт кликал мышкой на кнопочку свернуть, поскольку текущие параметры не сворачивают SS в трей, он по прежнему ложится на панель задач, т.е. собственно, что я и пытаюсь решить :) Спасибо и ещё раз заранее благодарен.
shyra1976
05-01-2009, 13:38
Creat0R,
спасибо тебе ,и здоровья бычьего ,что бы мог дальше отвечат на наши вопроси
можно что бы после завершения своих действий, скрипт закрывался? »
Он закрывается, просто там ведь пауза стоит в 5 секунд ;)
можно ли сделать так, что бы скрипт кликал мышкой на кнопочку свернуть, поскольку текущие параметры не сворачивают SS в трей, он по прежнему ложится на панель задач »
Кликнуть можно по координатам кнопки сворачивания (в «AutoIt Info Tool» можно их посмотреть наведя курсор мышки на кнопку) с помощью MouseClick. Но это не надёжно :(.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.