Что нового

“Цитатник форума” или “Описания разных терминов и поведении”

Статус
Закрыто для дальнейших ответов.

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 123
Репутация
2 320
В данной теме постараюсь изложить полезные цитаты с форума, а также описания разных терминов, понятии и поведении связанных с AutoIt, выложенные ранее участниками форума (пока только от Yashied :laugh: ).



Yashied сказал(а):
Ну, программирование, это не конструктор. Просто прилепить окно не получится. Возможно придется делать изменения во всем коде.

Yashied сказал(а):
Что это за манера такая, спрашивать про одно, а писать про другое...

Yashied сказал(а):
GUIGetMsg() уже включает в себя оптимальную задержку для разгрузки процессора (если вы об этом), и вам не нужно использовать Sleep().

Режим OnEvent нужно использовать тогда, когда планируется параллельно обработки сообщений от GUI производить еще какие-нибудь действия, например, поиск файлов на диске. В этом случае, если не использовать режим OnEvent, то во время процесса поиска файлов реакция GUI на действия пользователя будет нулевая. Вы даже не сможете закрыть окно.

Для обычных диалоговых окон целесообразнее использовать режим Loop, т.к. проще. Но можно и комбинировать эти два режима, т.е. переключаться между ними в ходе выполнения программы.

Все примеры есть в справке.

Yashied сказал(а):
В Windows любая программа (процесс) имеет хотя бы одно GUI, в противном случае это консольное приложение. Обычными методами с такими приложениями работать нельзя. Для более подробной информации ищите материал в сети. Запись и чтение данных в консольное приложение в AutoIt делается с помощью функций ConsoleWrite() и ConsoleRead() соответственно. Но можно и расширить список функций с помощью API.

Yashied сказал(а):
"Param", это вообще довольно хитрая штука, и использование его нативными функциями, это своего рода расплата за то, что мы вообще что-то можем сделать с элементами ListView и TreeView, в рамках AutoIt естественно, например изменить цвет. Вообще, использование "Param", это единственный простой способ идентифицировать элементы в LV/TV без нагромождения каких-нибудь таблиц соответствия ID c Handle.

С другими элементами GUI все намного проще, т.к. есть жесткая связь между CtrlID и Handle: _WinAPI_GetDlgCtrlID() <=> _WinAPI_GetDlgItem().

Yashied сказал(а):
AutoIt3Wrapper (как следует из названия) является оберткой для [Программа для декомпиляции] (т.е. работает вместе с ним). Кроме того, AutoIt3Wrapper уже встроен в дистрибутив полной версии SciTE (не тот, что идет вместе с дистрибутивом AutoIt).

Устанавливать нужно сначала AutoIt, затем SciTE. После этого компиляция и запуск скриптов по умолчанию будет идти через AutoIt3Wrapper, а не [Программа для декомпиляции]. Если SciTE не устанавливать, а использовать встроенный в AutoIt (Lite), то нужно отдельно скачать AutoIt3Wrapper (нижняя ссылка), и компилировать или запускать скрипты через него.

Код:
AutoIt3Wrapper.exe /in MyScript.au3
Код:
AutoIt3Wrapper.exe /run /in MyScript.au3
Или просто запустить AutoIt3Wrapper.exe и выбрать .au3 файл.

Полное описание всех директив AutoIt3Wrapper'а находится в

...\AutoIt3\SciTE\AutoIt3Wrapper\Directives.au3

полной версии SciTE.

Код:
#Region AutoIt3Wrapper directives section
;** This is a list of compiler directives used by AutoIt3Wrapper.exe.
;** comment the lines you don't need or else it will override the default settings
;===============================================================================================================
;** AUTOIT3 settings
#AutoIt3Wrapper_UseX64=                         ;(Y/N) Use X64 versions for AutoIt3_x64 or AUT2EXE_x64. Default=N
#AutoIt3Wrapper_Version=                        ;(B/P) Use Beta or Production for AutoIt3 and AUT2EXE. Default is P
#AutoIt3Wrapper_Run_Debug_Mode=                 ;(Y/N) Run Script with console debugging. Default=N
#AutoIt3Wrapper_Run_SciTE_Minimized=            ;(Y/N) Minimize SciTE while script is running. Default=n
#AutoIt3Wrapper_Run_SciTE_OutputPane_Minimized= ;(Y/N) Toggle SciTE output pane at run time so its not shown. Default=n
#AutoIt3Wrapper_Autoit3Dir=						;Optionally override the base AutoIt3 install directory.
#AutoIt3Wrapper_Aut2exe=						;Optionally override the Aut2exe.exe to use for this script
#AutoIt3Wrapper_AutoIt3=                        ;Optionally override the Autoit3.exe to use for this script
;===============================================================================================================
;** AUT2EXE settings
#AutoIt3Wrapper_Icon=                           ;Filename of the Ico file to use
#AutoIt3Wrapper_OutFile=                        ;Target exe/a3x filename.
#AutoIt3Wrapper_OutFile_Type=                   ;a3x=small AutoIt3 file;  exe=Standalone executable (Default)
#AutoIt3Wrapper_Compression=                    ;Compression parameter 0-4  0=Low 2=normal 4=High. Default=2
#AutoIt3Wrapper_UseUpx=                         ;(Y/N) Compress output program.  Default=Y
#AutoIt3Wrapper_UPX_Parameters=                 ;Override the default setting for UPX.
#AutoIt3Wrapper_Change2CUI=                     ;(Y/N) Change output program to CUI in stead of GUI. Default=N
;===============================================================================================================
;** Target program Resource info
#AutoIt3Wrapper_Res_Comment=                    ;Comment field
#AutoIt3Wrapper_Res_Description=                ;Description field
#AutoIt3Wrapper_Res_Fileversion=                ;File Version
#AutoIt3Wrapper_Res_FileVersion_AutoIncrement=  ;(Y/N/P) AutoIncrement FileVersion After Aut2EXE is finished. default=N
;                                                 P=Prompt, Will ask at Compilation time if you want to increase the versionnumber
#AutoIt3Wrapper_Res_ProductVersion=             ;Product Version. Default is the AutoIt3 version used.
#AutoIt3Wrapper_Res_Language=                   ;Resource Language code . default 2057=English (United Kingdom)
#AutoIt3Wrapper_Res_LegalCopyright=             ;Copyright field
#AutoIt3Wrapper_res_requestedExecutionLevel=    ;None, asInvoker, highestAvailable or requireAdministrator   (default=None)
#AutoIt3Wrapper_Res_SaveSource=                 ;(Y/N) Save a copy of the Scriptsource in the EXE resources. default=N
; If _Res_SaveSource=Y the content of Scriptsource depends on the _Run_Obfuscator and #obfuscator_parameters directives:
;
;	 If _Run_Obfuscator=Y then
;	    If #obfuscator_parameters=/STRIPONLY then Scriptsource is stripped script & stripped includes
;	    If #obfuscator_parameters=/STRIPONLYINCLUDES then Scriptsource is original script & stripped includes
;	    With any other parameters, the SaveSource directive is ignored as obfuscation is intended to protect the source
; 	 If _Run_Obfuscator=N or is not set then
;    	Scriptsource is original script only
; Autoit3Wrapper indicates the SaveSource action taken in the SciTE console during compilation
; See SciTE4AutoIt3 Helpfile for more detail on Obfuscator parameters
;
;
; free form resource fields ... max 15
;     you can use the following variables:
;     %AutoItVer% which will be replaced with the version of AutoIt3
;     %date% = PC date in short date format
;     %longdate% = PC date in long date format
;     %time% = PC timeformat
;  eg: #AutoIt3Wrapper_Res_Field=AutoIt Version|%AutoItVer%
#AutoIt3Wrapper_Res_Field=                      ;Free format fieldname|fieldvalue
#AutoIt3Wrapper_Res_Field=                      ;Free format fieldname|fieldvalue
#AutoIt3Wrapper_Res_Field=                      ;Free format fieldname|fieldvalue
; Add extra ICO files to the resources which can be used with TraySetIcon(@ScriptFullPath, 5) etc
; list of filename of the Ico files to be added, First one will have number 5, then 6 ..etc
#AutoIt3Wrapper_Res_Icon_Add=                   ; Filename[,LanguageCode] of ICO to be added.
#AutoIt3Wrapper_Res_Icon_Add=                   ; Filename[,LanguageCode] of ICO to be added.
; Add extra files to the resources
#AutoIt3Wrapper_Res_File_Add=                   ; Filename[,Section [,ResName[,LanguageCode]]] to be added.
#AutoIt3Wrapper_Res_File_Add=                   ; Filename[,Section [,ResName[,LanguageCode]]] to be added.
;===============================================================================================================
; Tidy Settings
#AutoIt3Wrapper_Run_Tidy=                       ;(Y/N) Run Tidy before compilation. default=N
#AutoIt3Wrapper_Tidy_Stop_OnError=              ;(Y/N) Continue when only Warnings. default=Y
#Tidy_Parameters=                               ;Tidy Parameters...see SciTE4AutoIt3 Helpfile for options
;===============================================================================================================
; Obfuscator
#AutoIt3Wrapper_Run_Obfuscator=                 ;(Y/N) Run Obfuscator before compilation. default=N
#obfuscator_parameters=
;===============================================================================================================
; AU3Check settings
#AutoIt3Wrapper_Run_AU3Check=                   ;(Y/N) Run au3check before compilation. Default=Y
#AutoIt3Wrapper_AU3Check_Parameters=            ;Au3Check parameters
#AutoIt3Wrapper_AU3Check_Stop_OnWarning=        ;(Y/N) N=Continue on Warnings.(Default) Y=Always stop on Warnings
#AutoIt3Wrapper_PlugIn_Funcs=                   ;Define PlugIn function names separated by a Comma to avoid AU3Check errors
;===============================================================================================================
; cvsWrapper settings
#AutoIt3Wrapper_Run_cvsWrapper=                 ;(Y/N/V) Run cvsWrapper to update the script source. default=N
;                                                 V=only when version is increased by #AutoIt3Wrapper_Res_FileVersion_AutoIncrement.
#AutoIt3Wrapper_cvsWrapper_Parameters=          ; /NoPrompt  : Will skip the cvsComments prompt
;                                                 /Comments  : Text to added in the cvsComments. It can also contain the below variables.
;===============================================================================================================
; RUN BEFORE AND AFTER definitions
; The following directives can contain: these variables
;   %in% , %out%, %icon% which will be replaced by the fullpath\filename.
;   %scriptdir% same as @ScriptDir and %scriptfile% = filename without extension.
;   %fileversion% is the information from the #AutoIt3Wrapper_Res_Fileversion directive
;   %scitedir% will be replaced by the SciTE program directory
;   %autoitdir% will be replaced by the AutoIt3 program directory
#AutoIt3Wrapper_Run_Before=                     ;process to run before compilation - you can have multiple records that will be processed in sequence
#AutoIt3Wrapper_Run_After=                      ;process to run After compilation - you can have multiple records that will be processed in sequence
;===============================================================================================================
; RUN BEFORE AND AFTER definitions
#AutoIt3Wrapper_Add_Constants=                  ;Add the needed standard constant include files. Will only run one time.
#EndRegion

Yashied сказал(а):
Когда я получаю WM-сообщение, то у меня должен всегда быть выбор: либо вызвать умолчальный обработчик для данного окна, т.е. возвращаю $GUI_RUNDEFMSG, либо возвращаю любое другое значение, согласно MSDN для данного сообщения.
Yashied сказал(а):
Любой control (Button, Slider и т.д.) - это "зашитый" в систему элемент с предопределенными свойствами и возможностями. В AutoIt, как и в любом другом ЯП, реализованы далеко не все эти свойства и возможности. Когда с элементом что-то происходит, например ты передвинул бегунок на Slider'е, то он (элемент) информирует об этом программу, посылая ей специальное сообщение - WM_NOTIFY. А с помощью GUIRegisterMsg() мы как раз и отлавливаем это сообщение и предпринимает соответствующие действия. В данном случае изменяем текст в ToolTip'е перед выводом.

Yashied сказал(а):
ЯП низкого уровня - ассемблер. AutoIt находится где-то между высоким и сверхвысоким уровнем.
Yashied сказал(а):
Чем ниже уровень абстракции, тем ниже уровень языка. Возможностей при этом, естественно, больше.

Yashied сказал(а):
Global - объявление глобальных переменных, т.е. эти переменные действительны в любое время и в любом месте кода, в том числе и в функциях. Сохраняются на все время работы кода или до тех пор, пока вы сами их не уничтожите.

Local - объявление локальных переменных. Используется только внутри функций. Такие переменные действительны только внутри той функции, в которой были объявлены, и будут автоматически уничтожены после выхода из этой функции.

Если Local стоит не внутри функции, а в теле основного кода, то это эквивалентно Global, но является плохим стилем написания кода.

Dim - объявление массива. Т.к. массивы могут быть объявлены с помощью Global и Local, то, чтобы избежать путаницы, не рекомендуется использовать Dim там, где можно обойтись без этого.

ReDim - Изменение длины ранее созданного массива. При этом данные, которые находились в массиве сохраняются (если, конечно, длина массива увеличивается, а не уменьшается).
Yashied сказал(а):
В AutoIt все переменные имеют тип Variant, т.е. не имеют постоянного типа. В любой момент можно из массива сделать строку и наоборот. Поэтому, как они будут объявлены в Global или Local не имеет особого значения, это нужно только для инициализации.

Для проверки того или иного типа есть ряд функций типа IsArray(), IsString(), IsInt() и т.д. Если в описании функции сказано, что она возвращает массив, то, если не произошло ошибки, и нужно с этой переменной работать как с массивом.

Kaster сказал(а):
Использование массивов размерностью больше 2 не рекомендуется. всегда нужно искать другие способы реализации алгоритма
Потому как сложность логики алгоритма, как правило, растет как 2^N, где N - размерность массива

Yashied сказал(а):
Я рекомендую использовать хендлы, но в любом случае, индексы иконок задаются следующим образом (в зависимости от знака):

API

"+" - индекс (порядковый номер) иконки в файле, начиная с нуля (0 - первая иконка).
"-" - название ресурса иконки, например "-152" указывает на иконку с идентификатором ресурса 152.

Например, если в ресурсах имеет место быть такая картина (скомпилированный AutoIt скрипт):

99
162
164
169

то, следующие записи индексов для вызова соответствующих API функций будут эквивалентны:

"-99" ~ "0"
"-162" ~ "1"
"-164" ~ "2"
"-169" ~ "3"

Т.е. можно записать или "-99", или "0", разницы не будет. Заметьте, что в большинстве случаев, иконки для "shell32.dll" в реестре задаются не по порядковому номеру, а именно по названию ресурса (знак "-"), т.к. индекс в следующих версиях системных DLL может измениться, а название ресурса, видимо, должно остаться неизменным.

AutoIt

Здесь полная жо**. Положительные числа ("+") означают не индекс, как в API, а названия ресурса иконки. А вот отрицательные ("-") указывают на индекс, причем первая иконка в файле имеет индекс 1, а не 0, как в API. Более того, если указать "-1" (по логике, это должно указывать именно на первую иконку), то ничего хорошего из этого не выйдет. Т.е. первая иконка задается как "0", а все последующие уже "-2", "-3" и т.д.

:Censored:

Предыдущий пример для AutoIt будет выглядеть так:

"99" ~ "0"
"162" ~ "-2"
"164" ~ "-3"
"169" ~ "-4"
 
Статус
Закрыто для дальнейших ответов.
Верх