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

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

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

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

   

AddXL

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

AutoIt3

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

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

 
Помощь по AutoIT:
  • Справку на русском (и не только) вы всегда(?) сможете найти тут
  • Справочник по командам rundll32
  • Русский справочник по API-функциям
  • Помощь по Регулярным выражениям
  • AutoIt v3: Your Quick Guide (652 КБ) - Ваш быстрый гид в мир AutoIt-а (книга в формате pdf)
     
    Инструметы для 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:
  • Коллекция AutoIt скриптов от Sanja Alone
  • Коллекция скриптов на http://msfn.org
  • Пополняющийся со временем сайт с полезными утилитами и функциями на AutoIt
  • Desktop Icons Restorator - Скрипт-Программа для сохранения/восстановления позиции иконок р.стола.
  • CaptureIt - Утилита предназначена для захвата изображений с вашего экрана.
  • SwitchIt - Скрипт для конвертирования выделенного текста
  • Скрипт расскраски кода AutoIt для публикации в форумах
     
    Общие вопросы и решения на Autoit:
  • Обработчик скриптов добавляющий отладчик (debugger)
  • Интеракция между несколькими скриптами
  • Пример использование интеракции между скриптами - Добавление элементов GUI с внешнего модуля
  • Копирование большого файла с отображением данных прогресса
  • Создание динамического меню в Tray Icon (значёк в области уведомления)
  • Пример создания своего мастера (Wizard)
  • Метод позволяющий запускать код VBS не создавая временных файлов
  • Описание функции GUIRegisterMsg()
  • Пример перехвата вводимых символов с клавиатуры
  • Пример деактивирования TabItem
  • Пример вывода лога в Edit-поле (с поддержкой форматирования текста)
  • Пример остановки/начало выполнения скрипта + Слежение за б.обмена с заменой неподдерживаемых в имени файла символов
  • Пример использования меню с иконками (ModernMenu.au3) -> Список программ в меню значка в системном трее
     
  • Как по PID процесса вычислить путь запускаемого файла
  • Получение IP по подключенному сокету
     
    Отдельные функции (UDF):
  • Функции Отключения/Подключения к Интернету
  • Функция проверки подключения к Интернету
  • Функция для получения структуры директории включая подкаталоги
  • Функция для поиска в файлах
  • Функция для смены разрешения экрана
  • Функция для смены раскладки клавиатуры в определённом окне
  • Функция для получения списка процессов с допол. инфой (путь к исполняемому файлу и др.)
  • Функции и пример для отображения детального процесса закачки файла
  • Функция (и пример использования) для отображения стильного диалога “О Программе” - [Усовершенствованная версия]
  • Функция возвращает пронумерованный список всех классов определённого окна + функция получения хендлов для этих классов
  • Функция для получения заголовка окна (или его идентификатора) по ID процесса (PID)
  • Функция _StringIsUTF8Format() + _StringToUTF() - Первая проверяет если строка содержится в UTF-8 формате, вторая преобразовывает строку в UTF-8 формат
  • Функция _FileOpenDialogEx - Возвращает массив (или строку) с полными путями к выбранным файлам
  • _AU3_Lib* Функции - Предназначены для обработки подключаемых библиотек через #include
  • Функция транслитерации строки
  • Расширенная библиотека для работы с реестром
     
    За шапкой следит ViSiToR  

  • Всего записей: 6 | Зарегистр. 24-11-2005 | Отправлено: 13:20 24-11-2005 | Исправлено: Maz, 11:50 17-04-2017
    Maza Faka



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

    Цитата:
    Что именно в ней не работает?

    Запускаются несколько копий программы
     
    Добавлено:
    diamondxxx

    Цитата:
    хочу чтобы по истечении определенного интервала времени с момента запуска скрипта\ или с момента бездействия (то есть, если никакое окно подходящее под условие не появилось в течение 3 минут) скрипт сам себя перезапускал 1 раз.

    Пример:

    Код:
    MsgBox(0, "Debug", "Script running")
     
    If WinWait("[CLASS:Notepad]", "", 3) = 0 Then ;Ждём появление окна блокнота 3 секунды
        Run(@AutoItExe & ' /AutoIt3ExecuteScript "' & @ScriptFullPath & '"')
        Exit
    EndIf

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 06:25 10-01-2009
    zmei2009

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте.
    Кто может подсказать скрипт для AutoIt3.Скрипт нужен для игры MU.
    Скрипт должен выполнять такие функции:
    Нажать и удерживать LCtrl. Включит скилл 1 кликнуть на mouse2,потом включить скилл 2 кликнуть на mouse2, потом  скилл 3 кликнуть на mouse2 и всё занова (всё это автоматически) и на колёсик мыши поставить скорость выполнения.
    (Получается Combo удар у чара DK,BK)
     
    Если можно то ещё чтобы нажимались клавижи "Q -Hp банки,W -SD" скорость нажатия 0,5 милсек
     
    Start=F5
    Stop=F6
    Exit=F7
     
    Помогите плз.
     

    Всего записей: 9 | Зарегистр. 10-01-2009 | Отправлено: 11:17 10-01-2009
    ynbIpb



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

    Цитата:
    Т.е. визуально процесс должен убить сам себя и запустить вновь в идеале.

    наверное батником, такие методы я видел у троянов (самоуничтожение)

    Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 12:12 10-01-2009 | Исправлено: ynbIpb, 12:14 10-01-2009
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Maza Faka 06:25 10-01-2009
    Цитата:
    Запускаются несколько копий программы

    Это в скомпилированном скрипте? если нет, то как запускается программа? и как используется функция?

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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 14:49 10-01-2009
    Maza Faka



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

    Цитата:
    Это в скомпилированном скрипте? если нет, то как запускается программа? и как используется функция?

    А без разницы, и в компилированном и некомпилированном скрипте:

    Код:
     
    #include <Misc.au3>
     
    _Singleton("MyScript")
     
    MsgBox(0, "Debug", "Test message")
     

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 15:25 10-01-2009
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Maza Faka
    Странно, а выявить причину неработоспособности можешь? и ещё, какая у тебя система? может каких компонентов нехватает?

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

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите есче, пожалста. Как обрабатывать наведение курсора мышки на объект? И как создать пустой одномерный массив, чтоб потом в него можно было добавлять данные?
     
    Добавлено:
    Имеется ли UDF по работе с XML?

    Всего записей: 3265 | Зарегистр. 30-05-2007 | Отправлено: 23:17 10-01-2009
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Zloy_Gelud 23:17 10-01-2009
    Цитата:
    Как обрабатывать наведение курсора мышки на объект?

    Какой объект? в GUI? возможно поможет _GUICtrlSetOnHover UDF?
     

    Цитата:
     как создать пустой одномерный массив

    Dim $aArray[1]
     

    Цитата:
    Имеется ли UDF по работе с XML?

    XML DOM wrapper (COM)?

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

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



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

    Цитата:
    Странно, а выявить причину неработоспособности можешь? и ещё, какая у тебя система? может каких компонентов нехватает?

    Ну в общем-то я и сам удивляюсь, как она раньше работала, может функция _Singleton в ранних версиях была другой? Я не понимаю, как эта функция работает, функции OpenMutex там и в помине нет, как тогда проверять был ли уже создан mutex-объект? Система WinXP SP3, недавно переустановил. В общем проверяю так:

    Код:
    ;Prevent from secondary run
    If _OpenMutex(@ScriptName) Then Exit MsgBox(48, "@ScriptName", @ScriptName & " is already running!")
    _CreateMutex(@ScriptName)
     
    MsgBox(0, "Debug", "Test message")
     
    Func _OpenMutex($sUnicName)
        Local Const $MUTEX_ALL_ACCESS = 0x1F0001
        Local $aRet = DllCall("kernel32.dll", "hwnd", "OpenMutex", _
                                                      "int", $MUTEX_ALL_ACCESS, _
                                                      "int", False, _
                                                      "str", $sUnicName)
        Return $aRet[0]
    EndFunc   ;==>_OpenMutex
     
    Func _CreateMutex($sUnicName)
        DllCall("kernel32.dll", "hwnd", "CreateMutex", _
                                        "int", 0, _
                                        "int", False, _
                                        "str", $sUnicName)
    EndFunc   ;==>_CreateMutex

    Вышеуказанный пример используется во многих проектах написанных на Delphi, C, C++ и т. д. Поэтому рекомендую (заодно скомпилированный скрипт меньше "весить будет")

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 09:02 11-01-2009
    gal7

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите, пожалуйста, сделать посылку сигнала по CTRL+C (не просто нажать это сочетание, а именно послать сигнал с помощью GenerateConsoleCtrlEvent -  
    это важно) определенному консольному окну.  
     
    Создание процесса я взял отсюда (во втором посте):
    http://www.autoitscript.com/forum/index.php?showtopic=76607&hl=_WinAPI_CreateProcess
     
    Способ отправки ctrl+c взял отсюда (почти в самом конце):
    http://news.rsdn.ru/Forum/message/1158887.flat.aspx
     
    Все консольные функции windows здесь:
    http://msdn.microsoft.com/en-us/library/ms682073(VS.85).aspx
     
    Такой винегрет из всего этого у меня получился (не работает):
     

    Код:
    #Include <WinAPI.au3>
    #Include <Constants.au3>
    #Include <NamedPipes.au3>
     
    Local $kernel = DllOpen("kernel32.dll")
    Local $iBytes, $sData, $hReadPipe, $hWritePipe, $tBuffer, $tProcess, $tSecurity, $tStartup
    $sCmd = "perl";Какая-нибудь коммандная строка где может срабатывать закрытие окна по ctrl+c у меня это perl
    $sWorkingDir = @ScriptDir
    $state = @SW_SHOW
    Local Const $STARTF_USESHOWWINDOW = 0x1
    Local Const $STARTF_USESTDHANDLES = 0x100
    $tSecurity = DllStructCreate($tagSECURITY_ATTRIBUTES)
    DllStructSetData($tSecurity, "Length", DllStructGetSize($tSecurity))
    DllStructSetData($tSecurity, "InheritHandle", True)
    _NamedPipes_CreatePipe($hReadPipe, $hWritePipe, $tSecurity)
    $tProcess = DllStructCreate($tagPROCESS_INFORMATION)
    $tStartup = DllStructCreate($tagSTARTUPINFO)
    DllStructSetData($tStartup, "Size", DllStructGetSize($tStartup))
    DllStructSetData($tStartup, "Flags", BitOR($STARTF_USESTDHANDLES, $STARTF_USESHOWWINDOW))
    DllStructSetData($tStartup, "StdOutput", $hWritePipe)
    DllStructSetData($tStartup, "StdError", $hWritePipe)
    DllStructSetData($tStartup, "ShowWindow", $state)
    DllCall($kernel, "int", "AllocConsole")
    _WinAPI_CreateProcess('', $sCmd, 0, 0, False, 'CREATE_NEW_PROCESS_GROUP', 0, 0, DllStructGetPtr($tStartup), DllStructGetPtr($tProcess))
    $ProcessID = DllStructGetData($tProcess, "ProcessID")
    sleep(1000)
    $r = DllCall($kernel, "int", "GenerateConsoleCtrlEvent", "dword", 'CTRL_C_EVENT', "dword", $ProcessID)
    $t = _WinAPI_GetLastErrorMessage()
     
    $hThread = DllStructGetData($tProcess, "hThread")
    $hProcess = DllStructGetData($tProcess, "hProcess")
    _WinAPI_CloseHandle($hThread)
    _WinAPI_CloseHandle($hProcess)
    DllCall($kernel, "int", "FreeConsole")
    MsgBox(0,$t,$r)
    DllClose($kernel)

    Половину того, что мне напереводил мой эл. переводчик я не понимаю, поэтому в чем может быть ошибка не представляю.

    Всего записей: 145 | Зарегистр. 03-06-2007 | Отправлено: 14:31 11-01-2009 | Исправлено: gal7, 14:32 11-01-2009
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Maza Faka 09:02 11-01-2009
    Цитата:
    может функция _Singleton в ранних версиях была другой?

    Точно была другой...
     

    Код:
    Func _Singleton($occurenceName, $flag = 0)
        Local $ERROR_ALREADY_EXISTS = 183
        $occurenceName = StringReplace($occurenceName, "\", "") ; to avoid error
        ;    Local $handle = DllCall("kernel32.dll", "int", "CreateSemaphore", "int", 0, "long", 1, "long", 1, "str", $occurenceName)

        Local $handle = DllCall("kernel32.dll", "int", "CreateMutex", "int", 0, "long", 1, "str", $occurenceName)
        Local $lastError = DllCall("kernel32.dll", "int", "GetLastError")
        If $lastError[0] = $ERROR_ALREADY_EXISTS Then
            If
    $flag = 0 Then
                Exit
    -1
            Else
                SetError($lastError[0])
                Return 0
            EndIf
        EndIf
        Return
    $handle[0]
    EndFunc

     

    Цитата:
    Я не понимаю, как эта функция работает

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

    Цитата:
    как тогда проверять был ли уже создан mutex-объект?

    Проверяет на API-ошибку при попытке создать точно такой же объект
     
    Добавлено:
    Maza Faka
    Такой вариант у тебя работает?
     

    Код:
    If _SingletonEx(@ScriptName, 1) Then Exit MsgBox(48, "@ScriptName", @ScriptName & " is already running!")
     
    MsgBox(0, "Debug", "Test message")
     
    Func _SingletonEx($sUnicName, $iFlag=0)
        Local Const $MUTEX_ALL_ACCESS = 0x1F0001
        Local Const $SECURITY_DESCRIPTOR_REVISION = 1
        Local $handle, $lastError, $pSecurityAttributes = 0
     
        If BitAND($iFlag, 2) Then
            ; The size of SECURITY_DESCRIPTOR is 20 bytes.  We just
            ; need a block of memory the right size, we aren't going to
            ; access any members directly so it's not important what
            ; the members are, just that the total size is correct.

            Local $structSecurityDescriptor = DllStructCreate("dword[5]")
            Local $pSecurityDescriptor = DllStructGetPtr($structSecurityDescriptor)
            ; Initialize the security descriptor.
            Local $aRet = DllCall("advapi32.dll", "int", "InitializeSecurityDescriptor", _
                "ptr", $pSecurityDescriptor, "dword", $SECURITY_DESCRIPTOR_REVISION)
     
            If Not @error And $aRet[0] Then
                ; Add the NULL DACL specifying access to everybody.
                $aRet = DllCall("advapi32.dll", "int", "SetSecurityDescriptorDacl", _
                    "ptr", $pSecurityDescriptor, "int", 1, "ptr", 0, "int", 0)
     
                If Not @error And $aRet[0] Then
                    ; Create a SECURITY_ATTRIBUTES structure.
                    Local $structSecurityAttributes = DllStructCreate("dword;ptr;int")
                    ; Assign the members.
                    DllStructSetData($structSecurityAttributes, 1, DllStructGetSize($structSecurityAttributes))
                    DllStructSetData($structSecurityAttributes, 2, $pSecurityDescriptor)
                    DllStructSetData($structSecurityAttributes, 3, 0)
                    ; Everything went okay so update our pointer to point to our structure.
                    $pSecurityAttributes = DllStructGetPtr($structSecurityAttributes)
                EndIf
            EndIf
        EndIf
     
        Local
    $aRet = DllCall("kernel32.dll", "hwnd", "OpenMutex", "int", $MUTEX_ALL_ACCESS, "int", False, "str", $sUnicName)
     
        If $aRet[0] <> 0 Then
            If
    $iFlag = 0 Then Exit
            Return
    1
        EndIf
     
        DllCall("kernel32.dll", "hwnd", "CreateMutex", "ptr", $pSecurityAttributes, "long", 1, "str", $sUnicName)
        Return 0
    EndFunc


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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 14:33 11-01-2009
    Zloy_Gelud



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR -- да-да..все то, что надо. Спасибо.


    У меня опять вопросы, извините, если они покажутся вам глупыми, но в доках ответа я на них не нашел...
    1. Применить маску к GUI и соответственно чтобы не было панельки (?) с кнопоками свернуть, развернуть, закрыть, ну и конечно чтоб GUI (проект) можно было перемещать?
    2. Можно ли использовать в качестве маски фоновый рисунок?
    3. (Этот вопрос скажу честно еще сам не разбирал, но надеюсь вы поможите ) При наведении на Label появлялся прямоугольник (имеющий определенную толщину границы и цвет), имеющий размеры как и у объекта Label и такую же позицию? Нужно это как бы для сигнализации наведения на объект.

    Всего записей: 3265 | Зарегистр. 30-05-2007 | Отправлено: 21:25 11-01-2009
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Zloy_Gelud 21:25 11-01-2009
    Цитата:
     Применить маску к GUI и соответственно чтобы не было панельки (?) с кнопоками свернуть, развернуть, закрыть, ну и конечно чтоб GUI (проект) можно было перемещать?

     
    Пример:
     

    Код:
    #include <GuiConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <WinAPI.au3>
    ;
     
    Global $GUI = GUICreate("Drag using any place on GUI - Demo", -1, -1, -1, -1, _
        BitOR($WS_POPUPWINDOW, $WS_THICKFRAME), $WS_EX_CLIENTEDGE)
     
    $Menu = GUICtrlCreateMenu("Menu")
    $Exit_MenuItem = GUICtrlCreateMenuItem("Exit Item", $Menu)
     
    GUIRegisterMsg($WM_NCHITTEST, "WM_NCHITTEST")
     
    GUISetState()
     
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE, $Exit_MenuItem
                Exit
        EndSwitch
    WEnd
     
    Func
    WM_NCHITTEST($hWnd, $iMsg, $iwParam, $ilParam)
        If $hWnd <> $GUI Or $iMsg <> $WM_NCHITTEST Then Return $GUI_RUNDEFMSG
     
        Local $iRet = _WinAPI_DefWindowProc($hWnd, $iMsg, $iwParam, $ilParam)
        If $iRet = 1 Then Return 2
     
        Return $iRet
    EndFunc

     

    Цитата:
    Можно ли использовать в качестве маски фоновый рисунок?

    Какой маски? фоновой рисунок можно установить через GUICtrlCreatePic(), примерно так:
     

    Код:
    $BackPicID = GUICtrlCreatePic(@Systemdir & "\oobe\images\mslogo.jpg", 0, 0, 400, 300)
    GUICtrlSetState(-1, $GUI_DISABLE)

     

    Цитата:
     При наведении на Label появлялся прямоугольник (имеющий определенную толщину границы и цвет), имеющий размеры как и у объекта Label и такую же позицию?

    С библиотекой что я приводил ранее можно. Пример.

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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 00:10 12-01-2009
    Zloy_Gelud



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR -- еще раз спасибо! Выручаешь.

    Цитата:
    Какой маски?

    Имеется .BMP рисунок (собственно маска). Вот ее и надо (можно ли?) применить к главному окну проекта? Типа чтоб контуры окна проекта имели такие же как и в рисунке (маске).

    Всего записей: 3265 | Зарегистр. 30-05-2007 | Отправлено: 01:39 12-01-2009
    Maza Faka



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

    Цитата:
    Точно была другой...

    Ты будешь смеяться, но и она не работает
     

    Цитата:
    Ты бы проверил на каком месте проблема, ведь если она не работает, то нужно разработчикам доложить, чтобы поправили.

    А незнаю в каком месте она не работает (Мой вариант меня вполне устраивает)
     

    Цитата:
    Такой вариант у тебя работает?

    Конечно работает, ведь там используется функция OpenMutex, а вот этот огород вроде бы не нужен:

    Код:
     
    Local Const $MUTEX_ALL_ACCESS = 0x1F0001  
        Local Const $SECURITY_DESCRIPTOR_REVISION = 1  
        Local $handle, $lastError, $pSecurityAttributes = 0  
     
        If BitAND($iFlag, 2) Then  
            ; The size of SECURITY_DESCRIPTOR is 20 bytes.  We just  
            ; need a block of memory the right size, we aren't going to  
            ; access any members directly so it's not important what  
            ; the members are, just that the total size is correct.  
            Local $structSecurityDescriptor = DllStructCreate("dword[5]")  
            Local $pSecurityDescriptor = DllStructGetPtr($structSecurityDescriptor)  
            ; Initialize the security descriptor.  
            Local $aRet = DllCall("advapi32.dll", "int", "InitializeSecurityDescriptor", _  
                "ptr", $pSecurityDescriptor, "dword", $SECURITY_DESCRIPTOR_REVISION)  
     
            If Not @error And $aRet[0] Then  
                ; Add the NULL DACL specifying access to everybody.  
                $aRet = DllCall("advapi32.dll", "int", "SetSecurityDescriptorDacl", _  
                    "ptr", $pSecurityDescriptor, "int", 1, "ptr", 0, "int", 0)  
     
                If Not @error And $aRet[0] Then  
                    ; Create a SECURITY_ATTRIBUTES structure.  
                    Local $structSecurityAttributes = DllStructCreate("dword;ptr;int")  
                    ; Assign the members.  
                    DllStructSetData($structSecurityAttributes, 1, DllStructGetSize($structSecurityAttributes))  
                    DllStructSetData($structSecurityAttributes, 2, $pSecurityDescriptor)  
                    DllStructSetData($structSecurityAttributes, 3, 0)  
                    ; Everything went okay so update our pointer to point to our structure.  
                    $pSecurityAttributes = DllStructGetPtr($structSecurityAttributes)  
                EndIf  
            EndIf  
        EndIf
     

     
    Zloy_Gelud

    Цитата:
    чтобы не было панельки (?) с кнопоками свернуть, развернуть, закрыть, ну и конечно чтоб GUI (проект) можно было перемещать

    Варианты:
    1.

    Код:
    #include <GuiConstants.au3>
    #include <WindowsConstants.au3>
     
    $hGui = GUICreate("Test", 300, 200, -1, -1, $WS_POPUP)
     
    GUIRegisterMsg($WM_NCHITTEST, "WM_NCHITTEST")
     
    GUISetState()
     
    Do
    Until
    GUIGetMsg() = $GUI_EVENT_CLOSE
     
    Func WM_NCHITTEST($hWnd, $Msg, $wParam, $lParam)
        Local $iProc
     
        $iProc
    = DllCall("user32.dll", "int", "DefWindowProc", "hwnd", $hWnd, "int", $Msg, "wparam", $wParam, "lparam", $lParam)
        $iProc = $iProc[0]
     
        If $iProc = $HTCLIENT Then Return $HTCAPTION
     
        Return $GUI_RUNDEFMSG
    EndFunc

     
    2.

    Код:
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <MenuConstants.au3>
    #include <WinAPI.au3>
     
    $GUI = GUICreate('dd',-1,-1,-1,-1,BitOR($WS_POPUPWINDOW, $WS_THICKFRAME), BitOR($WS_EX_CLIENTEDGE, $WS_EX_TOOLWINDOW))
     
    GUICtrlCreateLabel("Label",10,10,100,200)
    GUICtrlSetBkColor(-1,0x999999)
     
    GUICtrlCreateButton("Btn",10,220,50,25)
     
    GUISetState()
     
    While 1
        $msg = GUIGetMsg()
        Select
            Case
    $msg = $GUI_EVENT_CLOSE
                Exit
            Case
    $msg = $GUI_EVENT_PRIMARYDOWN
                _SendMessage($GUI, $WM_SYSCOMMAND, BitOR($SC_MOVE, $HTCAPTION), 0)
        EndSelect
    WEnd

     
    3.

    Код:
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <MenuConstants.au3>
    #include <WinAPI.au3>
     
    $GUI = GUICreate('dd',-1,-1,-1,-1,BitOR($WS_POPUPWINDOW, $WS_THICKFRAME), BitOR($WS_EX_CLIENTEDGE, $WS_EX_TOOLWINDOW))
     
    GUICtrlCreateLabel("Label",10,10,100,200)
    GUICtrlSetBkColor(-1,0x999999)
     
    GUICtrlCreateButton("Btn",10,220,50,25)
     
    GUISetState()
     
    While 1
        $msg = GUIGetMsg()
        Select
            Case
    $msg = $GUI_EVENT_CLOSE
                Exit
            Case
    $msg = $GUI_EVENT_PRIMARYDOWN
                _SendMessage($GUI, $WM_SYSCOMMAND, BitOR($SC_MOVE, $HTCAPTION), 0)
        EndSelect
    WEnd

     

    Цитата:
    При наведении на Label появлялся прямоугольник (имеющий определенную толщину границы и цвет)


    Код:
    #include <GUIConstantsEx.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    #include <StaticConstants.au3>
     
    Global $Draw = False
    Global
    $aCurPos
     
    $hGUI
    = GUICreate("My GUI", 300, 200)
     
    $pic = GUICtrlCreatePic(@WindowsDir & "\Web\Wallpaper\Windows XP.jpg", 0, 0, 300, 200)
    GUICtrlSetState(-1, $GUI_DISABLE)
     
    $button = GUICtrlCreateLabel("Test", 100, 65, 100, 25, BitOR($SS_CENTER, $SS_CENTERIMAGE))
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
     
    GUICtrlCreateGroup("", -99, -99, 1, 1)
     
    GUISetState()
     
    FrameRect1(GUICtrlGetHandle($button), 0xFFFFFF)
     
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop
            Case
    $button
                MsgBox(0, "Info", "Button pressed", 0, $hGUI)
        EndSwitch
     
        $aCurPos = GUIGetCursorInfo()
        If IsArray($aCurPos) Then
            If
    ($aCurPos[4] = $button) And ($Draw = False) Then
                $Draw = True
                GUICtrlSetColor($button, 0xFF0000)
                GUICtrlSetFont($button, 10, 800)
                FrameRect1(GUICtrlGetHandle($button), 0x0000FF)
            ElseIf ($aCurPos[4] <> $button) And ($Draw = True) Then
                $Draw = False
                GUICtrlSetColor($button, 0)
                GUICtrlSetFont($button, Default, Default)
                FrameRect1(GUICtrlGetHandle($button), 0xFFFFFF)
            EndIf
        EndIf
    WEnd
     
    Func
    FrameRect1($hWnd, $sColor)
        Local $hDC = _WinAPI_GetDC($hWnd)
        Local $tRect = _WinAPI_GetClientRect($hWnd)
        Local $hBrush = _WinAPI_CreateSolidBrush($sColor)
     
        DllCall("user32.dll", "int", "FrameRect", "hwnd", $hDC, "ptr", DllStructGetPtr($tRect), "hwnd", $hBrush)
     
        _WinAPI_ReleaseDC($hWnd, $hDC)
        _WinAPI_DeleteObject($hBrush)
    EndFunc



    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 08:28 12-01-2009
    Zloy_Gelud



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maza Faka -- здорово.   Буду разбирать.
    З.Ы. А чем различаются пример 2 и пример 3?

    Всего записей: 3265 | Зарегистр. 30-05-2007 | Отправлено: 12:26 12-01-2009
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Maza Faka 08:28 12-01-2009
    Цитата:
    Ты будешь смеяться, но и она не работает

    Значит у тебя какая-то проблема в системе появилась.
     

    Цитата:
    А незнаю в каком месте она не работает    (Мой вариант меня вполне устраивает)

    Жалко что проверить не можешь, ведь раз не работает, значит бага... а значит и у других может не работать... а значит функция не надёжная...
     

    Цитата:
    этот огород вроде бы не нужен

    Насколько я понимаю, этот огород для висты...

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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 13:53 12-01-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

    Компьютерный форум Ru.Board » Компьютеры » Программы » Закладки » AutoIT (Часть 1)
    Widok (12-01-2009 14:47): лимит страниц. продолжаем здесь


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru