Warning, /frameworks/syntax-highlighting/autotests/folding/highlight.ahk.fold is written in an unsupported language. File is not indexed.

0001 ^j:: ; hotkey label
0002 ::ftw::Free the whales ; hotstring label abbreviation
0003 ::btw:: ; hotstring label action
0004 MsgBox, You typed btw.
0005 Run, notepad.exe  ; Run Notepad when you press CTRL+N.
0006 MsgBox, Wow!
0007 MsgBox, There are
0008 Run, notepad.exe
0009 WinActivate, Untitled - Notepad
0010 WinWaitActive, Untitled - Notepad
0011 Send, 7 lines{!}{Enter}
0012 SendInput, inside the CTRL{+}J hotkey.
0013 return
0014 
0015 Numpad0 & Numpad1::
0016 MsgBox, You pressed Numpad1 while holding down Numpad0.
0017 Run, notepad.exe
0018 return
0019 
0020 ; Untitled - Notepad
0021 #IfWinActive Untitled - Notepad
0022 !q::
0023 MsgBox, You pressed ALT+Q in Notepad.
0024 return
0025 
0026 ; Any window that isn't Untitled - Notepad
0027 #IfWinActive
0028 !q::
0029 MsgBox, You pressed ALT+Q in any window.
0030 return
0031 
0032 ; Retrieve the ID/HWND of the active window
0033 id := WinExist("A")
0034 MsgBox % id
0035 
0036 ; Press Win+↑ to maximize the active window
0037 #Up::WinMaximize, A
0038 
0039 #i::
0040 Run, https://www.google.com/
0041 return
0042 
0043 ^p::
0044 Run, notepad.exe
0045 return
0046 
0047 ~j::
0048 Send, ack
0049 return
0050 
0051 :*:acheiv::achiev
0052 ::achievment::achievement
0053 ::acquaintence::acquaintance
0054 :*:adquir::acquir
0055 ::aquisition::acquisition
0056 :*:agravat::aggravat
0057 :*:allign::align
0058 ::ameria::America
0059 :*:ftw::Free the whales ; Hotstring modifiers
0060 this_is_a_label: ; label
0061 
0062 #IfWinActive Untitled - Notepad
0063 #Space::
0064 MsgBox, You pressed WIN+SPACE in Notepad.
0065 return
0066 
0067 Send, {Ctrl down}c{Ctrl up}
0068 SendInput, [b]{Ctrl down}v{Ctrl up}[/b]
0069 return  ; This ends the hotkey. The code below this point will not get triggered.
0070 
0071 Send, This text has been typed{!}
0072 Send, {a}       ; WRONG
0073 Send, {a}{b}{c} ; WRONG
0074 Send, {abc}     ; WRONG
0075 Send, abc       ; CORRECT
0076 Send, ^s                     ; Both of these send CTRL+S
0077 Send, {Ctrl down}s{Ctrl up}  ; Both of these send CTRL+S
0078 Send, {Ctrl down}c{Ctrl up}
0079 Send, {b down}{b up}
0080 Send, {Tab down}{Tab up}
0081 Send, {Up down}  ; Press down the up-arrow key.
0082 Sleep, 1000      ; Keep it down for one second.
0083 Send, {Up up}    ; Release the up-arrow key.
0084 
0085 Send,
0086 <beginfold id='1'>(</beginfold id='1'>
0087 Line 1
0088 Line 2
0089 Apples are a fruit.
0090 <endfold id='1'>)</endfold id='1'>
0091 
0092 Send %A_Hour%
0093 SubStr(37 * 12, 1, 2)
0094 SubStr(A_Hour - 12, 2)
0095 SubStr(A_AhkPath, InStr(A_AhkPath, "AutoHotkey"))
0096 SubStr("I'm scripting, awesome!", 16)
0097 
0098 SetTitleMatchMode RegEx
0099 WinActivate ahk_exe i)\\notepad\.exe$  ; Match the name part of the full path.
0100 WinActivate ahk_exe im)(*BSR_ANYCRLF)abc\Rxyz
0101 WinActivate ahk_exe im)(*BSR_ANY[^]]CRLF)abc\Rxyz
0102 
0103 if (MyVar = 5)
0104 <beginfold id='2'>{</beginfold id='2'>
0105     MsgBox, MyVar equals %MyVar%!!
0106     ExitApp
0107 <endfold id='2'>}</endfold id='2'>
0108 
0109 MyVar = Text
0110 MyVar = %MyVar2%
0111 MyVar = %MyVar2% some text %MyVar3%.
0112 MyVar := SubStr("I'm scripting, awesome!", 16)
0113 MyVar := "Text"
0114 MyVar := MyVar2
0115 MyVar := 6 + 8 / 3 * 2 - Sqrt(9)
0116 MyVar := "The value of 5 + " MyVar2 " is: " 5 + MyVar2
0117 if (Var1 != Var2)
0118     Var1 := Var2 + 100
0119 
0120 ; Some examples showing when to use percents and when not:
0121 Var = Text  ; Assign some text to a variable (legacy).
0122 Number := 6  ; Assign a number to a variable (expression).
0123 Var2 = %Var%  ; Assign a variable to another (legacy).
0124 Var3 := Var  ; Assign a variable to another (expression).
0125 Var4 .= Var  ; Append a variable to the end of another (expression).
0126 Var5 += Var  ; Add the value of a variable to another (expression).
0127 Var5 -= Var  ; Subtract the value of a variable from another (expression).
0128 Var6 := SubStr(Var, 2, 2)  ; Variable inside a function. This is always an expression.
0129 Var7 = %Var% Text  ; Assigns a variable to another with some extra text (legacy).
0130 Var8 := Var " Text"  ; Assigns a variable to another with some extra text (expression).
0131 MsgBox, %Var%  ; Variable inside a command.
0132 StringSplit, Var, Var, x  ; Variable inside a command that uses InputVar and OutputVar.
0133 if (Number = 6)  ; Whenever an IF has parentheses, it'll be an expression. So no percent signs.
0134 if (Var != Number)  ; Whenever an IF has parentheses, it'll be an expression. So no percent signs.
0135 if Number = 6  ; Without parentheses, the IF is legacy. However, only variables on the 'right side' need percent signs.
0136 if Var1 < %Var2%  ; Without parentheses, the IF is legacy. However, only variables on the 'right side' need percent signs.
0137 
0138 MyObject := ["one", "two", "three", 17]
0139 Banana := <beginfold id='2'>{</beginfold id='2'>"Color": "Yellow", "Taste": "Delicious", "Price": 3<endfold id='2'>}</endfold id='2'>
0140 MyObject := Array("one", "two", "three", 17)
0141 Banana := Object("Color", "Yellow", "Taste", "Delicious", "Price", 3)
0142 Banana["Pickled"] := True ; This banana has been pickled. Eww.
0143 Banana.Consistency := "Mushy"
0144 Value := Banana["Color"]
0145 Value := Banana.Color
0146 MyObject["NewerKey"] := 3.1415
0147 MyObject.NewKey := "Shiny"
0148 MyObject.Push(Value1, Value2, Value3...)
0149 Banana.Consistency := ""
0150 RemovedValue := MyObject.Delete(AnyKey)
0151 NumberOfRemovedKeys := MyObject.Delete(FirstKey, LastKey)
0152 arr := [<beginfold id='2'>{</beginfold id='2'><endfold id='2'>}</endfold id='2'>]  ; Creates an array containing an object.
0153 arr[1] := <beginfold id='2'>{</beginfold id='2'><endfold id='2'>}</endfold id='2'>  ; Creates a second object, implicitly freeing the first object.
0154 arr.RemoveAt(1)  ; Removes and frees the second object.
0155 x := <beginfold id='2'>{</beginfold id='2'><endfold id='2'>}</endfold id='2'>, y := <beginfold id='2'>{</beginfold id='2'><endfold id='2'>}</endfold id='2'>             ; Create two objects.
0156 x.child := y, y.parent := x  ; Create a circular reference.
0157 y.parent := ""
0158 x := "", y := ""
0159 table.base.__Get(table, x)[y] := content   ; A
0160 table.base.__Set(table, x, y, content)     ; B
0161 RemovedValue := MyObject.RemoveAt(Index)
0162 NumberOfRemovedKeys := MyObject.RemoveAt(Index, Length)
0163 val := obj.Property := 42
0164 m1 := new GMem(0, 20)
0165 m2 := <beginfold id='2'>{</beginfold id='2'>base: GMem<endfold id='2'>}</endfold id='2'>.__New(0, 30)
0166 x ? CallIfTrue() : CallIfFalse()
0167 ProductIsAvailable := (Color = "Red")
0168     ? false  ; We don't have any red products, so don't bother calling the function.
0169     : ProductIsAvailableInColor(Product, Color)
0170 MyObject.Pop()
0171 %Var%()
0172 
0173 Sleep MillisecondsToWait
0174 Sleep %MillisecondsToWait%
0175 Sleep % MillisecondsToWait
0176 MsgBox % 1+1  ; Shows "2"
0177 MsgBox   1+1  ; Shows "1+1"
0178 
0179 MsgBox % "This is text."
0180 MsgBox    This is text.
0181 MsgBox %  A_AhkVersion
0182 MsgBox   %A_AhkVersion%
0183 MsgBox % %A_AhkVersion%
0184 MsgBox % "Hello %A_UserName%."  ; Shows "%A_UserName%"
0185 MsgBox    Hello %A_UserName%.   ; Shows your username.
0186 MsgBox % "Hello " . A_UserName . "."  ; Shows your username.
0187 MyVar := "This is text."
0188 MyVar = This is text.
0189 
0190 if (Var1 = Var2)
0191 if Var1 = %Var2%
0192 if (Var1 >= Low and Var1 <= High)
0193 if Var1 between %Low% and %High%
0194 
0195 Format("{:L}{:U}{:T}", input, input, input)
0196 
0197 *#up::MouseMove, 0, -10, 0, R  ; Win+UpArrow hotkey => Move cursor upward
0198 *#Down::MouseMove, 0, 10, 0, R  ; Win+DownArrow => Move cursor downward
0199 *#Left::MouseMove, -10, 0, 0, R  ; Win+LeftArrow => Move cursor to the left
0200 *#Right::MouseMove, 10, 0, 0, R  ; Win+RightArrow => Move cursor to the right
0201 
0202 *<#RCtrl::  ; LeftWin + RightControl => Left-click (hold down Control/Shift to Control-Click or Shift-Click).
0203 SendEvent {Blind}{LButton down}
0204 KeyWait RCtrl  ; Prevents keyboard auto-repeat from repeating the mouse click.
0205 SendEvent {Blind}{LButton up}
0206 return
0207 
0208 *<#AppsKey::  ; LeftWin + AppsKey => Right-click
0209 SendEvent {Blind}{RButton down}
0210 KeyWait AppsKey  ; Prevents keyboard auto-repeat from repeating the mouse click.
0211 SendEvent {Blind}{RButton up}
0212 return
0213 
0214 #Persistent  ; Keep this script running until the user explicitly exits it.
0215 SetTimer, WatchPOV, 5
0216 return
0217 
0218 WatchPOV:
0219 POV := GetKeyState("JoyPOV")  ; Get position of the POV control.
0220 KeyToHoldDownPrev := KeyToHoldDown  ; Prev now holds the key that was down before (if any).
0221 
0222 ; Some joysticks might have a smooth/continous POV rather than one in fixed increments.
0223 ; To support them all, use a range:
0224 if (POV < 0)   ; No angle to report
0225     KeyToHoldDown := ""
0226 else if (POV > 31500)               ; 315 to 360 degrees: Forward
0227     KeyToHoldDown := "Up"
0228 else if POV between 0 and 4500      ; 0 to 45 degrees: Forward
0229     KeyToHoldDown := "Up"
0230 else if POV between 4501 and 13500  ; 45 to 135 degrees: Right
0231     KeyToHoldDown := "Right"
0232 else if POV between 13501 and 22500 ; 135 to 225 degrees: Down
0233     KeyToHoldDown := "Down"
0234 else                                ; 225 to 315 degrees: Left
0235     KeyToHoldDown := "Left"
0236 
0237 if (KeyToHoldDown = KeyToHoldDownPrev)  ; The correct key is already down (or no key is needed).
0238     return  ; Do nothing.
0239 
0240 ; Otherwise, release the previous key and press down the new key:
0241 SetKeyDelay -1  ; Avoid delays between keystrokes.
0242 if KeyToHoldDownPrev   ; There is a previous key to release.
0243     Send, {%KeyToHoldDownPrev% up}  ; Release it.
0244 if KeyToHoldDown   ; There is a key to press down.
0245     Send, {%KeyToHoldDown% down}  ; Press it down.
0246 return
0247 
0248 <^>!m::MsgBox You pressed AltGr+m.
0249 <^<!m::MsgBox You pressed LeftControl+LeftAlt+m.
0250 
0251 AppsKey::ToolTip Press < or > to cycle through windows.
0252 AppsKey Up::ToolTip
0253 ~AppsKey & <::Send !+{Esc}
0254 ~AppsKey & >::Send !{Esc}
0255 
0256 ; Press AppsKey and Alt in any order, then slash (/).
0257 #if GetKeyState("AppsKey", "P")
0258 Alt & /::MsgBox Hotkey activated.
0259 
0260 ; If the keys are swapped, Alt must be pressed first (use one at a time):
0261 #if GetKeyState("Alt", "P")
0262 AppsKey & /::MsgBox Hotkey activated.
0263 
0264 ; [ & ] & \::
0265 #if GetKeyState("[") && GetKeyState("]")
0266 \::MsgBox
0267 
0268 ; Ctrl+Shift+O to open containing folder in Explorer.
0269 ; Ctrl+Shift+E to open folder with current file selected.
0270 ; Supports SciTE and Notepad++.
0271 ^+o::
0272 ^+e::
0273     editor_open_folder() <beginfold id='2'>{</beginfold id='2'>
0274         WinGetTitle, path, A
0275         if RegExMatch(path, "\*?\K(.*)\\[^\\]+(?= [-*] )", path)
0276             if (FileExist(path) && A_ThisHotkey = "^+e")
0277                 Run explorer.exe /select`,"%path%"
0278             else
0279                 Run explorer.exe "%path1%"
0280     <endfold id='2'>}</endfold id='2'>
0281 
0282 #h::  ; Win+H hotkey
0283 ; Get the text currently selected. The clipboard is used instead of
0284 ; "ControlGet Selected" because it works in a greater variety of editors
0285 ; (namely word processors).  Save the current clipboard contents to be
0286 ; restored later. Although this handles only plain text, it seems better
0287 ; than nothing:
0288 AutoTrim Off  ; Retain any leading and trailing whitespace on the clipboard.
0289 ClipboardOld := ClipboardAll
0290 Clipboard := ""  ; Must start off blank for detection to work.
0291 Send ^c
0292 ClipWait 1
0293 if ErrorLevel  ; ClipWait timed out.
0294     return
0295 ; Replace CRLF and/or LF with `n for use in a "send-raw" hotstring:
0296 ; The same is done for any other characters that might otherwise
0297 ; be a problem in raw mode:
0298 StringReplace, Hotstring, Clipboard, ``, ````, All  ; Do this replacement first to avoid interfering with the others below.
0299 StringReplace, Hotstring, Hotstring, `r`n, ``r, All  ; Using `r works better than `n in MS Word, etc.
0300 StringReplace, Hotstring, Hotstring, `n, ``r, All
0301 StringReplace, Hotstring, Hotstring, %A_Tab%, ``t, All
0302 StringReplace, Hotstring, Hotstring, `;, ```;, All
0303 Clipboard := ClipboardOld  ; Restore previous contents of clipboard.
0304 ; This will move the InputBox's caret to a more friendly position:
0305 SetTimer, MoveCaret, 10
0306 if ErrorLevel  ; The user pressed Cancel.
0307     return
0308 if InStr(Hotstring, ":R`:::")
0309 <beginfold id='2'>{</beginfold id='2'>
0310     MsgBox You didn't provide an abbreviation. The hotstring has not been added.
0311     return
0312 <endfold id='2'>}</endfold id='2'>
0313 ; Otherwise, add the hotstring and reload the script:
0314 FileAppend, `n%Hotstring%, %A_ScriptFullPath%  ; Put a `n at the beginning in case file lacks a blank line at its end.
0315 Reload
0316 Sleep 200
0317 MsgBox, 4,, The hotstring just added appears to be improperly formatted.
0318 IfMsgBox, Yes, Edit
0319 return
0320 
0321 MoveCaret:
0322 IfWinNotActive, New Hotstring
0323     return
0324 ; Otherwise, move the InputBox's insertion point to where the user will type the abbreviation.
0325 Send {Home}{Right 3}
0326 SetTimer, MoveCaret, Off
0327 return
0328 
0329 ; This example also demonstrates one way to implement case conformity in a script.
0330 :C:BTW::  ; Typed in all-caps.
0331 :C:Btw::  ; Typed with only the first letter upper-case.
0332 : :btw::  ; Typed in any other combination.
0333     case_conform_btw() <beginfold id='2'>{</beginfold id='2'>
0334         hs := A_ThisHotkey  ; For convenience and in case we're interrupted.
0335         if (hs == ":C:BTW")
0336             Send BY THE WAY
0337         else if (hs == ":C:Btw")
0338             Send By the way
0339         else
0340             Send by the way
0341     <endfold id='2'>}</endfold id='2'>
0342 
0343 #IfWinActive ahk_class Notepad
0344 ::btw::This replacement text will appear only in Notepad.
0345 #IfWinActive
0346 ::btw::This replacement text appears in windows other than Notepad.
0347 
0348 #Hotstring EndChars -()[]{}:;'"/\,.?!`n `t
0349 
0350 Hotstring("EndChars", "-()[]{}:;")
0351 
0352 ::btw::
0353 MsgBox You typed "``btw``".
0354 return
0355 
0356 :*:]d::  ; This hotstring replaces "]d" with the current date and time via the commands below.
0357 
0358 MyFunction(FirstParameter, Second, ByRef Third, Fourth:="")
0359 <beginfold id='2'>{</beginfold id='2'>
0360     return "a value"
0361 <endfold id='2'>}</endfold id='2'>
0362 
0363 Loop 3
0364     MsgBox % MyArray%A_Index%
0365 
0366 SysGet, WA, MonitorWorkArea
0367 MsgBox, Left: %WALeft% -- Top: %WATop% -- Right: %WARight% -- Bottom: %WABottom%.
0368 
0369 n := 123 00123 -1.  0x7B 0x007B -0x1  3.14159
0370 
0371 FileAppend,   ; Comment.
0372 ; Comment.
0373 ( LTrim Join    ; Comment.
0374      ; This is not a comment; it is literal. Include the word Comments in the line above to make it a comment.
0375 ), C:\File.txt   ; Comment.
0376 
0377 param := %A_Index%  ; Fetch the contents of the variable whose name is contained in A_Index.
0378 
0379 Add(X, Y, Z:=0) <beginfold id='2'>{</beginfold id='2'>
0380     return X + Y + Z
0381 <endfold id='2'>}</endfold id='2'>
0382 
0383 Join(sep, params*) <beginfold id='2'>{</beginfold id='2'>
0384     for index,param in params
0385         str .= param . sep
0386     return SubStr(str, 1, -StrLen(sep))
0387 <endfold id='2'>}</endfold id='2'>
0388 MsgBox % Join("`n", "one", "two", "three")
0389 
0390 LogToFile(TextToLog)
0391 <beginfold id='2'>{</beginfold id='2'>
0392     global LogFileName  ; This global variable was previously given a value somewhere outside this function.
0393     FileAppend, %TextToLog%`n, %LogFileName%
0394 <endfold id='2'>}</endfold id='2'>
0395 
0396 SetDefaults()
0397 <beginfold id='2'>{</beginfold id='2'>
0398     global
0399     MyGlobal := 33
0400     local x, y:=0, z
0401 <endfold id='2'>}</endfold id='2'>
0402 
0403 LogToFile(TextToLog)
0404 <beginfold id='2'>{</beginfold id='2'>
0405     static LoggedLines := 0
0406     LoggedLines += 1
0407     global LogFileName
0408     FileAppend, %LoggedLines%: %TextToLog%`n, %LogFileName%
0409 <endfold id='2'>}</endfold id='2'>
0410 
0411 GetFromStaticArray(WhichItemNumber)
0412 <beginfold id='2'>{</beginfold id='2'>
0413     static
0414     static FirstCallToUs := true
0415     if FirstCallToUs
0416     <beginfold id='2'>{</beginfold id='2'>
0417         FirstCallToUs := false
0418         Loop 10
0419             StaticArray%A_Index% := "Value #" . A_Index
0420     <endfold id='2'>}</endfold id='2'>
0421     return StaticArray%WhichItemNumber%
0422 <endfold id='2'>}</endfold id='2'>
0423 
0424 if (ColorName != "" AND not FindColor(ColorName))
0425     MsgBox %ColorName% could not be found.
0426 
0427 class baseObject {
0428     static foo := "bar"
0429 }
0430 baseObject := <beginfold id='2'>{</beginfold id='2'>foo: "bar"<endfold id='2'>}</endfold id='2'>
0431 
0432 thing := <beginfold id='2'>{</beginfold id='2'><endfold id='2'>}</endfold id='2'>
0433 thing.foo := "bar"
0434 thing.test := Func("thing_test")
0435 thing.test()
0436 
0437 thing_test(this) <beginfold id='2'>{</beginfold id='2'>
0438     MsgBox % this.foo
0439 <endfold id='2'>}</endfold id='2'>
0440 
0441 class Color
0442 <beginfold id='2'>{</beginfold id='2'>
0443     __New(aRGB)
0444     <beginfold id='2'>{</beginfold id='2'>
0445         this.RGB := aRGB
0446     <endfold id='2'>}</endfold id='2'>
0447 
0448     __Delete()
0449     <beginfold id='2'>{</beginfold id='2'>
0450         MsgBox % "Delete Color."
0451     <endfold id='2'>}</endfold id='2'>
0452 
0453     static Shift := <beginfold id='2'>{</beginfold id='2'>R:16, G:8, B:0<endfold id='2'>}</endfold id='2'>
0454 
0455     __Get(aName)
0456     <beginfold id='2'>{</beginfold id='2'>
0457         ; NOTE: Using this.Shift here would cause an infinite loop!
0458         shift := Color.Shift[aName]  ; Get the number of bits to shift.
0459         if (shift != "")  ; Is it a known property?
0460             return (this.RGB >> shift) & 0xff
0461         ; NOTE: Using 'return' here would break this.RGB.
0462     <endfold id='2'>}</endfold id='2'>
0463 
0464     __Set(aName, aValue)
0465     <beginfold id='2'>{</beginfold id='2'>
0466         if ((shift := Color.Shift[aName]) != "")
0467         <beginfold id='2'>{</beginfold id='2'>
0468             aValue &= 255  ; Truncate it to the proper range.
0469 
0470             ; Calculate and store the new RGB value.
0471             this.RGB := (aValue << shift) | (this.RGB & ~(0xff << shift))
0472 
0473             ; 'Return' must be used to indicate a new key-value pair should not be created.
0474             ; This also defines what will be stored in the 'x' in 'x := clr[name] := val':
0475             return aValue
0476         <endfold id='2'>}</endfold id='2'>
0477         ; NOTE: Using 'return' here would break this.stored_RGB and this.RGB.
0478     <endfold id='2'>}</endfold id='2'>
0479 
0480     ; Meta-functions can be mixed with properties:
0481     RGB <beginfold id='2'>{</beginfold id='2'>
0482         get <beginfold id='2'>{</beginfold id='2'>
0483             ; Return it in hex format:
0484             return format("0x{:06x}", this.stored_RGB)
0485         <endfold id='2'>}</endfold id='2'>
0486         set <beginfold id='2'>{</beginfold id='2'>
0487             return this.stored_RGB := value
0488         <endfold id='2'>}</endfold id='2'>
0489     <endfold id='2'>}</endfold id='2'>
0490 
0491     class __Get extends Properties
0492     <beginfold id='2'>{</beginfold id='2'>
0493         R() <beginfold id='2'>{</beginfold id='2'>
0494             return (this.RGB >> 16) & 255
0495         <endfold id='2'>}</endfold id='2'>
0496         G() <beginfold id='2'>{</beginfold id='2'>
0497             return (this.RGB >> 8) & 255
0498         <endfold id='2'>}</endfold id='2'>
0499         B() <beginfold id='2'>{</beginfold id='2'>
0500             return this.RGB & 255
0501         <endfold id='2'>}</endfold id='2'>
0502     <endfold id='2'>}</endfold id='2'>
0503 
0504     Property[]  ; Brackets are optional
0505     <beginfold id='2'>{</beginfold id='2'>
0506         get <beginfold id='2'>{</beginfold id='2'>
0507             return ...
0508         <endfold id='2'>}</endfold id='2'>
0509         set <beginfold id='2'>{</beginfold id='2'>
0510             return ... := value
0511         <endfold id='2'>}</endfold id='2'>
0512     <endfold id='2'>}</endfold id='2'>
0513 <endfold id='2'>}</endfold id='2'>
0514 
0515 class Properties extends FunctionObject
0516 <beginfold id='2'>{</beginfold id='2'>
0517     Call(aTarget, aName, aParams*)
0518     <beginfold id='2'>{</beginfold id='2'>
0519         ; If this Properties object contains a definition for this half-property, call it.
0520         if ObjHasKey(this, aName)
0521             return this[aName].Call(aTarget, aParams*)
0522     <endfold id='2'>}</endfold id='2'>
0523 <endfold id='2'>}</endfold id='2'>
0524 
0525 MyGet(this, Key, Key2)
0526 MySet(this, Key, Key2, Value)
0527 MyCall(this, Name, Params)
0528 
0529 ClassName := <beginfold id='2'>{</beginfold id='2'> __Get: Func("MyGet"), __Set: Func("MySet"), __Call: Func("MyCall") <endfold id='2'>}</endfold id='2'>
0530 
0531 red  := new Color(0xff0000), red.R -= 5
0532 cyan := new Color(0), cyan.G := 255, cyan.B := 255
0533 
0534 MsgBox % "red: " red.R "," red.G "," red.B " = " red.RGB
0535 MsgBox % "cyan: " cyan.R "," cyan.G "," cyan.B " = " cyan.RGB
0536 
0537 ; This example requires the FunctionObject class in order to work.
0538 blue := new Color(0x0000ff)
0539 MsgBox % blue.R "," blue.G "," blue.B
0540 
0541 x := <beginfold id='2'>{</beginfold id='2'>base: <beginfold id='2'>{</beginfold id='2'>addr: Func("x_Addr"), __Set: Func("x_Setter")<endfold id='2'>}</endfold id='2'><endfold id='2'>}</endfold id='2'>
0542 
0543 ; Assign value, implicitly calling x_Setter to create sub-objects.
0544 x[1,2,3] := "..."
0545 
0546 ; Retrieve value and call example method.
0547 MsgBox % x[1,2,3] "`n" x.addr() "`n" x[1].addr() "`n" x[1,2].addr()
0548 
0549 x_Setter(x, p1, p2, p3) <beginfold id='2'>{</beginfold id='2'>
0550     x[p1] := new x.base
0551 <endfold id='2'>}</endfold id='2'>
0552 
0553 x_Addr(x) <beginfold id='2'>{</beginfold id='2'>
0554     return &x
0555 <endfold id='2'>}</endfold id='2'>
0556 
0557 InputBox, OutputVar, Question 1, What is your first name?
0558 if (OutputVar = "Bill")
0559     MsgBox, That's an awesome name`, %OutputVar%.
0560 
0561 InputBox, OutputVar2, Question 2, Do you like AutoHotkey?
0562 if (OutputVar2 = "yes")
0563     MsgBox, Thank you for answering %OutputVar2%`, %OutputVar%! We will become great friends.
0564 else
0565     MsgBox, %OutputVar%`, That makes me sad.
0566 
0567 MsgBox, 4,, Would you like to continue?
0568 IfMsgBox, No
0569     return  ; If No, stop the code from going further.
0570 MsgBox, You pressed YES.  ; Otherwise, the user picked yes.
0571 
0572 if (car = "old")
0573 <beginfold id='2'>{</beginfold id='2'>
0574     MsgBox, The car is really old.
0575     if (wheels = "flat")
0576     <beginfold id='2'>{</beginfold id='2'>
0577         MsgBox, This car is not safe to drive.
0578         return
0579     <endfold id='2'>}</endfold id='2'>
0580     else
0581     <beginfold id='2'>{</beginfold id='2'>
0582         MsgBox, Be careful! This old car will be dangerous to drive.
0583     <endfold id='2'>}</endfold id='2'>
0584 <endfold id='2'>}</endfold id='2'>
0585 else
0586 <beginfold id='2'>{</beginfold id='2'>
0587     MsgBox, My`, what a shiny new vehicle you have there.
0588 <endfold id='2'>}</endfold id='2'>
0589 
0590 if (Color = "Red" or Color = "Green"  or Color = "Blue"   ; Comment.
0591     or Color = "Black" or Color = "Gray" or Color = "White")   ; Comment.
0592     and ProductIsAvailableInColor(Product, Color)   ; Comment.
0593 
0594 if (codepage != "")
0595     codepage := " /CP" . codepage
0596 cmd="%A_AhkPath%"%codepage% "`%1" `%*
0597 key=AutoHotkeyScript\Shell\Open\Command
0598 if A_IsAdmin    ; Set for all users.
0599     RegWrite, REG_SZ, HKCR, %key%,, %cmd%
0600 else            ; Set for current user only.
0601     RegWrite, REG_SZ, HKCU, Software\Classes\%key%,, %cmd%
0602 
0603 ^j:: ; hotkey label
0604 MsgBox, You typed btw.