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

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

Закрытая тема
Настройки темы
[архив - Часть 2] AutoIt скрипты

(*.*)


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


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

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


Изменения
Автор: Vadikan
Дата: 27-01-2008
Внимание!
Тема переведена в архивное состояние







(настоятельно рекомендуется к прочтению/поиску)


Руководство к действию по работе c AutoIt.


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

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



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

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

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

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

 

Ветеран


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

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


Цитата Creat0R:
Эта утилитка? »
А как же

Цитата Creat0R:
Скрипт завершит работу после любого движения мышки »
Нет, не годится, любое движение мышки, вот если бы по комбинации клавиш тогда хорошо, а движение или нажатие клавиши не годиться

-------
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...


Отправлено: 00:09, 07-01-2008 | #941



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

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


Аватара для Creat0R

Must AutoIt


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

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


SAOPP,
Цитата:
вот если бы по комбинации клавиш тогда хорошо
Ты этот скрипт пробовал запускать?

Я имел в виду после нажатия ALT + CTRL + DEL (ведь в справке к команде BlockInput это говорится), если двинуть мышкой, скрипт завершит работу, а блокирование снимается по нажатию alt ctrl del.

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

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

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


Отправлено: 00:24, 07-01-2008 | #942


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


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

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


Подскажите, а как сделать часы, чтобы время шло ) спасибо.

Отправлено: 03:16, 07-01-2008 | #943


Аватара для Creat0R

Must AutoIt


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

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


HORRIBLE,
Цитата:
как сделать часы, чтобы время шло
Имеется в виду таймер?

Типа такого:

Код: Выделить весь код
#include <GuiConstants.au3>

Global $iTimer_Started = False
Global $Timer_Init = 0, $Total_Seconds = 0

$GUI = GUICreate("Timer Script", 220, 90)

$Timer_Button = GUICtrlCreateButton("Start", 50, 20, 120, 20)
$Timer_Label = GUICtrlCreateLabel("00:00:00", 90, 60)

GUISetState(@SW_SHOW, $GUI)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Timer_Button
            If $iTimer_Started Then
                GUICtrlSetData($Timer_Button, "Start")
                _AdlibDisable($GUI)
                Set_Timer()
                $Total_Seconds += Round(TimerDiff($Timer_Init)/1000, 1)
            Else
                GUICtrlSetData($Timer_Button, "Stop")
                $Timer_Init = TimerInit()
                _AdlibEnable("Set_Timer", 1000, $GUI)
            EndIf

            $iTimer_Started = Not $iTimer_Started
    EndSwitch
WEnd

Func _AdlibEnable($sFunction, $iTime=250, $hWnd=0)
    Local Const $WM_TIMER = 0x0113
    If Not IsHWnd($hWnd) Then $hWnd = GUICreate("hCallBack_AdlibEnable")
    GUIRegisterMsg($WM_TIMER, $sFunction)
    Local $aRet = DllCall("User32.dll", "int", "SetTimer", "hwnd", $hWnd, "int", 50, "int", $iTime, "int", 0)
    Return $hWnd
EndFunc

Func _AdlibDisable($hWnd=0)
    Local Const $WM_TIMER = 0x0113
    GUIRegisterMsg($WM_TIMER, "")
    Local $aRet = DllCall("user32.dll", "int", "KillTimer", "hwnd", $hWnd, "int_ptr", 50)
    Return Number(IsArray($aRet) And $aRet[0])
EndFunc

Func _SecsToTime($iTicks, $Delim=":")
    If Number($iTicks) >= 0 Then
        Local $iHours = Int($iTicks / 3600)
        $iTicks = Mod($iTicks, 3600)
        Local $iMins = Int($iTicks / 60)
        Local $iSecs = Round(Mod($iTicks, 60))
        If StringLen($iHours) = 1 Then $iHours = "0" & $iHours
        If StringLen($iMins) = 1 Then $iMins = "0" & $iMins
        If StringLen($iSecs) = 1 Then $iSecs = "0" & $iSecs
        Return $iHours & $Delim & $iMins & $Delim & $iSecs
    EndIf
    Return SetError(1, 0, 0)
EndFunc

Func Set_Timer($hWnd=0)
    Local $iTmp_Total_Seconds = Round(TimerDiff($Timer_Init)/1000, 1)
    If $Total_Seconds > 0 Then $iTmp_Total_Seconds += $Total_Seconds

    Local $sTime = _SecsToTime($iTmp_Total_Seconds)

    GUICtrlSetData($Timer_Label, $sTime)
EndFunc

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

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

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

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

Отправлено: 04:10, 07-01-2008 | #944


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


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

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


Creat0R,
неа, не таймер, хотя за таймер спасибо, а такие же часики как и в винде, вправом нижнем углу.
т.к если просто использовать команды @Hour &":"& @MIN &":"& @SeC то получается когда файлик запускается то время показывается когда файл был запущен, а вот как сдеть чтоб время обновлялось, не перезапуская файл.

Еще подскажите почему ругается вот на это
#include <GuiCombo.au3>

говорит: Error opening the file

Можно ли убрать верхнюю шапку когда создаешь окно GUICreate особенно 3-и стандартных кнопки ?

Последний раз редактировалось HORRIBLE, 07-01-2008 в 18:22.


Отправлено: 12:43, 07-01-2008 | #945


Аватара для Creat0R

Must AutoIt


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

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


HORRIBLE,
Цитата:
как сдеть чтоб время обновлялось, не перезапуская файл.
Использовать GuiCtrlSetData()...

Код: Выделить весь код
#include <GuiConstants.au3>

Global $sTDelim = _GetTimeDelim()

$GUI = GUICreate("Timer Script", 220, 90)

$Time_Label = GUICtrlCreateLabel("Текущее время: " & GetCurrentTime($sTDelim), 40, 60)

$Handle = _AdlibEnable("Set_System_Time", 1000)

GUISetState(@SW_SHOW, $GUI)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            _AdlibDisable($Handle, 1)
            Exit
    EndSwitch
WEnd

Func _AdlibEnable($sFunction, $iTime=250, $hWnd=0)
    Local Const $WM_TIMER = 0x0113
    If Not IsHWnd($hWnd) Then $hWnd = GUICreate("hCallBack_AdlibEnable")
    GUIRegisterMsg($WM_TIMER, $sFunction)
    Local $aRet = DllCall("User32.dll", "int", "SetTimer", "hwnd", $hWnd, "int", 1, "int", $iTime, "int", 0)
    Return $hWnd
EndFunc

Func _AdlibDisable($hWnd=0, $iCloseHwnd=0)
    Local Const $WM_TIMER = 0x0113
    GUIRegisterMsg($WM_TIMER, "")
    If $iCloseHwnd Then GUIDelete($hWnd)
    Local $aRet = DllCall("user32.dll", "int", "KillTimer", "hwnd", $hWnd, "int", 1)
    Return Number(IsArray($aRet) And $aRet[0])
EndFunc

Func Set_System_Time()
    GUICtrlSetData($Time_Label, "Текущее время: " & GetCurrentTime($sTDelim))
EndFunc

Func GetCurrentTime($sTDelim=":")
    Return @HOUR & $sTDelim & @MIN & $sTDelim & @SEC
EndFunc

Func _GetTimeDelim($sNowTime="")
    Local $sRetDelim = RegRead("HKEY_CURRENT_USER\Control Panel\International", "sTime")
    If $sRetDelim = "" And $sNowTime <> "" Then $sRetDelim = StringLeft(StringRegExpReplace($sNowTime, "[0-9]", ""), 1)
    If $sRetDelim = "" Then $sRetDelim = ":"
    Return $sRetDelim
EndFunc
Цитата:
почему ругается вот на это
GuiCombo.au3 переименован в последней версии AutoIt'а, теперь нужно использовать GuiComboBox.au3

Цитата:
Можно ли убрать верхнюю шапку когда создаешь окно GUICreate особенно 3-и стандартных кнопки ?
Если речь про область заголовка, то убрать можно, нужно просто выставить стиль $WS_POPUP без других стилей, а чтобы убрать все кнопки, но при этом оставить область заголовка, нужно выставить только $WS_CAPTION плюс $WS_POPUP...

Код: Выделить весь код
GUICreate("Title", 300, 100, -1, -1, $WS_CAPTION+$WS_POPUP)

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

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

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

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

Отправлено: 19:45, 07-01-2008 | #946


Аватара для TERMINAL

Ветеран


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

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


Creat0R, возможно ли с помощью скрипта менять разрешение экрана и определять на данный момент?

-------
Автоматизация прежде всего....


Отправлено: 15:56, 08-01-2008 | #947


Аватара для Creat0R

Must AutoIt


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

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


TERMINAL,
Цитата:
возможно ли с помощью скрипта менять разрешение экрана и определять на данный момент?
Да, вот немного изменённые функции (Источник):

Код: Выделить весь код
#include <Array.au3>

$aDisplayData = DisplayGetResolution()
_ArrayDisplay($aDisplayData, "Current Resolution Values")

;Change to new resolution
DisplayChangeResolution(960, 600, 32, 60)

Sleep(3000)

;Change back to currently used resolution
DisplayChangeResolution($aDisplayData[0], $aDisplayData[1], $aDisplayData[2], $aDisplayData[3])

Func DisplayGetResolution($iIndex=-1)
    Local $DEVMODE = DllStructCreate("byte[32];int[10];byte[32];int[6]")
    Local $aRet[4]

    Local $aDllCall = DllCall("user32.dll", "int", "EnumDisplaySettings", _
            "ptr", 0, "long", $iIndex, "ptr", DllStructGetPtr($DEVMODE))

    If IsArray($aDllCall) And $aDllCall[0] <> 0 Then
        $aRet[0] = DllStructGetData($DEVMODE, 4, 2)
        $aRet[1] = DllStructGetData($DEVMODE, 4, 3)
        $aRet[2] = DllStructGetData($DEVMODE, 4, 1)
        $aRet[3] = DllStructGetData($DEVMODE, 4, 5)
    Else
        Return SetError(1, 0, 0)
    EndIf

    $DEVMODE = 0

    Return $aRet
EndFunc   ;==>DisplayGetResolution

Func DisplayChangeResolution($iWidth, $iHeight, $iBpp, $iFreq)
    Local Const $DM_PELSWIDTH = 0x00080000
    Local Const $DM_PELSHEIGHT = 0x00100000
    Local Const $DM_BITSPERPEL = 0x00040000
    Local Const $DM_DISPLAYFREQUENCY = 0x00400000
    Local Const $CDS_TEST = 0x00000002
    Local Const $CDS_UPDATEREGISTRY = 0x00000001
    Local Const $DISP_CHANGE_RESTART = 1
    Local Const $DISP_CHANGE_SUCCESSFUL = 0
    Local Const $HWND_BROADCAST = 0xFFF
    Local Const $WM_DISPLAYCHANGE = 0x007E

    Local $DEVMODE = DllStructCreate("byte[32];int[10];byte[32];int[6]")

    Local $avDllCall = DllCall("user32.dll", "int", "EnumDisplaySettings", "ptr", 0, "long", 0, "ptr", DllStructGetPtr($DEVMODE))

    If IsArray($avDllCall) And $avDllCall[0] <> 0 Then
        DllStructSetData($DEVMODE, 2, BitOR($DM_PELSWIDTH, $DM_PELSHEIGHT, $DM_BITSPERPEL, $DM_DISPLAYFREQUENCY), 5)
        DllStructSetData($DEVMODE, 4, $iWidth, 2)
        DllStructSetData($DEVMODE, 4, $iHeight, 3)
        DllStructSetData($DEVMODE, 4, $iBpp, 1)
        DllStructSetData($DEVMODE, 4, $iFreq, 5)

        $avDllCall = DllCall("user32.dll", "int", "ChangeDisplaySettings", "ptr", DllStructGetPtr($DEVMODE), "int", $CDS_TEST)

        If @error Then
            $avDllCall = -1
        Else
            $avDllCall = $avDllCall[0]
        EndIf

        Select
            Case $avDllCall = $DISP_CHANGE_RESTART
                $DEVMODE = 0
                Return 2
            Case $avDllCall = $DISP_CHANGE_SUCCESSFUL
                DllCall("user32.dll", "int", "ChangeDisplaySettings", "ptr", DllStructGetPtr($DEVMODE), "int", $CDS_UPDATEREGISTRY)
                DllCall("user32.dll", "int", "SendMessage", "hwnd", $HWND_BROADCAST, "int", $WM_DISPLAYCHANGE, _
                        "int", $iBpp, "int", $iHeight * 2 ^ 16 + $iWidth)
                $DEVMODE = 0
                Return 1
            Case Else
                $DEVMODE = 0
                Return $avDllCall
        EndSelect
    EndIf
EndFunc   ;==>DisplayChangeResolution
В принципе, функцию для получения текущих значении можно заменить макросами...

Код: Выделить весь код
Func DisplayGetResolution_by_Macro()
    Local $aRet[4] = [@DesktopWidth, @DesktopHeight, @DesktopDepth, @DesktopRefresh]
    Return $aRet
EndFunc

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

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

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

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

Отправлено: 00:20, 09-01-2008 | #948


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


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

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


Как сделать поиск по маске, формат имени файла выглядит так (12_12_12.txt), в папке текстовых файлов много и у всех разный формат имени, но есть и файлы с форматом имени таким который был приведен, далее после поиска вывести массив с найденными файлами.
Я так думаю что нужно сперва воспользоваться _FileListToArray ($path ,"*.txt"), а после это этим StringRegExp (). Но я так попробовал, и ничего не вышло

StringRegExp ("12_12_12.txt 12_12_12.txt", ,'(\d\d\w\d\d\w\d\d.\w\w\w\w*?)',4) - если так писать, все прекрасно работат, находит)) а как быть с именем файла?
'(\d\d\w\d\d\w\d\d.\w\w\w\w*?)' - правильно написано или можно как нить подругому задать?



2 вопрос:

_FileCreate("1.txt")
$Array1 = _FileListToArray ($path ,"*.au3")
$Array2 = _ArrayToclip($1)
fileWrite("1.txt",ClipGet())

когда информация (имена присутствующих файлов в папке) записываается в файлик она разделяется @LF, а как сделать так чтоб информация разделялась, а Enter-ом, чтобы каждое название файла начиналось с новой строки.

Спасибо.

Отправлено: 16:01, 09-01-2008 | #949


Аватара для Creat0R

Must AutoIt


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

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


HORRIBLE,
Цитата:
Как сделать поиск по маске, формат имени файла выглядит так (12_12_12.txt), в папке текстовых файлов много и у всех разный формат имени, но есть и файлы с форматом имени таким который был приведен, далее после поиска вывести массив с найденными файлами.
_FileListToArray вернёт массив, поэтому проходиться нужно по всему массиву циклом:

Код: Выделить весь код
#include <File.au3>
#include <Array.au3>

$sPath = @ScriptDir
$avArray = _RegExpFileListToArray($sPath, "(?i)\d+_\d+_\d+\.txt", "*.txt")

_ArrayDisplay($avArray)

Func _RegExpFileListToArray($sPath, $sPattern, $sMask="*")
    Local $aRet[1]

    $aFileList = _FileListToArray($sPath, $sMask)

    For $i = 1 To UBound($aFileList)-1
        If StringRegExp($aFileList[$i], $sPattern) Then
            $aRet[0] += 1
            ReDim $aRet[$aRet[0]+1]
            $aRet[$aRet[0]] = $aFileList[$i]
        EndIf
    Next

    Return $aRet
EndFunc
Если всегда цифр будет только две (между каждым разделителем), то \d+ нужно заменить на \d\d.

Цитата:
как сделать так чтоб информация разделялась, а Enter-ом, чтобы каждое название файла начиналось с новой строки.
А зачем использовать буфер обмена? есть функция _FileWriteFromArray() .

Функция _ArrayToClip() помещет строчки в буфер обмена разделённые @CR (возврат каретки).

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

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

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

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

Отправлено: 19:46, 09-01-2008 | #950



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Открывая 7z архив пишет не удаётся открыть как архив. Можно ли его восстановить? DreDo Хочу все знать 4 01-12-2009 18:54
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:. Vadikan AutoIt 1543 18-01-2009 10:46
[Архив - Часть 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




 
Переход