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

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

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

Widok (01-06-2010 13:08): Лимит страниц. Продолжаем здесь.  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

Widok



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

AutoIt3
(Часть 1)

 
 
Домашняя страница: http://www.autoitscript.com
Страница загрузки: http://www.autoitscript.com/autoit3/downloads.php
 
Описание:

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

 
Помощь по AutoIT:
  • Справку на русском (и не только) вы всегда(?) сможете найти тут
  • Учебник по AutoIt для начинающих
  • Видео-руководства на YouTube (англ.)
  • AutoIt v3: Your Quick Guide (652 КБ) - Ваш быстрый гид в мир AutoIt-а (книга в формате pdf) - Та же книжка online.
  • Справочник по командам rundll32
  • Справка WinAPI (Win 32 API по шагам)
  • Русский справочник по API-функциям
  • Полезная информация по WinAPI на русском
  • Помощь по регулярным выражениям
  • Tutorial on DllCall() & DllStructs - Небольшое (пока?) руководство по использованию функции DllCall*()
     
     
    Ресурсы, посвящённые AutoIt
  • AutoIt в Википедии
  • AutoIt Russian Community - Русское сообщество AutoIt
  • Jabber-конференция для обсуждения мелких вопросов касающихся AutoIt
  • Обзор скриптового языка AutoIt (рус.)
  • AutoIt на Yahoo! Groups
  • Раздел в конфиренции OSzone.net, посвящённый AutoIt
  • Пополняющийся со временем сайт с полезными утилитами и функциями на AutoIt
  • Коллекция AutoIt-скриптов от Sanja Alone
  • Коллекция AutoIt-скриптов от MSFN (могут быть устаревшие).
  • Коллекция AutoIt-скриптов от AZJIO
     
     
    !!! Полезные советы и заметки - новичкам и не только
     
     
  • Рекомендации по написанию скриптов
     
     
    Инструменты для AutoIt:
  • AutoIt Path Switcher - Переключение пути к папке AutoIt.
  • AutoIt3Wrapper [Страница закачки] - Программа для компиляции скрипта с дополнительными возможностями (добавление значка, описания и т.п).
  • Koda (724 Kb) - Визуализация работы с GUI - аналог Visual Basic.
  • CodeWizard (400 Kb) - нечто простенькое на вариант Koda.
  • AutoItMacroGenerator (34 Kb) - Записывает в реальном времени действия пользователя в AutoIt-код.
  • ScriptWriter (78 Kb) - Аналог AutoItMacroGenerator.
  • API Constants (1042 Kb) - Утилита для просмотра всех констант API-функции и не только.
  • Страница закачки утилит, которые идут в отдельной поставке редактора SciTE.
  • AutoIt-меню для браузера Opera.
     
    Готовые скрипты и программы с открытым кодом на AutoIt:
  • Desktop Icons Restorator - Скрипт-программа для сохранения/восстановления позиции значков рабочего стола.
  • CaptureIt - Утилита для захвата изображений с экрана.
  • SwitchIt - Скрипт для конвертирования выделенного текста.
  • Скрипт раскраски кода AutoIt для публикации в форумах
     
    Общие вопросы и решения на Autoit:
  • Обработчик скриптов добавляющий отладчик (debugger) - Последняя версия: AutoItScript Add Debugger
  • Интеракция между несколькими скриптами
  • Пример использование интеракции между скриптами - Добавление элементов GUI с внешнего модуля
  • Чтение и запись данных с/в окна/о SciTE
  • Пример автообновления версии своего приложения
  • Копирование большого файла с отображением данных прогресса
  • Создание динамического меню в Tray Icon (значок в области уведомлений)
  • Пример создания своего мастера (Wizard)
  • Метод, позволяющий запускать код VBS без создания временных файлов
  • Описание функции GUIRegisterMsg()
  • Пример перехвата вводимых символов с клавиатуры
  • Пример деактивирования TabItem
  • Пример вывода лога в Edit-поле (с поддержкой форматирования текста)
  • Пример остановки/начало выполнения скрипта + Слежение за буфером обмена с заменой неподдерживаемых в имени файла символов
  • Подключение приложения (GUI) к буферу обмена
  • Пример использования меню с значками (ModernMenu.au3) -> Список программ в меню значка в системном трее
  • Пример подсчёта интервала времени между нажатиями клавиш
  • Слежение нажатых элементов в текущем окне (под курсором)
  • Написание instant messaging Бота на AutoIt
  • Способ, позволяющий посылать нажатие клавиши в неактивное окно (не путать со свёрнутым)
  • Сервер <=> Клиент - Пример передачи файла
  • Пример отображения только элементов GUI (без самой оболочки)
  • Модуль, превращающий ваше приложение в Trial-версию
  • Слежение за выделенным текстом и с последующим его помещением в файл
     
    Отдельные функции и библиотеки (UDF):
  • Функции, относящиеся к интернету
  • Функции для работы с процессами и окнами
  • Функции для работы с файлами
  • Функции для GUI/Tray
  • Системные функции
  • Разное (то, что не подпадает под другие категории)
     


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

  • Всего записей: 24190 | Зарегистр. 07-04-2002 | Отправлено: 14:47 12-01-2009 | Исправлено: Maz, 11:50 17-04-2017
    sproxy



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    ynbIpb 18:52 27-03-2009
    Цитата:
    как ни странно у меня работало именно когда я запускал файл *.dat и в процессах он висел как *.dat

    а ведь работает!!
     
    dat файл:

    Код:
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_outfile=c:\dat.exe
    #EndRegion
    ;**** Directives created by AutoIt3Wrapper_GUI ****
     
    MsgBox(0, 'Dat файл', 'полный пать к этому файлу:' & @ScriptFullPath & @CRLF & @CRLF & 'переданный параметер:' & @CRLF & $CmdLine[1])

     
    запускатель dat файла:

    Код:
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_outfile=c:\run_dat.exe
    #EndRegion
    ;**** Directives created by AutoIt3Wrapper_GUI ****
     
    FileCopy('c:\dat.exe', 'c:\dat.dat', 1)
    Run('c:\dat.dat "переданный параметер строка "Ц№;УВ%АПРО"')

    Всего записей: 556 | Зарегистр. 21-11-2007 | Отправлено: 19:48 27-03-2009 | Исправлено: sproxy, 19:51 27-03-2009
    tayron

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребята, подскажите, как можно поменять размер окна (уменьшить) с помощью скриптов (WinMove - не справилось, видимо у окна установлено минимально разрешение). Как я понимаю - тут без ситсемных библиотек не обойтись, пожалуйста подскажите!

    Всего записей: 109 | Зарегистр. 10-07-2002 | Отправлено: 20:07 27-03-2009
    sproxy



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    tayron
    попробуй этим:
     

    Код:
    #Include <WinAPI.au3>
    _WinAPI_SetWindowPos($hWnd, $hAfter, $iX, $iY, $iCX, $iCY, $iFlags)

    Всего записей: 556 | Зарегистр. 21-11-2007 | Отправлено: 20:10 27-03-2009
    tayron

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    А подробнее можно?  
     
    Как пользоваться этим:  
     
    Syntax.........: _WinAPI_SetWindowPos($hWnd, $hAfter, $iX, $iY, $iCX, $iCY, $iFlags)
    ; Parameters ....: $hWnd        - Handle of window
    ;                  $hAfter      - Identifies the window to precede the positioned window in the Z order. This parameter must be a
    ;                  +window handle or one of the following values:
    ;                  |$HWND_BOTTOM    - Places the window at the bottom of the Z order
    ;                  |$HWND_NOTOPMOST - Places the window above all non-topmost windows
    ;                  |$HWND_TOP       - Places the window at the top of the Z order
    ;                  |$HWND_TOPMOST   - Places the window above all non-topmost windows
    ;                  $iX          - Specifies the new position of the left side of the window
    ;                  $iY          - Specifies the new position of the top of the window
    ;                  $iCX         - Specifies the new width of the window, in pixels
    ;                  $iCY         - Specifies the new height of the window, in pixels
    ;                  $iFlags      - Specifies the window sizing and positioning flags:
    ;                  |$SWP_DRAWFRAME      - Draws a frame around the window
    ;                  |$SWP_FRAMECHANGED   - Sends a $WM_NCCALCSIZE message to the window, even if the window's size is not changed
    ;                  |$SWP_HIDEWINDOW     - Hides the window
    ;                  |$SWP_NOACTIVATE     - Does not activate the window
    ;                  |$SWP_NOCOPYBITS     - Discards the entire contents of the client area
    ;                  |$SWP_NOMOVE         - Retains the current position
    ;                  |$SWP_NOOWNERZORDER  - Does not change the owner window's position in the Z order
    ;                  |$SWP_NOREDRAW       - Does not redraw changes
    ;                  |$SWP_NOREPOSITION   - Same as the $SWP_NOOWNERZORDER flag
    ;                  |$SWP_NOSENDCHANGING - Prevents the window from receiving $WM_WINDOWPOSCHANGING
    ;                  |$SWP_NOSIZE         - Retains the current size
    ;                  |$SWP_NOZORDER       - Retains the current Z order
    ;                  |$SWP_SHOWWINDOW     - Displays the window
    ; Return values .: Success      - True
    ;                  Failure      - False
     
     
    Добавлено:
    А можно подробнее, не очень понимаю как этим пользоваться (с флагами вообще не разобрался)

    Всего записей: 109 | Зарегистр. 10-07-2002 | Отправлено: 22:50 27-03-2009
    sproxy



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    tayron 22:50 27-03-2009
    Цитата:
    Как пользоваться этим:  


    Код:
    #region: - Option
        Opt('MustDeclareVars',      1)
        Opt('TrayIconDebug',        1)
        Opt('TrayIconHide',         0)
    #endregion
     
    #region: - Include

        #include <Constants.au3>
        #Include <WinAPI.au3>
    #endregion
     
    #region: - Global

        Global  $iPid, $iHwd, $aWinPos
    #endregion
     
    $iPid = Run('notepad.exe')
    While 1
        $iHwd = _ProcessGetWindow($iPid)
        If IsHWnd($iHwd) Then ExitLoop
    WEnd

    WinWait($iHwd)
     
    MsgBox(64, 'Внимание',  'Сейчас будет измененны позиция и размер окна Блокнота')
    $aWinPos = WinGetPos($iHwd)
     
    _WinAPI_SetWindowPos($iHwd, $HWND_TOP, $aWinPos[0]+20, $aWinPos[1]+20, $aWinPos[2]-100, $aWinPos[3]-100, $SWP_SHOWWINDOW)
    MsgBox(64, 'Внимание',  'Результат изменений')
     
    _Pro_Exit()
     
    Func _Pro_Exit()
        ProcessClose($iPid)
        Exit
    EndFunc
     
    Func
    _ProcessGetWindow($iPID, $iRet=1)
        Local $aWinList = WinList()
        Local $aRet[2]
     
        If IsString($iPID) Then $iPID = ProcessExists($iPID)
     
        For $i = 1 To UBound($aWinList)-1
            If WinGetProcess($aWinList[$i][1]) = $iPID Then
                $aRet[0] = $aWinList[$i][0] ;Title
                $aRet[1] = $aWinList[$i][1] ;WinHandle
     
                If $iRet = 0 Then Return $aRet[0]
                If $iRet = 1 Then Return $aRet[1]
     
                Return $aRet
            EndIf
        Next
     
        Return
    SetError(1, 0, $aRet)
    EndFunc

     
    Добавлено:
     

    Цитата:
    А можно подробнее, не очень понимаю как этим пользоваться (с флагами вообще не разобрался)

    для удобства можно воспользоваться переводчиком. как минимум вот > этим <
     
    Добавлено:
     
    $HWND_BOTTOM - расположить окно над всеми другими окнами
    $HWND_NOTOPMOST - убрать стиль "всегда сверху"
    $HWND_TOP - расположить окно над всеми другими окнами
    $HWND_TOPMOST - расположить окно над всеми другими окнами и установить стиль "всегда сверху"
     
    Добавлено:
     
    $SWP_DRAWFRAME - окно в рамке
    $SWP_FRAMECHANGED - выслать сообщение $WM_NCCALCSIZE в окно, даже если размер окна не изменить (это сообщение высылается только если происходит изминение размера)
    $SWP_HIDEWINDOW - спрятать окно
    $SWP_NOACTIVATE - сделать окно не активным
    $SWP_NOCOPYBITS - убрать содержание клиентской области (хз)
    $SWP_NOMOVE - установить начальную позицию
    $SWP_NOOWNERZORDER - не менять позицию окна по Z
    $SWP_NOREDRAW - не прорисовывать изминения в окне
    $SWP_NOREPOSITION - то же самое, что и флаг $SWP_NOOWNERZORDER
    $SWP_NOSENDCHANGING - не получть окном сообщения $WM_WINDOWPOSCHANGING (которое высылает перед изминением размера, положения и порядка окна)
    $SWP_NOSIZE - вернуть изначальный размер окна
    $SWP_NOZORDER - вернуть изначальное положение по Z окна
    $SWP_SHOWWINDOW - показать окно

    Всего записей: 556 | Зарегистр. 21-11-2007 | Отправлено: 00:30 28-03-2009
    tayron

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Нет - я не имел ввиду, что ничего не понял в куче букв. Я не смог понять, что такое флаги...  
     
    Вот самый момент:
    ; |$SWP_FRAMECHANGED - Sends a $WM_NCCALCSIZE message to the window, even if the window's size is not changed  
     
    Как я понимаю $SWP_FRAMECHANGE - этот флаг надо использовать для изменения размера окна, но а что за $WM_NCCALCSIZE?? Это надо передать окну через SendMessage? И каким таким способом?  
     
    Окно (в моем случае) меняет размеры в большую сторону, но не хочет уменьшаться! Есть надобность уменьшить.  
    Еще есть такая штука, что окно реагирует на ресайз, как я понимаю в этом случае надо пользоваться вот этим флагом:  
    ; |$SWP_NOSENDCHANGING - Prevents the window from receiving $WM_WINDOWPOSCHANGING
     
    Но как совместить? Как такое вообще должно выглядеть?
     
    Кратко:
    1. Принудительно изменить размер окна
    2. Не отправлять окну сообщение о изменении размера (чтобы оно не отреагировало и не встало на место).

    Всего записей: 109 | Зарегистр. 10-07-2002 | Отправлено: 00:47 28-03-2009
    sproxy



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    1. инструкция:
    Цитата:
    _WinAPI_SetWindowPos($hWnd, $hAfter, $iX, $iY, $iCX, $iCY, $iFlags)

    $hWnd - это переменная которая содержить хэндел (указатель) на окно
    $hAfter - вместо этого подставляите приглянувшееся из группы:
        $HWND_BOTTOM - расположить окно над всеми другими окнами  
        $HWND_NOTOPMOST - убрать стиль "всегда сверху"  
        $HWND_TOP - расположить окно над всеми другими окнами  
        $HWND_TOPMOST - расположить окно над всеми другими окнами и установить стиль "всегда сверху"
    $iX - вместо этого пишите новую позицию окна по Х
    $iY - вместо этого пишите новую позицию окна по Y
    $iCX - вместо этого пишите новый размер ширины окна
    $iCY - вместо этого пишите новый размер высоты окна
    $iFlags - вместо этого подставляите приглянувшееся из группы:$SWP_DRAWFRAME - окно в рамке  
        $SWP_FRAMECHANGED - выслать сообщение $WM_NCCALCSIZE в окно, даже если размер окна не изменить (это сообщение высылается только если происходит изминение размера)  
        $SWP_HIDEWINDOW - спрятать окно  
        $SWP_NOACTIVATE - сделать окно не активным  
        $SWP_NOCOPYBITS - убрать содержание клиентской области (хз)  
        $SWP_NOMOVE - установить начальную позицию  
        $SWP_NOOWNERZORDER - не менять позицию окна по Z  
        $SWP_NOREDRAW - не прорисовывать изминения в окне  
        $SWP_NOREPOSITION - то же самое, что и флаг $SWP_NOOWNERZORDER  
        $SWP_NOSENDCHANGING - не получть окном сообщения $WM_WINDOWPOSCHANGING (которое высылает перед изминением размера, положения и порядка окна)  
        $SWP_NOSIZE - вернуть изначальный размер окна  
        $SWP_NOZORDER - вернуть изначальное положение по Z окна  
        $SWP_SHOWWINDOW - показать окно
     
    пример:
    Код:
     _WinAPI_SetWindowPos($iHwd, $HWND_TOP, $aWinPos[0]+20, $aWinPos[1]+20, $aWinPos[2]-100, $aWinPos[3]-100, $SWP_SHOWWINDOW)

     
    вот и все. использовать SendMessage не требуется.
     
    2. с помощью _WinAPI_SetWindowPos пробовали? не помогло?
     
    3. потестируйте с разными флагами:
        вместо $hAfter  всегда можно писать $HWND_TOP
        а вот вместо $iFlags поподставляйте разные значения, может поможет...
     

    Всего записей: 556 | Зарегистр. 21-11-2007 | Отправлено: 01:23 28-03-2009
    tayron

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Огромное спасибо за помощь - вдруг дошло, что флаги это сообщения, которые можно складывать, а загвоздка с ресайзом вся какраз в реакции на ресайз, вылечил - SWP_NOSENDCHANGING

    Всего записей: 109 | Зарегистр. 10-07-2002 | Отправлено: 01:25 28-03-2009
    sproxy



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

    про это спрашивали?
    теперь понятней?
     

    Цитата:
    Еще есть такая штука, что окно реагирует на ресайз
    тогда стоит попробовать со флагом: $SWP_NOSENDCHANGING
     
     
    Добавлено:
    tayron 01:25 28-03-2009
    Цитата:
    Огромное спасибо за помощь - вдруг дошло, что флаги это сообщения, которые можно складывать, а загвоздка с ресайзом вся какраз в реакции на ресайз, вылечил - SWP_NOSENDCHANGING

    Бинго !!

    Всего записей: 556 | Зарегистр. 21-11-2007 | Отправлено: 01:25 28-03-2009
    tayron

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Раз уж такое дело - спрошу еще кое что)
     
    Слушаю винду с помощью HotKeySet("{LWIN}{SPACE}", "chngLng"). При нажатии ЛевойВиндовс + Пробел происходит переключение языка у текущего окна. Все работает, но только если зажимать данное сочетание на секунду, а если не зажимать (быстро DOWN+UP) то вылетает меню меню "Пуск":
    1. Можно ли как-нибудь вообще отучить Винду реагировать на кнопку WIN
    2. Можно ли сократить время "ожидания" этого самого сочитания?
     
    Объясню суть: Юзаю Mac OS X, при этом приходится эмулировать WinXP (есть определенные задачи). Работать с разными переключениями раскладки супер стремно - хочется WIN+SPACE.
     
    Добавлено:
    Сори за то, что не опробовав, поможет ли это: http://forum.ru-board.com/topic.cgi?forum=5&topic=17705&start=1400#16 ?

    Всего записей: 109 | Зарегистр. 10-07-2002 | Отправлено: 01:35 28-03-2009
    sproxy



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

    Цитата:
    Сори за то, что не опробовав, поможет ли это: http://forum.ru-board.com/topic.cgi?forum=5&topic=17705&start=1400#16 ?

    тогда уж проще сразу использовать:

    Код:
    #Include <Misc.au3>
    _IsPressed($sHexKey[, $vDLL = 'user32.dll'])

     
    но как понимаю интересует, что бы при нажатии на HotKey в окно не высылался бы пробле, верно?
     
    а при обоих случаях (что по ссылке, что при _IsPressed), пробел будет отправлен в окно,
    т.к. в этих случаях происходит только слежение за нажатыми клавищами.
    А в HotKeySet полное замещение действий.
     
    Сожалею, не могу проверить: HotKeySet("{LWIN}{SPACE}", "chngLng"),
    на моей клавиатуре единсвенная клавища Win не обрабатывается не LWIN, не RWIN.
    Но на таком примере работает все отлично:

    Код:
    #region: - Option
        Opt('MustDeclareVars',      1)
        Opt('TrayIconDebug',        1)
        Opt('TrayIconHide',         0)
    #endregion
     
    HotKeySet('{ESC}', '_Pro_Exit')
    HotKeySet('+{SPACE}', '_HotKey_Action')
     
    #region: - Sleep, Exit
    While 1
        Sleep(10)
    WEnd
     
    Func
    _Pro_Exit()
        Exit
    EndFunc

    #endregion
     
    Func _HotKey_Action()
        ToolTip('Win+Space', 10, 100)
        Sleep(1000)
        ToolTip('', 10, 100)
    EndFunc

     
    даже при ооооооочень быстром нажатии Shift+Space
    может такие траблы только с Win клавищей?
     
    Добавлено:
     
    отключить Win клавишу можно этим способом.
    ооф источник.

    Всего записей: 556 | Зарегистр. 21-11-2007 | Отправлено: 02:17 28-03-2009 | Исправлено: sproxy, 02:19 28-03-2009
    tayron

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Самый большой косяк в том, что постоянно вылазает меню "пуск"!
    Ну а вообще, как я и говорил - секунду или около того приходится ждать, может от "большого" кода, нет?
     
    #region: - Option  
        Opt('MustDeclareVars',      1)  
        Opt('TrayIconDebug',        1)  
        Opt('TrayIconHide',         0)  
    #endregion  
     
    HotKeySet('{ESC}', '_Pro_Exit')  
     
    #region: - Sleep, Exit  
    While 1  
        Sleep(10)  
    WEnd  
     
    Func _Pro_Exit()  
        Exit  
    EndFunc  
    #endregion  
     
    Func _HotKey_Action()  
        ToolTip('Win+Space', 10, 100)  
        Sleep(1000)  
        ToolTip('', 10, 100)  
     EndFunc
     
    Opt("WinTitleMatchMode", 2)
     
     Func _SetKeyboardLayout($sLayoutID, $hWnd)  
        Local $WM_INPUTLANGCHANGEREQUEST = 0x50  
        Local $ret = DllCall("user32.dll", "long", "LoadKeyboardLayout", "str", $sLayoutID, "int", 0)  
        DllCall("user32.dll", "ptr", "SendMessage", "hwnd", $hWnd, _  
                                                    "int", $WM_INPUTLANGCHANGEREQUEST, _  
                                                    "int", 1, _  
                                                    "int", $ret[0])  
    EndFunc
    Func chLang($lang, $hWnd)
       if $lang == 'ru' then _SetKeyboardLayout("00000419",WinGetHandle($hWnd)); EndIf
       if $lang == 'en' then _SetKeyboardLayout("00000409",WinGetHandle($hWnd)); EndIf
       EndFunc
    Func _GetKeyboardLayout($hWnd)  
        Local $aRet = DllCall("user32.dll", "long", "GetWindowThreadProcessId", "hwnd", $hWnd, "ptr", 0)  
        $aRet = DllCall("user32.dll", "long", "GetKeyboardLayout", "long", $aRet[0])  
         
        $langCode = 0000 & Hex($aRet[0], 4)
         
        Switch  
            Case "00000409"
                return "en"
            Case "00000419"
                return "ru"
        EndSwitch
    EndFunc  
     
    Func chengeWinLang()
        $hW = WinGetHandle("last")
        Switch _GetKeyboardLayout($hW)
            Case "ru"
                chLang("en", $hW)
            Case "en"
                chLang("ru", $hW)
        EndSwitch
    EndFunc  
    HotKeySet("{LWIN}{SPACE}", "chengeWinLang")
    HotKeySet("{RWIN}{SPACE}", "chengeWinLang")
     
     
     
    Добавлено:
    О! Пробую!
     
    Добавлено:
    В общем выключил кнопку WIN и как я расчитывал ASC всеравно ее читает как клавишу. Кнопка WIN больше не выпрыгивает, но нажатия продолжают тупить - думаю это либо из-за виртуальной винды, либо просто тупит обработка этой клавиши.
     
    Еще я обнаружил, что пробел в окно не отсылается (когда нажимаешь сочитание, а не его одного), т.е. как я понимаю - еще есть что попробовать...

    Всего записей: 109 | Зарегистр. 10-07-2002 | Отправлено: 02:34 28-03-2009
    sproxy



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    отключение / включение win клавиши:

    Код:
    #region: - Option
        Opt('GUIOnEventMode',       1)
        Opt('MustDeclareVars',      1)
        Opt('TrayIconDebug',        1)
        Opt('TrayIconHide',         0)
    #endregion
     
    #region: - Include

        #include <GuiButton.au3>
        #include <GUIConstantsEx.au3>
        #include <StaticConstants.au3>
        #include <ToolTip_UDF.au3>
        #include <WindowsConstants.au3>
    #endregion
     
    HotKeySet('{ESC}', '_Pro_Exit')
     
    #region: - Global
        Global  $hWinMain, $hState, $hOffOn
        Global  $iWidth = 125
        Global  $sKey = 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout'
        Global  $sValueName = 'Scancode Map'
        Global  $sValue = '00 00 00 00 00 00 00 00 03 00 00 00 00 00 5B E0 00 00 5C E0 00 00 00 00'
        Global  $sState = RegRead($sKey, $sValueName)
    #endregion
     
    #region: - GUI

        $hWinMain = GUICreate('Off / On Win', $iWidth, 155, -1, -1, $WS_CAPTION+$WS_SYSMENU)
            GUISetIcon('shell32.dll', -40, $hWinMain)
                GUISetOnEvent($GUI_EVENT_CLOSE,     '_Pro_Exit')
     
        GUICtrlCreateGroup('   Клавиши Win:   ', 5, 5, $iWidth-10, 50)
            GUICtrlSetFont(-1, 9, 400)
     
        $hState = GUICtrlCreateLabel('Включенна', 10, 26, $iWidth-20, 20, $SS_CENTER)
            GUICtrlSetFont(-1, 11, 700)
     
        $hOffOn = GUICtrlCreateButton('Выключить', 5, 60, $iWidth-10, 30, $BS_DEFPUSHBUTTON )
            GUICtrlSetFont(-1, 8.5, 700)
            _ToolTip_SetText($hOffOn, 'Изминения вступять в силу' & @CRLF & 'после перезагрузки компьютер', 'Внимание:', 7)
            _ToolTip_SetBkColor($hOffOn, 0xffffff)
            _ToolTip_SetTextColor($hOffOn, 0x000000)
            _ToolTip_SetFont($hOffOn, 10, 400, 0, "MS Sans Serif")
                GUICtrlSetOnEvent(-1, '_Off_On')
     
        GUICtrlCreateButton('Перезагрузить', 5, 60+30, $iWidth-10, 30)
            GUICtrlSetOnEvent(-1, '_Restart')
     
        GUICtrlCreateButton('Закрыть  [Esc]', 5, 60+30*2, $iWidth-10, 30)
            GUICtrlSetOnEvent(-1, '_Pro_Exit')
    #endregion
     
    #region: - После создания всех GUI

        _ToolTip_SetShowTime(86400000)
        _Set_State()
        GUISetState(@SW_SHOW, $hWinMain)
    #endregion
     
    #region: - Sleep, Exit

    While 1
        Sleep(10)
    WEnd
     
    Func
    _Pro_Exit()
        Exit
    EndFunc

    #endregion
     
    Func _Set_State()
        If $sState <> '' Then
            GUICtrlSetData($hState, 'Выключенна')
            GUICtrlSetColor($hState, 0xff0000)
            GUICtrlSetData($hOffOn, 'Включить')
        Else
            GUICtrlSetData($hState, 'Включенна')
            GUICtrlSetColor($hState, 0x00bb00)
            GUICtrlSetData($hOffOn, 'Выключить')
        EndIf
    EndFunc
     
    Func
    _Off_On()
        If $sState <> '' Then
            RegDelete($sKey, $sValueName)
        Else
            RegWrite($sKey, $sValueName, 'REG_BINARY', $sValue)
        EndIf
        $sState = RegRead($sKey, $sValueName)
        _Set_State()
    EndFunc
     
    Func
    _Restart()
        Run('shutdown -r')
    ;~  Run('shutdown -r -t 60')
        _Pro_Exit()
    EndFunc

     
    >>> ToolTip_UDF.au3
     
     
    Добавлено:
    tayron 02:34 28-03-2009
    Цитата:
    Самый большой косяк в том, что постоянно вылазает меню "пуск"!  
     Ну а вообще, как я и говорил - секунду или около того приходится ждать, может от "большого" кода, нет?

    как он вообще, этот скрипт, у Вас работал?
    там есть ошибки:
     

    Код:
    Func chengeWinLang()  
        $hW = WinGetHandle("last")

    В данном случае "last" будет воспринято как заголовок окна. может так имелось в виду:

    Код:
     $hWnd = WinGetHandle('[Active]')

     

    Код:
    if $lang == 'en' then _SetKeyboardLayout("00000409",WinGetHandle($hWnd)); EndIf

    нет смысла получать еще раз указатьель окна, он же был передан в функцию, просто оставить:

    Код:
    If $iLangCode == 'ru' Then _SetKeyboardLayout('00000419', $hWnd)

     

    Код:
        Switch  
            Case "00000409"  
                return "en"  
            Case "00000419"  
                return "ru"  
        EndSwitch

    тут явно не хватает: $langCode, вот так:

    Код:
        Switch  $langCode
            Case "00000409"  
                return "en"  
            Case "00000419"  
                return "ru"  
        EndSwitch

     
     
    вот причесал:
     

    Код:
    #region: - Option
        Opt('MustDeclareVars',      1)
        Opt('TrayIconDebug',        1)
        Opt('TrayIconHide',         0)
        Opt('WinTitleMatchMode',    2)
    #endregion
     
    HotKeySet('{ESC}', '_Pro_Exit')
    HotKeySet('{LWIN}{SPACE}', '_ChengeWinLang')
    HotKeySet('{RWIN}{SPACE}', '_ChengeWinLang')
    HotKeySet('+{SPACE}', '_ChengeWinLang')
     
    #region: - Sleep, Exit
    While 1
        Sleep(10)
    WEnd
     
    Func
    _Pro_Exit()
        Exit
    EndFunc

    #endregion
     
    Func _ChengeWinLang()
        Local $hWnd
        $hWnd
    = WinGetHandle('[Active]')
     
        Switch _GetKeyboardLayout($hWnd)
            Case 'ru'
                _ChLang('en', $hWnd)
            Case 'en'
                _ChLang('ru', $hWnd)
        EndSwitch
    EndFunc
     
    Func
    _GetKeyboardLayout($hWnd)
        Local $iLangCode
        Local $aRet = DllCall('user32.dll', 'long', 'GetWindowThreadProcessId', 'hwnd', $hWnd, 'ptr', 0)
        $aRet = DllCall('user32.dll', 'long', 'GetKeyboardLayout', 'long', $aRet[0])
     
        $iLangCode = Hex($aRet[0], 4)
     
        Switch $iLangCode
            Case '0409'
                return 'en'
            Case '0419'
                return 'ru'
        EndSwitch
    EndFunc
     
    Func
    _ChLang($iLangCode, $hWnd)
       If $iLangCode == 'ru' Then _SetKeyboardLayout('00000419', $hWnd)
       If $iLangCode == 'en' Then _SetKeyboardLayout('00000409', $hWnd)
    EndFunc
     
     Func
    _SetKeyboardLayout($sLayoutID, $hWnd)
        Local $WM_INPUTLANGCHANGEREQUEST = 0x50
        Local $ret = DllCall('user32.dll', 'long', 'LoadKeyboardLayout', 'str', $sLayoutID, 'int', 0)
        DllCall('user32.dll', 'ptr', 'SendMessage', 'hwnd', $hWnd, _
                                                    'int', $WM_INPUTLANGCHANGEREQUEST, _
                                                    'int', 1, _
                                                    'int', $ret[0])
    EndFunc

     
     

    Цитата:
    может от "большого" кода, нет?

    код оооочень не большой и обработка ооочень ростая.
    Все должно летать. На моей локальной Win XP по Shift+space обрабатывается мнгновенно.
    Скорее всего траблы из за виртуальныйо Windows.
     

    Цитата:
    ASC всеравно ее читает как клавишу

    уммм, ASC, а кто это/что? _))
     

    Цитата:
    Еще я обнаружил, что пробел в окно не отсылается

    Как и писал выше. Здесь используется HotKeySet - он полностью заменяет действие клавиши.
    Но возможно сделать просто проверку на нажатие - но смысл?
    Что бы потом удалять пробелы? ...хм...хотя можно же их и автоматом удалить...
     
     
     
    Добавлено:
     
    хотя если высылать в окно BackSpace - то будут траблы, некоторые программы принимают
    BackSpace как вохврат на предыдущую страницу/окно....

    Всего записей: 556 | Зарегистр. 21-11-2007 | Отправлено: 03:19 28-03-2009
    MIHMIH007



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

    Цитата:
    как ни странно у меня работало именно когда я запускал файл *.dat и в процессах он висел как *.dat  
    типа так: Run(@ScriptDir & "\game.dat")

    Это просто чудо!!!))))) Всё сработало спасибо огромнейшее)))) Блин неужели всё так просто оказалось))) даж не верится

    Всего записей: 743 | Зарегистр. 05-12-2006 | Отправлено: 09:28 28-03-2009
    FullHD

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как очистить окно input . Допустим при нажатии на кнопку все что введено в input  стераеться .

    Всего записей: 25 | Зарегистр. 24-02-2009 | Отправлено: 15:36 28-03-2009
    sproxy



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    FullHD 15:36 28-03-2009
    Цитата:
    Как очистить окно input . Допустим при нажатии на кнопку все что введено в input  стераеться .


    Код:
    #region: - Option
        Opt('GUIOnEventMode',       1)
        Opt('MustDeclareVars',      1)
        Opt('TrayIconDebug',        1)
        Opt('TrayIconHide',         0)
    #endregion
     
    #region: - Include

        #include <GUIConstantsEx.au3>
        #include <WindowsConstants.au3>
    #endregion
     
    HotKeySet('{ESC}', '_Pro_Exit')
     
    #region: - Global
        Global  $hWinMain, $hInput
    #endregion
     
    #region: - GUI

        $hWinMain = GUICreate('Test', 300, 300, -1, -1, $WS_CAPTION+$WS_SYSMENU)
            GUISetIcon('shell32.dll', -40, $hWinMain)
                GUISetOnEvent($GUI_EVENT_CLOSE,     '_Pro_Exit')
     
        $hInput = GUICtrlCreateInput('Разный текст', 5, 26, 300-10, 20)
     
        GUICtrlCreateButton('Очистить', 5, 60, 150, 30)
            GUICtrlSetOnEvent(-1, '_Null_Input')
    #endregion
     
    #region: - После создания всех GUI

        GUISetState(@SW_SHOW, $hWinMain)
    #endregion
     
    #region: - Sleep, Exit

    While 1
        Sleep(10)
    WEnd
     
    Func
    _Pro_Exit()
        Exit
    EndFunc

    #endregion
     
    Func _Null_Input()
       GUICtrlSetData($hInput, '')
    EndFunc

    Всего записей: 556 | Зарегистр. 21-11-2007 | Отправлено: 15:51 28-03-2009
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    FullHD 15:36 28-03-2009
    Цитата:
    Как очистить окно input

    Это инпут вашего окна, или внешнего? Хотя в любом случае это поможет:
     

    Код:
    ControlSetText("Title", "", "Edit1", "")

     
    sproxy
    Не всегда выставление полных примеров помагает тому кто спрашивает... Если бы за меня вот так всегда всё делали когда я начинал (показывали всё примерами, а не указывали на нужное направление), то наврядли я бы развивался в изучении AutoIt'а.


    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 20:15 28-03-2009
    MIHMIH007



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Народ нужна ваша помощь как можно реализовать одну вещь:
    Вообщем хочется сделать портативную прогу Mathtyp с применением winrar и autoit.
    1. Запускается скрипт который запускает самораскрывающийся архив который скопирует      файлы в директорию C:\Program Files\MathType
    2. Далее скрипт ждёт когда все файлы разархевировались он запускает файл RegAdd.reg из папки C:\Program Files\MathType   который внесёт изменения в реестр
    3. После этого запускается приложение сервер "C:\Program Files\MathType\MathType.exe" -server
    4. После этого запускается файл который будет лежать рядом со скриптом например WORD.exe это портативный офис сделанный через ксенокод.....
    5. Далее скрипт ждёт и проверяет наличие процесса word.exe  
    6. Как только он не находит процесса он закрывает процесс MathType.exe
    7. Запускает RegDell.reg из папки C:\Program Files\MathType
    8. Удаляет папку C:\Program Files\MathType

    Всего записей: 743 | Зарегистр. 05-12-2006 | Отправлено: 21:09 28-03-2009
    sproxy



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    ViSiToR 20:15 28-03-2009
    Цитата:
    Не всегда выставление полных примеров помагает тому кто спрашивает... Если бы за меня вот так всегда всё делали когда я начинал (показывали всё примерами, а не указывали на нужное направление), то наврядли я бы развивался в изучении AutoIt'а.

    Благодраю.
    а у меня 50/50. иногда по примера легче разобрать )
     
    MIHMIH007 21:09 28-03-2009
    Цитата:
    1. Запускается скрипт который запускает самораскрывающийся архив который скопирует      файлы в директорию C:\Program Files\MathType

     

    Код:
    ;~ В папке со скриптом должны быть:
    ;~ 1. Файл WinRar.exe
    ;~ 2. Для примера архив WinRAR.rar

     
    $sArhivPath = 'WinRAR.rar'
    $sDestPath  = @ProgramFilesDir & '\Mathtyp\'
    $sCmd = ' x ' & $sArhivPath & ' * "' & $sDestPath & '"'
    Run('winrar.exe' & $sCmd)

    Всего записей: 556 | Зарегистр. 21-11-2007 | Отправлено: 21:11 28-03-2009 | Исправлено: sproxy, 21:29 28-03-2009
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    sproxy 21:11 28-03-2009
    Цитата:
    Благодраю

    За что?  
     

    Цитата:
    иногда по примера легче разобрать

    Согласен, но если мне нужны примеры, то я так и попрошу, чтобы показали на примере
     
    Вот классический случай, когда лучше показать на примере (см. выше).

     
    MIHMIH007 21:09 28-03-2009
    Цитата:
    как можно реализовать одну вещь

    Ну, тут не совсем одну ... но вроде так:
     

    Код:
     
    RunWait('MathType_Setup.exe')
    RunWait('Regedit.exe /s "' & @ProgramFilesDir & '\MathType\RegAdd.reg"')
    ShellExecute(@ProgramFilesDir & '\MathType\MathType.exe', '-server')
     
    Run(@ScriptDir & '\WORD.exe')
    Sleep(1000)
     
    While ProcessExists('WORD.exe')
        Sleep(100)
    WEnd
     
    ProcessClose('MathType.exe')
     
    RunWait('Regedit.exe /s "' & @ProgramFilesDir & '\MathType\RegDell.reg"')
    DirRemove(@ProgramFilesDir & '\MathType', 1) ;1 это полное удаление, включая подпапки и файлы


    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 21:27 28-03-2009
       

    Страницы: 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

    Компьютерный форум Ru.Board » Компьютеры » Программы » AutoIT (Часть 2)
    Widok (01-06-2010 13:08): Лимит страниц. Продолжаем здесь.


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru