1

Тема: AutoHotkey versus AutoIT

AutoHotkey - это "ответвление" от проекта AutoIT. Языки отличаются синтаксисом и встроенным набором методов.
AutoIt, в отличие от AutoHotkey, поддерживает Automation (он же COM):

$oExcel = ObjCreate("Excel.Application")                   ; Create an Excel Object
$oExcel.Visible = 1                                        ; Let Excel show itself
$oExcel.WorkBooks.Add                                      ; Add a new workbook
$oExcel.ActiveWorkBook.ActiveSheet.Cells(1,1).Value="test" ; Fill a cell
sleep(4000)                                                ;See the results for 4 seconds
$oExcel.ActiveWorkBook.Saved = 1                           ; Simulate a save of the Workbook
$oExcel.Quit                                               ; Quit Excel

Так же, как и AHK, AutoIt поддерживает вызов функций из DLL:

$result = DllCall("user32.dll", "int", "MessageBox", "hwnd", 0, "str", "Some text", "str", "Some title", "int", 0)

В последних версиях AutoIt (как и в последних версиях AutoHotkey) появилась поддержка CallBack (обратного вызова):

; Create callback function
$handle = DLLCallbackRegister ("_EnumWindowsProc", "int", "hwnd;lparam")     

; Call EnumWindows
DllCall("user32.dll", "int", "EnumWindows", "ptr", DllCallbackGetPtr($handle), "lparam", 10)

; Delete callback function
DllCallbackFree($handle)

; Callback Procedure
Func _EnumWindowsProc($hWnd, $lParam)
    If WinGetTitle($hWnd) <> "" And BitAnd(WinGetState($hWnd), 2) Then
        $res = MsgBox(1, WinGetTitle($hWnd), "$hWnd=" & $hWnd & @CRLF & "lParam=" & $lParam & @CRLF & "$hWnd(type)=" & VarGetType($hWnd))
        If $res = 2 Then Return 0   ; Cancel clicked, return 0 to stop enumeration
    EndIf
    Return 1    ; Return 1 to continue enumeration
EndFunc

Подкорректирована передача по ссылке/по значению в DLL-функции:

Changed: DllCall() new method of passing types by reference using *.
Changed: DllCall(): short_ptr, long_ptr, int_ptr types deprecated. Use short*, long* and int* respectively.
Added: DllCall() now accept doubles, int64, uint64, wparam and lparam types.

Выравнивание структур при передаче:

DllStructCreate() added "align" keyword to set structure alignment

Наконец, в последних версиях в комплекте поставки идёт огромнейшее количество User Defined Function (в исходных кодах AutoIt), заметно облегчающих работу и упрощающих обучение языку.

AutoHotkey гораздо более заточен на работу с клавиатурой: именно в этом его огромное преимущество. Главное, чего ему не хватает - поддержки работы через Automation (COM).

Автор обзора - alexii.

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

2

Re: AutoHotkey versus AutoIT

В AutoIt есть одна возможность задействовать горячие клавиши:

HotKeySet ("key"[, "functionname"])

В UDF присутствует функция:

_IsPressed($sHexKey)

Вот, пожалуй, и всё. Никаких пропусканий хоткеев «сквозь себя», никаких «#IfWinActive/Exists», никаких hotstrings. Ну, и:

The following hotkeys cannot be set:
Ctrl+Alt+Delete It is reserved by Windows
F12 It is also reserved by Windows, according to its API.
NumPad's Enter Key Instead, use {Enter} which captures both Enter keys on the keyboard.
Win+B,D,E,F,L,M,R,U; and Win+Shift+M These are built-in Windows shortcuts. Note: Win+B and Win+L might only be reserved on Windows XP and above.
Alt, Ctrl, Shift, Win These are the modifier keys themselves!
Other Any global hotkeys a user has defined using third-party software, any combos of two or more "base keys" such as '{F1}{F2}', and any keys of the form '{LALT}' or '{ALTDOWN}'.

Автор обзора - alexii.

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