Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Закрытая тема
Настройки темы
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

(*.*)


Сообщения: 36572
Благодарности: 6702


Конфигурация

Профиль | Сайт | Отправить PM | Цитировать


Изменения
Автор: Vadikan
Дата: 21-01-2009
Описание: архив
Внимание!


В связи с созданием отдельного форума по AutoIt, эта тема переводится в архивное состояние. Если у вас есть вопрос, создайте новую тему или поднимите существующую, если в ней обсуждается аналогичная проблема.

Пожалуйста, не создавайте тем с названием "Помогите!" или "Нужна помощь по AutoIt". Это и так понятно Заголовок темы должен быть осмысленным.



Сайт программы
Русская справка
Коллекция AutoIt скриптов от Sanja Alone
Коллекция AutoIt скриптов от MSFN (могут быть устаревшие).


Справочник по командам rundll32 (команды запуска диалоговых окон и не только...)

AutoIt скрипты - введение и FAQ (статья содержит вводную информацию по AutoIt, а также ответы на ЧаВо).

Архивы старых тем по AutoIt или они же в 7z архиве (версии для печати) - 846 кб (настоятельно рекомендуется к прочтению/поиску)
(он же прикреплен в шапке)


Данная тема предназначена для общих вопросов по AutoIt. Вопросы по установке приложений при помощи AutoIt следует задавать в соответствии с правилами форума "Автоматическая установка приложений". Таким образом, если вы хотите узнать как установить Winamp 5.x при помощи AutoIt, то создайте тему [autoit] Winamp 5.х (если таковой еще нет на форуме). Проверить наличие тем можно при помощи поиска или фильтров.
Цитата Vadikan:
В теме уже свыше 500 сообщений и поиск нужной информации в ней усложняется. Есть предложение собрать все решения (скрипты) и разместить их на Wiki по принципу "один скрипт - одна статья wiki", добавляя статьи в категорию Autoit. Речь, в принципе, идет об общих решениях, а не о скриптах для установки конкретной программы. Название статьи, очевидно, должно отражать назначение скрипта. Затем можно в шапке просто разместить ссылки на статьи Wiki.

-------
Канал Windows 11, etc | Чат @winsiders

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:02, 05-02-2006

 

Аватара для ganselo

Старожил


Сообщения: 232
Благодарности: 90

Профиль | Сайт | Отправить PM | Цитировать


Включил адресную строку и всё заработало.

-------
К величайшему сожалению "история учит нас тому, что она ничему не учит".


Отправлено: 14:00, 04-01-2009 | #1411



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Вообщем вот ещё одна версия, если путь не найден, путь определяется методом создания временного файла с использованием буфера обмена. Есть также метод где происходит откат адресной строки, для этого нужно установить 1 у переменной $iGet_Path_Method. Так или иначе, оба метода не самые надёжные

* Также добавил поддержку очерёдности запуска функции - По идее, если нажимать заветные горячие клавиши несколько раз подряд, то папки будут создаваться по очерёдно, в логе будет это записано (попытка двойного вызова, и запись с очереди).

Код: Выделить весь код
#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

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Последний раз редактировалось Creat0R, 05-01-2009 в 22:02.

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:50, 04-01-2009 | #1412


Пользователь


Сообщения: 57
Благодарности: 8

Профиль | Отправить PM | Цитировать


Цитата Maza Faka:
Может так?
Код:
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 он мне обновит все пропатченные файлы, уже в переименованной папке

Отправлено: 18:42, 04-01-2009 | #1413


Ветеран


Сообщения: 916
Благодарности: 34

Профиль | Отправить PM | Цитировать


Ребят, прошу помощи по следующему вопросу, я уже как-то постил подобное, но вот сегодня решил всё же решить, если это решаемо.

Есть окно с вот таким заголовком:

Нужно его свернуть, но только что бы скрипт например отработал после своего запуска через определённое количество секунд, например 5.

Можно попросить кого-нить, если не затруднит написать скриптик подобный, если достаточно того, что я предоставил, т.е. заголовок содержит SoulSeek? Заранее благодарен.

-------
All my homies dont play better watch what you say and put your glock away, ease back, ease back, ease back before i squeeze that...


Отправлено: 01:44, 05-01-2009 | #1414


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата SAOPP:
Нужно его свернуть, но только что бы скрипт например отработал после своего запуска через определённое количество секунд, например 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)

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 01:50, 05-01-2009 | #1415


Новый участник


Сообщения: 36
Благодарности: 2

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
_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" после закритии рекурсии
Да же если она откривалась несколко раз

Отправлено: 11:22, 05-01-2009 | #1416


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата shyra1976:
как сделат так ,что бы 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 дал почти такой же ответ, но у него способ без рекурсии попроще/покороче .

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Последний раз редактировалось Creat0R, 05-01-2009 в 13:46.

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:27, 05-01-2009 | #1417


Ветеран


Сообщения: 916
Благодарности: 34

Профиль | Отправить PM | Цитировать


Creat0R, а можно что бы после завершения своих действий, скрипт закрывался?

И ещё, можно ли сделать так, что бы скрипт кликал мышкой на кнопочку свернуть, поскольку текущие параметры не сворачивают SS в трей, он по прежнему ложится на панель задач, т.е. собственно, что я и пытаюсь решить Спасибо и ещё раз заранее благодарен.

-------
All my homies dont play better watch what you say and put your glock away, ease back, ease back, ease back before i squeeze that...


Отправлено: 13:35, 05-01-2009 | #1418


Новый участник


Сообщения: 36
Благодарности: 2

Профиль | Отправить PM | Цитировать


Creat0R,
спасибо тебе ,и здоровья бычьего ,что бы мог дальше отвечат на наши вопроси

Отправлено: 13:38, 05-01-2009 | #1419


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата SAOPP:
можно что бы после завершения своих действий, скрипт закрывался? »
Он закрывается, просто там ведь пауза стоит в 5 секунд

Цитата SAOPP:
можно ли сделать так, что бы скрипт кликал мышкой на кнопочку свернуть, поскольку текущие параметры не сворачивают SS в трей, он по прежнему ложится на панель задач »
Кликнуть можно по координатам кнопки сворачивания (в «AutoIt Info Tool» можно их посмотреть наведя курсор мышки на кнопку) с помощью MouseClick. Но это не надёжно .

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:25, 05-01-2009 | #1420



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[архив - Часть 2] AutoIt скрипты Vadikan AutoIt 985 21-01-2008 09:58
Вопрос - [Архив] Антивирусные программы - ОБЩИЕ ВОПРОСЫ FOX RED Защита компьютерных систем 67 21-11-2007 15:05
[Архив - Часть 1.3] AutoIt скрипты biork AutoIt 503 09-06-2007 11:27
[Архив - Часть 1.2] AutoIt скрипты Dirk Diggler AutoIt 505 02-12-2006 11:00
[Архив - Часть 1.1] AutoIt скрипты EgOrus AutoIt 335 04-02-2006 16:58




 
Переход