guides:v1_v2_cheat_sheet

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
guides:v1_v2_cheat_sheet [2023-03-21 18:12] – Change most things geekguides:v1_v2_cheat_sheet [2025-01-13 19:37] (current) – [v1→2 Conversion Cheat Sheet] Add auto-converter widget to page geek
Line 1: Line 1:
 ====== v1→2 Conversion Cheat Sheet ====== ====== v1→2 Conversion Cheat Sheet ======
 +
 +===== Converter =====
 +
 +Attempt to convert AHKv1 syntax to AHKv2 using the [[https://www.autohotkey.com/boards/viewtopic.php?f=6&t=25100|AHK-v2-script-converter]] project.
 +
 +<converter>
 +; Requires AutoHotkey v1.1.26+, and the keyboard hook must be installed.
 +#InstallKeybdHook
 +SendSuppressedKeyUp(key) {
 +    DllCall("keybd_event"
 +        , "char", GetKeyVK(key)
 +        , "char", GetKeySC(key)
 +        , "uint", KEYEVENTF_KEYUP := 0x2
 +        , "uptr", KEY_BLOCK_THIS := 0xFFC3D450)
 +}
 +
 +; Disable Alt+key shortcuts for the IME.
 +~LAlt::SendSuppressedKeyUp("LAlt")
 +
 +; Test hotkey:
 +!CapsLock::MsgBox % A_ThisHotkey
 +
 +; Remap CapsLock to LCtrl in a way compatible with IME.
 +*CapsLock::
 +    Send {Blind}{LCtrl DownR}
 +    SendSuppressedKeyUp("LCtrl")
 +    return
 +*CapsLock up::
 +    Send {Blind}{LCtrl Up}
 +    return
 +</converter>
  
 ===== General ===== ===== General =====
Line 8: Line 39:
   - Commands do not support a first comma anymore.\\ Change ❌''Sleep, 1000'' to ✅''Sleep 1000''.   - Commands do not support a first comma anymore.\\ Change ❌''Sleep, 1000'' to ✅''Sleep 1000''.
   - All commands have been turned into functions. Command syntax is just a function call without parentheses (commands can be //any// function, even user defined ones). Consequently, plain text parameters are gone and all parameters are expressions all the time.\\ Change ❌''MsgBox Hello'' to ✅''MsgBox "Hello"'' or ✅''MsgBox("Hello")''   - All commands have been turned into functions. Command syntax is just a function call without parentheses (commands can be //any// function, even user defined ones). Consequently, plain text parameters are gone and all parameters are expressions all the time.\\ Change ❌''MsgBox Hello'' to ✅''MsgBox "Hello"'' or ✅''MsgBox("Hello")''
-  - Memory is reserved using ''Buffer()'' objects not ''VarSetCapacity()''. Buffer is an Object, which always pass by reference, so you don't pass binary data by reference anymore. ''VarSetStrCapcaity()'' exists but //ONLY// for string optimization.\\ Change ❌''VarSetCapacity(var, capacity, fillByte)'' to ✅''var := Buffer(capacity, fillByte)''+  - Memory is reserved using ''Buffer()'' objects not ''VarSetCapacity()''. Buffer is an Object, which always pass by reference, so you don't pass binary data by reference anymore. ''VarSetStrCapacity()'' exists but //ONLY// for string optimization.\\ Change ❌''VarSetCapacity(var, capacity, fillByte)'' to ✅''var := Buffer(capacity, fillByte)''
   - Ampersand (''&'') is no longer the "address of" operator.\\ Change ❌''DllCall(..., "Ptr", &var)'' to ✅''DllCall(..., "Ptr", var)'' (where ''var'' is a ''Buffer'' object)   - Ampersand (''&'') is no longer the "address of" operator.\\ Change ❌''DllCall(..., "Ptr", &var)'' to ✅''DllCall(..., "Ptr", var)'' (where ''var'' is a ''Buffer'' object)
   - Guis are fully object-oriented, distinguished by variable reference not by name.   - Guis are fully object-oriented, distinguished by variable reference not by name.
   - Multi-value expressions return the last value, not the first value.\\ Change ❌''return (varToReturn, tmp := 1234)'' to ✅''return (tmp := 1234, varToReturn)''   - Multi-value expressions return the last value, not the first value.\\ Change ❌''return (varToReturn, tmp := 1234)'' to ✅''return (tmp := 1234, varToReturn)''
-  - Single-quoted strings can contain double text with quotes. Doubling up quote marks no longer escapes quotes.\\ Change ❌''var := "Some ""quoted"" text"'' to ✅''%%var := 'Some "quoted" text'%%'' or ✅''var := "Some `"quoted`" text"''+  - Single-quoted strings can contain text with double quotes. Doubling up quote marks no longer escapes quotes.\\ Change ❌''var := "Some ""quoted"" text"'' to ✅''%%var := 'Some "quoted" text'%%'' or ✅''var := "Some `"quoted`" text"''
   - Hotkeys are now functions. They do not need a ''return''. You //only// need you to specify global variables that you modify. <code AutoHotkey>s:: {   - Hotkeys are now functions. They do not need a ''return''. You //only// need you to specify global variables that you modify. <code AutoHotkey>s:: {
     global varWritable     global varWritable
Line 18: Line 49:
     MsgBox "Bye " (varWritable := "Jeff")     MsgBox "Bye " (varWritable := "Jeff")
 }</code> }</code>
-  - Variables can be ''unset'' (which is a state, not a value). Unset variables throw when read. Unset makes a great default value.\\ Change ❌''MyFunc(param1, param2 := "") {...}'' to ✅''MyFunc(param1, param2 := unset) {...}''\\ Change ❌''if (param2 != "")'' to ✅''if IsSet(param2)''\\ Change ❌''var := [1, , 2]'' to ✅''var := [1, unset, 2]''\\ Change ❌''FunctionCall(required1, required2, , optional2)'' to ✅''FunctionCall(required1, required2, unset, optional2)''\\ Change ❌''var := "" ; Empty the variable'' to ✅''var := Unset'' (unless you need ''var'' to be an empty string)+  - Variables start as ''unset'' (which is a state, not a value). Unset variables throw when read. Unset makes a great default parameter.\\ Change ❌''MyFunc(param1, param2 := "") {...}'' to ✅''MyFunc(param1, param2 := unset) {...}''\\ Change ❌''if (param2 != "")'' to ✅''if IsSet(param2)''\\ Change ❌''var := [1, , 2]'' to ✅''var := [1, unset, 2]''\\ Change ❌''FunctionCall(required1, required2, , optional2)'' to ✅''FunctionCall(required1, required2, unset, optional2)''\\ Change ❌''var := "" ; Empty the variable'' to ✅''var := Unset'' (unless you need ''var'' to be an empty string)
  
 **New Stuff** **New Stuff**