Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » AutoIT (Часть 3)

Модерирует : gyra, Maz

gyra (23-01-2020 10:51): AutoIT (Часть 4)  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200

   

Widok



Moderator-Следопыт
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

 
Описание:

Цитата:
AutoIt v3 - это язык для написания сценариев, напоминающий BASIC. Основным его назначением является автоматизация работ с Windows GUI (графическим интерфейсом пользователя MS Windows). Для выполнения этой сложной задачи предоставляется комбинация испытанных методов, включающих в себя эмуляцию нажатий комбинаций клавиш клавиатуры, перемещения указателя мыши, управление окнами и их визуальными элементами. Как показывает практика, эти "приводные ремни" весьма эффективны для получения работающих решений в ситуациях, когда другие стандартные средства (например, VBScript и SendKeys) оказываются бессильны.
Умеет он очень и очень многое! Бесплатный.

 
  • Справки
  • Инструменты
  • Ресурсы, посвящённые AutoIt
  • Полезные советы новичкам и не только
  • Готовые решения
  • Скрипт раскраски кода AutoIt для публикации в форумах
     


     
    За шапкой следит ViSiToR / AZJIO  

  • Всего записей: 24190 | Зарегистр. 07-04-2002 | Отправлено: 13:07 01-06-2010 | Исправлено: Maz, 12:29 10-01-2020
    Lovec



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    в принципе нашел способ через написание определенного HTML кода данного окна... Но все же хотелось бы другим способом, не создавая никаких файлов html.

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 19:08 05-08-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Lovec
    пример snoitaleR

    Код:
    ; НАЧАЛО
     
     #Include <ie.au3>
     
     $GUI=GUICreate("",200,200)
     
    ; Создание элемента "Браузер"
     
     $oIE=_IECreateEmbedded()
     GUICtrlCreateObj($oIE,10,10,180,180)
     _IENavigate($oIE,'about:blank')
     $oBody=_IETagNameGetCollection($oIE,"body",0)
     $DESCRIPTION="<h1>Привет!</h1>"
     _IEBodyWriteHTML($oBody,$DESCRIPTION)
     
     GUISetState()
     
    ; Цикл обработки сообщений
     
     While True
      $MSG=GUIGetMsg()
      Switch $MSG
       Case -3
        ExitLoop
      EndSwitch
     WEnd
     
    ; КОНЕЦ

     
    или с полными тегами

    Код:
    ; НАЧАЛО
     
     #Include <ie.au3>
     
     $GUI=GUICreate("",200,200)
     
    ; Создание элемента "Браузер"
     
     $oIE=_IECreateEmbedded()
     GUICtrlCreateObj($oIE,10,10,180,180)
     _IENavigate($oIE,'about:blank')
     $DESCRIPTION="<html><body><h1>Привет!</h1></body></html>"
     _IEDocWriteHTML($oIE,$DESCRIPTION)
     
     GUISetState()
     
    ; Цикл обработки сообщений
     
     While True
      $MSG=GUIGetMsg()
      Switch $MSG
       Case -3
        ExitLoop
      EndSwitch
     WEnd
     
    ; КОНЕЦ

    Всего записей: 4413 | Зарегистр. 03-05-2006 | Отправлено: 22:25 05-08-2010 | Исправлено: AZJIO, 22:28 05-08-2010
    Kastermight



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    мне кажется, или в этих примерах скроллбар все равно остался?

    Всего записей: 23 | Зарегистр. 02-03-2009 | Отправлено: 11:33 06-08-2010 | Исправлено: Kastermight, 14:18 06-08-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kastermight
    Пример не создания html-файлов.

    Всего записей: 4413 | Зарегистр. 03-05-2006 | Отправлено: 14:07 06-08-2010
    Kastermight



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    [off]
    AZJIO
    точно. проглядел то сообщение. [/off]

    Всего записей: 23 | Зарегистр. 02-03-2009 | Отправлено: 14:18 06-08-2010
    Lovec



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Спасибо, код интересный.
    Но Kastermight был прав. Прежде всего интересует вопрос как убить правый скрол в окне IE (см. мой пост на пред. странице).
     
     
    Добавлено:
    Выражусь точнее.
     
    Я запускаю IE - обратите внимание НЕ внедренный объект в GUI AutoIt.
    В этом открывшемся окне IE мне надо убить правый скролл. Так вот я могу это сделать, если создам заранее специальный html-файл, а потом открою его.
     
    Мне же хочется найти способ сделать это без создания каких-либо файлов. Например, послал в окно IE какое-то сообщение Windows и правый скролбар убрался...
     
    Добавлено:
    Уп-с, сори Ступил
    Ведь пример, приведенный AZJIO я могу использовать и не для внедренного объекта IE!
     
    Все получилось Спасибо!
     
    Добавлено:
    Еще дополнение...
    Кто-нибудь может сказать, почему не завершается этот скрипт?
     

    Код:
    #Include <ie.au3>
     
    $o_IE = _IECreate ("", 0, 1, 1)
    _IEPropertySet($o_IE, "addressbar", False)
    _IEPropertySet($o_IE, "menubar", False)
    _IEPropertySet($o_IE, "resizable", False)
    _IEPropertySet($o_IE, "statusbar", False)
    _IEPropertySet($o_IE, "toolbar", False)
    _IEPropertySet($o_IE, "height", 150)
    _IEPropertySet($o_IE, "width", 300)
     
    $DESCRIPTION='<html><style type="text/css">BODY {overflow: hidden;}</style><body><h1>Привет!</h1></body></html>'
    _IEDocWriteHTML($o_IE, $DESCRIPTION)

     
     
    Интерпретатор останавливается на последней строке и алес... Дальше ни-ни.

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 18:27 07-08-2010 | Исправлено: Lovec, 20:21 07-08-2010
    Lovec



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    И второй вопрос. Вот есть код, позволяющий перетаскивать форму за любую ее часть.

    Код:
    ; Скрипт создает форму, которую можно перетаскивать за любую ее часть
     
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
     
    Opt ("MustDeclareVars", 1)
     
    Global $MouseCoordsOld[2]    ; "старые" координаты мыши, т.е. ее координаты в момент нажатия ее левой кнопки
    Global $MouseCoordsNew[2]    ; "новые" координаты мыши, т.е. ее координаты в момент отпускания ее левой кнопки
    Global $WinPos[4]            ; текущие координаты окна
    Dim $fDragging = False        ; флаг, показывающий, что форму тянут мышью
    Dim $nMsg, $h_HWND
     
     
    $h_HWND = GUICreate("", 268, 91, -1, -1, BitOR($WS_POPUP,$WS_CLIPSIBLINGS), $WS_EX_TOPMOST)
    GUISetBkColor(0x0A246A)
    GUICtrlCreateLabel("Нажми и тащи!", 70, 35, 170)
    GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0xA6CAF0)
    GUICtrlSetCursor (-1, 0)
    GUISetCursor (0)
    GUISetState(@SW_SHOW)
     
     
    While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $GUI_EVENT_CLOSE
                Exit
            Case $GUI_EVENT_MOUSEMOVE
                if $fDragging Then    ; начинаем перетаскивать форму
                    $MouseCoordsNew = MouseGetPos()
                    $WinPos = WinGetPos ($h_HWND)
                    WinMove($h_HWND, "", $WinPos[0] + $MouseCoordsNew[0] - $MouseCoordsOld[0], $WinPos[1] + $MouseCoordsNew[1] - $MouseCoordsOld[1])
                    $MouseCoordsOld[0] = $MouseCoordsNew[0]
                    $MouseCoordsOld[1] = $MouseCoordsNew[1]
                EndIf
            Case $GUI_EVENT_PRIMARYDOWN
                $fDragging = True
                $MouseCoordsOld = MouseGetPos()
            Case $GUI_EVENT_PRIMARYUP    ; отпустили левую кнопку мыши - закончили перетаскивание формы
                $fDragging = False
        EndSwitch
    WEnd

     
    Вопрос. Нельзя ли сделать так, чтобы форма так не дергалась при перетаскивании? Чтобы как то плавнее все это было ...

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 20:48 07-08-2010
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Lovec,

    Цитата:
    Нельзя ли сделать так, чтобы форма так не дергалась при перетаскивании?

    Попробуйте так:
    Код:
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
     
    $h_HWND = GUICreate("", 268, 91, -1, -1, BitOR($WS_POPUP, $WS_CLIPSIBLINGS), $WS_EX_TOPMOST)
    GUISetBkColor(0x0A246A)
    GUIRegisterMsg($WM_NCHITTEST, 'WM_NCHITTEST')
    GUICtrlCreateLabel("Нажми и тащи!", 70, 35, 170, 40, -1, $GUI_WS_EX_PARENTDRAG)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0xA6CAF0)
    GUICtrlSetCursor(-1, 0)
    GUISetState(@SW_SHOW)
     
    While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $GUI_EVENT_CLOSE
                Exit
     
        EndSwitch
    WEnd
     
    Func WM_NCHITTEST($hWnd, $Msg, $wParam, $lParam)
        Local $iProc = DllCall('user32.dll', 'int', 'DefWindowProc', 'hwnd', $hWnd, 'int', _
                $Msg, 'wparam', $wParam, 'lparam', $lParam)
        If $iProc[0] = $HTCLIENT Then Return $HTCAPTION
        Return $GUI_RUNDEFMSG
    EndFunc   ;==>WM_NCHITTEST


    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 21:03 07-08-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Или так, но много include

    Код:
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <SendMessage.au3>
     
    $SC_DRAGMOVE = 0xF012
     
    $HWND = GUICreate("", 268, 91, -1, -1, $WS_POPUP)
    GUISetBkColor(0x0A246A)
    $label = GUICtrlCreateLabel("Нажми и тащи!", 70, 35, 170, 40, -1, $GUI_WS_EX_PARENTDRAG)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0xA6CAF0)
    GUICtrlSetCursor(-1, 0)
     
    ; контекстное меню
    $contextMenu = GUICtrlCreateContextMenu($label)
    $closeitem = GUICtrlCreateMenuItem("Закрыть", $contextMenu)
     
    GUISetState()
     
    While 1
        $msg = GUIGetMsg()
        Switch $msg
            Case $GUI_EVENT_PRIMARYDOWN
                $a
    = GUIGetCursorInfo()
                If $a[4] = $label Then _SendMessage($HWND, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0) ; для перемещения окна за само окно
            Case $closeitem
                Exit
        EndSwitch
    WEnd

    Всего записей: 4413 | Зарегистр. 03-05-2006 | Отправлено: 00:05 08-08-2010 | Исправлено: AZJIO, 06:37 24-02-2012
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO

    Цитата:
    Или так, но много include

    Вместо <WinAPI.au3> (372 кб) можно вставить  <SendMessage.au3> (5 кб). И, мне кажется, что инклюды не сильно влияют на конечный размер и скорость работы.

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 11:46 08-08-2010
    Lovec



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles
    AZJIO
    Спасибо Интересные примеры.
    Может так и сделаю - перетаскивание без отображения содержимого. Конечно хочется чтобы содержимое отображалось, но кажется плавности при перетаскивании на AutoIt не добиться...

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 12:17 08-08-2010
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Lovec

    Цитата:
    без отображения содержимого

    У меня в обоих примерах при перетаскивании все содержимое отображается. (AutoIt 3.3.6.1 Windows XP SP3)

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 12:48 08-08-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles
    Без WinAPI.au3 - скомпилированный 300кб, с WinAPI.au3 - 350кб, если ещё GDIP.au3, то 420 кб, со всеми Include 630 кб. А если скрипт без наворотов, то на версии 3.2.12.1 получается 250кб. По возможности использую компактный вариант 250кб.
     
    Lovec
    Содержимое отображается у меня.

    Всего записей: 4413 | Зарегистр. 03-05-2006 | Отправлено: 13:14 08-08-2010
    Lovec



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ой, народ... Нельзя было столько вчера пить Это же в свойствах Рабочего стола ставится галка
    Поставил и все отображается
    Еще раз спасибо за примеры. Действительно окно в этих примерах перетаскивается так как должно. Пока не разобрался как они работают, ну это не так страшно.

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 13:18 08-08-2010
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO

    Цитата:
    По возможности использую компактный вариант 250кб.

    Это смотря какая конечная цель использования. Иногда и за 10 кб борешься, иногда +- 10 Мб не играют роли.

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 13:47 08-08-2010
    Lovec



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Кстати, вот этот переделанный из вашего минималистичный код тоже вполне жизнеспособен:

    Код:
    #include <WindowsConstants.au3>
    #include <MenuConstants.au3>
    #include <WinAPI.au3>
    #include <GUIConstantsEx.au3>
     
    $Gui = GUICreate("", 268, 91, -1, -1, $WS_POPUP)
    GUISetBkColor(0x0A246A)
    GUISetCursor (0)
    $label=GUICtrlCreateLabel("Нажми и тащи!", 70, 35, 170, 40)
    GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0xA6CAF0)
    GUICtrlSetCursor(-1, 0)
     
    GuiSetState()
    Do
        _SendMessage($GUI, $WM_SYSCOMMAND, BitOR($SC_MOVE, $HTCAPTION), 0) ; для перемещения окна за само окно
    Until GUIGetMsg() = -3

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 13:58 08-08-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Сделал пример поддержки мультиязычности в скрипте с использованием внешних раздельных языковых файлов. Пример уже применяется в TextReplace и CalculatorMR
     
    поддержка мультиязычности

    Всего записей: 4413 | Зарегистр. 03-05-2006 | Отправлено: 17:39 08-08-2010
    Lovec



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как можно получить время с удаленного сервера времени в Интернет, чтобы потом его синхронизировать с локальным на компе?

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 20:51 08-08-2010
    timsky



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Lovec

    Цитата:
    Как можно получить время с удаленного сервера времени в Интернет, чтобы потом его синхронизировать с локальным на компе?

    Вот здесь 3 рабочих примера: http://www.autoitscript.com/forum/index.php?showtopic=43079&view=findpost&p=765481

    Всего записей: 2287 | Зарегистр. 08-06-2004 | Отправлено: 21:35 08-08-2010
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Lovec

    Цитата:
    Как можно получить время с удаленного сервера времени в Интернет, чтобы потом его синхронизировать с локальным на компе?

    У меня так работает:
    Код:
    #include <Constants.au3>
    #include <Encoding.au3>
     
    $sTimeServer_1 = 'time.windows.com'
    $sTimeServer_2 = 'time.nist.gov'
    $sTimeServer = ''
    If Ping($sTimeServer_1, 1000) Then
        $sTimeServer = $sTimeServer_1
    ElseIf Ping($sTimeServer_2, 1000) Then
        $sTimeServer = $sTimeServer_2
    Else
        MsgBox(0, '', 'Оба сервера недоступны.')
        Exit
    EndIf
     
    $sLogUpdateServer = ''
    $hTimeUpdateServer = Run('w32tm /config /syncfromflags:manual /manualpeerlist:' & $sTimeServer, '', @SW_HIDE, $STDOUT_CHILD)
    While 1
        $sLogUpdateServer &= StdoutRead($hTimeUpdateServer)
        If @error Then ExitLoop
        Sleep(10)
    WEnd
    $sLogUpdateServer = _Encoding_866To1251($sLogUpdateServer)
    ;MsgBox(0, '', $sLogUpdateServer)
    If Not StringInStr($sLogUpdateServer, 'Команда выполнена успешно.') Then
        MsgBox(0, '', 'Ошибка.')
        Exit
    EndIf
    $sLogUpdateLocal = ''
    $hTimeUpdateLocal = Run('w32tm /config /update', '', @SW_HIDE, $STDOUT_CHILD)
    While 1
        $sLogUpdateLocal &= StdoutRead($hTimeUpdateLocal)
        If @error Then ExitLoop
        Sleep(10)
    WEnd
    $sLogUpdateLocal = _Encoding_866To1251($sLogUpdateLocal)
    ;MsgBox(0, '', $sLogUpdateLocal)
    If StringInStr($sLogUpdateLocal, 'Команда выполнена успешно.') Then
        MsgBox(0, '', 'Время успешно синхронизировано с сервером ' & $sTimeServer)
    Else
        MsgBox(0, '', 'Ошибка.')
    EndIf

    Encoding UDF
    Синхронизация времени

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 22:08 08-08-2010 | Исправлено: madmasles, 23:19 08-08-2010
       

    Страницы: 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 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200

    Компьютерный форум Ru.Board » Компьютеры » Программы » AutoIT (Часть 3)
    gyra (23-01-2020 10:51): AutoIT (Часть 4)


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru