au3 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,99 @@
1
+ #Encoding: UTF-8
2
+ #This file is part of au3.
3
+ #Copyright © 2009 Marvin Gülker
4
+ #
5
+ #au3 is published under the same terms as Ruby.
6
+ #See http://www.ruby-lang.org/en/LICENSE.txt
7
+
8
+ module AutoItX3
9
+
10
+ class << self
11
+
12
+ #====Arguments
13
+ #Every | is ment to be a backslash.
14
+ #- device: The device letter to map the drive to, in the form <tt>"X:"</tt>. If this is an asterisk *, the next available letter will be used.
15
+ #- remote_share: The address of the network drive, in the form <tt>"||Server|Drive"</tt> or <tt>"||Server|Share"</tt>.
16
+ #- flags (0): A combination (via +) of 1 (PersistantMapping) and 8 (Show authentification dialog if neccessary).
17
+ #- username (""): The username, of the form <tt>"username"</tt> or <tt>"Domain|username"</tt>.
18
+ #- password (""): The login password.
19
+ #====Description
20
+ #Maps a network drive and raises an Au3Error if the action is not successful.
21
+ def add_drive_map(device, remote_share, flags = 0, username = "", password = "")
22
+ @functions[__method__] ||= AU3_Function.new("DriveMapAdd", 'SSLSSPI')
23
+ buffer = " " * BUFFER_SIZE
24
+ buffer.wide!
25
+ @functions[__method__].call(device, remote_share, flags, username, password, buffer, buffer.size - 1)
26
+
27
+ case last_error
28
+ when 1 then raise(Au3Error, "Unknown error occured while mapping network drive!")
29
+ when 2 then raise(Au3Error, "Access denied!")
30
+ when 3 then raise(Au3Error, "Device '#{device}' is already assigned!")
31
+ when 4 then raise(Au3Error, "Invalid device name '#{device}'!")
32
+ when 5 then raise(Au3Error, "Invalid remote share '#{remote_share}'!")
33
+ when 6 then raise(Au3Error, "The password is incorrect!")
34
+ else return buffer.normal.strip
35
+ end
36
+ end
37
+
38
+ #Disconnects a network drive. +device+ can be either of form <tt>"X:"</tt> or
39
+ #<tt>"||Server|share"</tt> (imagine every | to be a backslash).
40
+ #Raises an Au3Error if the disconnection was unsucsessful.
41
+ def delete_drive_map(device)
42
+ @functions[__method__] ||= AU3_Function.new("DriveMapDel", 'S', 'L')
43
+ result = @functions[__method__].call(device)
44
+ if result == 0
45
+ raise(Au3Error, "Failed to remove remote device '#{device}'!")
46
+ end
47
+ true
48
+ end
49
+
50
+ #Gets the server of the network drive named by +device+ or raises an Au3Error if it
51
+ #can't access the device for some reason. The returned string will be of form
52
+ #<tt>"||Server|drive"</tt> (every | is ment to be a backslash).
53
+ def get_drive_map(device)
54
+ @functions[__method__] ||= AU3_Function.new("DriveMapGet", 'SPI')
55
+ buffer = " " * BUFFER_SIZE
56
+ buffer.wide!
57
+ ret = @functions[__method__].call(device, buffer, buffer.size - 1)
58
+
59
+ if last_error == 1
60
+ raise(Au3Error, "Failed to retrieve information about device '#{device}'")
61
+ end
62
+ buffer.normal.strip
63
+ end
64
+
65
+ #Deletes a key-value pair in a standard <tt>.ini</tt> file.
66
+ def delete_ini_entry(filename, section, key)
67
+ @functions[__method__] ||= AU3_Function.new("IniDelete", 'SSS', 'L')
68
+ if @functions[__method__].call(filename.wide, section.wide, key.wide) == 0
69
+ false
70
+ else
71
+ true
72
+ end
73
+ end
74
+
75
+ #Reads a value from a standard <tt>.ini</tt> file or returns the string given by +default+
76
+ #if it can't find the key. The returned string will have a maximum length of 99,999 characters.
77
+ def read_ini_entry(filename, section, key, default = nil)
78
+ @functions[__method__] ||= AU3_Function.new("IniRead", 'SSSSPI')
79
+ buffer = " " * BUFFER_SIZE
80
+ buffer.wide!
81
+ @functions[__method__].call(filename.wide, section.wide, key.wide, default.to_s.wide, buffer, buffer.size - 1)
82
+ buffer.normal.strip
83
+ end
84
+
85
+ #Writes the specified key-value pair in a <tt>.ini</tt> file. Existing key-value pairs are overwritten.
86
+ #A non-existing file will be created. Raises an Au3Error if +filename+ is read-only.
87
+ def write_ini_entry(filename, section, key_value, value)
88
+ @functions[__method__] ||= AU3_Function.new("IniWrite", 'SSSS', 'L')
89
+
90
+ if @functions[__method__].call(filename.wide, section.wide, key_value.wide, value.wide) == 0
91
+ raise(Au3Error, "Cannot open file for write access!")
92
+ else
93
+ value
94
+ end
95
+ end
96
+
97
+ end #au3single
98
+
99
+ end #AutoItX3
@@ -0,0 +1,32 @@
1
+ #Encoding: UTF-8
2
+ #This file is part of au3.
3
+ #Copyright © 2009 Marvin Gülker
4
+ #
5
+ #au3 is published under the same terms as Ruby.
6
+ #See http://www.ruby-lang.org/en/LICENSE.txt
7
+
8
+ module AutoItX3
9
+
10
+ class << self
11
+
12
+ #Computes a checksum of the pixels in the specified region. If the checksum
13
+ #changes, that only indidcates that *something* has changed, not *what*.
14
+ #Note that this method may be very time-consuming, so think about increasing the
15
+ #+step+ parameter (but bear in mind that that will generate more inaccurate checksums).
16
+ def pixel_checksum(x1, y1, x2, y2, step = 1)
17
+ @functions[__method__] ||= AU3_Function.new("PixelChecksum", 'LLLLL', 'L')
18
+ @functions[__method__].call(x1, y1, x2, y2, step)
19
+ end
20
+
21
+ #Retrieves the *decimal* color value of a pixel. If you want the hexadecimal,
22
+ #pass in true as a third parameter.
23
+ def get_pixel_color(x, y, hex = false)
24
+ @functions[__method__] ||= AU3_Function.new("PixelGetColor", 'LL', 'L')
25
+ res = @functions[__method__].call(x, y)
26
+ return "#" + res.to_s(16).upcase if hex
27
+ res
28
+ end
29
+
30
+ end
31
+
32
+ end
@@ -0,0 +1,166 @@
1
+ #Encoding: UTF-8
2
+ #This file is part of au3.
3
+ #Copyright © 2009 Marvin Gülker
4
+ #
5
+ #au3 is published under the same terms as Ruby.
6
+ #See http://www.ruby-lang.org/en/LICENSE.txt
7
+
8
+ module AutoItX3
9
+
10
+ class << self
11
+
12
+ #Simulates the given keystrokes. If you don't
13
+ #set +flag+ to true (which disables escape sequences), you may
14
+ #use some of the follwing escape sequences in braces { and }
15
+ #(copied from the AutoItX3 help):
16
+ # Escape sequence | Resulting keypress
17
+ # ====================+============================================================
18
+ # ! | !
19
+ # --------------------+------------------------------------------------------------
20
+ # # | #
21
+ # --------------------+------------------------------------------------------------
22
+ # + | +
23
+ # --------------------+------------------------------------------------------------
24
+ # ^ | ^
25
+ # --------------------+------------------------------------------------------------
26
+ # { | {
27
+ # --------------------+------------------------------------------------------------
28
+ # } | }
29
+ # --------------------+------------------------------------------------------------
30
+ # SPACE | SPACE
31
+ # --------------------+------------------------------------------------------------
32
+ # ENTER | Return on the main keyboard
33
+ # --------------------+------------------------------------------------------------
34
+ # ALT | Alt
35
+ # --------------------+------------------------------------------------------------
36
+ # BACKSPACE or BS | Backspace
37
+ # --------------------+------------------------------------------------------------
38
+ # DELETE or DEL | Del
39
+ # --------------------+------------------------------------------------------------
40
+ # UP | Up arrow
41
+ # --------------------+------------------------------------------------------------
42
+ # DOWN | Down arrow
43
+ # --------------------+------------------------------------------------------------
44
+ # LEFT | Left arrow
45
+ # --------------------+------------------------------------------------------------
46
+ # RIGHT | Right arrow
47
+ # --------------------+------------------------------------------------------------
48
+ # HOME | Home
49
+ # --------------------+------------------------------------------------------------
50
+ # END | End
51
+ # --------------------+------------------------------------------------------------
52
+ # ESCAPE or ESC | ESC
53
+ # --------------------+------------------------------------------------------------
54
+ # INSERT or INS | Ins
55
+ # --------------------+------------------------------------------------------------
56
+ # PGUP | Page Up
57
+ # --------------------+------------------------------------------------------------
58
+ # PGDN | Page Down
59
+ # --------------------+------------------------------------------------------------
60
+ # F1 - F12 | Function keys 1 to 12
61
+ # --------------------+------------------------------------------------------------
62
+ # TAB | Tab
63
+ # --------------------+------------------------------------------------------------
64
+ # PRINTSCREEN | Printscreen
65
+ # --------------------+------------------------------------------------------------
66
+ # LWIN | Left Windows key
67
+ # --------------------+------------------------------------------------------------
68
+ # RWIN | Right Windows key
69
+ # --------------------+------------------------------------------------------------
70
+ # NUMLOCK on | NumLock on
71
+ # --------------------+------------------------------------------------------------
72
+ # CAPSLOCK off | CapsLock off
73
+ # --------------------+------------------------------------------------------------
74
+ # SCROLLLOCK toggle | ScrollLock toggle
75
+ # --------------------+------------------------------------------------------------
76
+ # BREAK | For CTRL-Break processing
77
+ # --------------------+------------------------------------------------------------
78
+ # PAUSE | Pause
79
+ # --------------------+------------------------------------------------------------
80
+ # NUMPAD0 - NUMPAD9 | Numpad number keys.
81
+ # --------------------+------------------------------------------------------------
82
+ # NUMPADMUTLT | Numpad Multipy
83
+ # --------------------+------------------------------------------------------------
84
+ # NUMPADADD | Numpad Add
85
+ # --------------------+------------------------------------------------------------
86
+ # NUMPADSUBT | Numpad Subtract
87
+ # --------------------+------------------------------------------------------------
88
+ # NUMPADDIV | Numpad Division
89
+ # --------------------+------------------------------------------------------------
90
+ # NUMPADDOT | Numpad dot
91
+ # --------------------+------------------------------------------------------------
92
+ # NUMPADENTER | Numpad return key
93
+ # --------------------+------------------------------------------------------------
94
+ # APPSKEY | Windows App key
95
+ # --------------------+------------------------------------------------------------
96
+ # LALT | Left Alt key
97
+ # --------------------+------------------------------------------------------------
98
+ # RALT | Right Alt key
99
+ # --------------------+------------------------------------------------------------
100
+ # LCTRL | Left control key
101
+ # --------------------+------------------------------------------------------------
102
+ # LSHIFT | Left Shift key
103
+ # --------------------+------------------------------------------------------------
104
+ # RSHIFT | Right Shift key
105
+ # --------------------+------------------------------------------------------------
106
+ # SLEEP | Computer Sleep key
107
+ # --------------------+------------------------------------------------------------
108
+ # ALTDOWN | Hold Alt down until ALTUP is sent
109
+ # --------------------+------------------------------------------------------------
110
+ # SHIFTDOWN | Hold Shift down until SHIFTUP is sent
111
+ # --------------------+------------------------------------------------------------
112
+ # CTRLDOWN | Hold CTRL down until CTRLUP is sent
113
+ # --------------------+------------------------------------------------------------
114
+ # LWINDOWN | Hold the left Windows key down until LWDINUP is sent
115
+ # --------------------+------------------------------------------------------------
116
+ # RWINDOWN | Hold the right Windows key down until RWINUP is sent
117
+ # --------------------+------------------------------------------------------------
118
+ # ASC nnnn | Send the kombination Alt+nnnn on numpad
119
+ # --------------------+------------------------------------------------------------
120
+ # BROWSER_BACK | 2000/XP Only: Select the browser "back" button
121
+ # --------------------+------------------------------------------------------------
122
+ # BROWSER_FORWARD | 2000/XP Only: Select the browser "forward" button
123
+ # --------------------+------------------------------------------------------------
124
+ # BROWSER_REFRESH | 2000/XP Only: Select the browser "refresh" button
125
+ # --------------------+------------------------------------------------------------
126
+ # BROWSER_STOP | 2000/XP Only: Select the browser "stop" button
127
+ # --------------------+------------------------------------------------------------
128
+ # BROWSER_SEARCH | 2000/XP Only: Select the browser "search" button
129
+ # --------------------+------------------------------------------------------------
130
+ # BROWSER_FAVORITES | 2000/XP Only: Select the browser "favorites" button
131
+ # --------------------+------------------------------------------------------------
132
+ # BROWSER_HOME | 2000/XP Only: Launch the browser and go to the home page
133
+ # --------------------+------------------------------------------------------------
134
+ # VOLUME_MUTE | 2000/XP Only: Mute the volume
135
+ # --------------------+------------------------------------------------------------
136
+ # VOLUME_DOWN | 2000/XP Only: Reduce the volume
137
+ # --------------------+------------------------------------------------------------
138
+ # VOLUME_UP | 2000/XP Only: Increase the volume
139
+ # --------------------+------------------------------------------------------------
140
+ # MEDIA_NEXT | 2000/XP Only: Select next track in media player
141
+ # --------------------+------------------------------------------------------------
142
+ # MEDIA_PREV | 2000/XP Only: Select previous track in media player
143
+ # --------------------+------------------------------------------------------------
144
+ # MEDIA_STOP | 2000/XP Only: Stop media player
145
+ # --------------------+------------------------------------------------------------
146
+ # MEDIA_PLAY_PAUSE | 2000/XP Only: Play/pause media player
147
+ # --------------------+------------------------------------------------------------
148
+ # LAUNCH_MAIL | 2000/XP Only: Launch the email application
149
+ # --------------------+------------------------------------------------------------
150
+ # LAUNCH_MEDIA | 2000/XP Only: Launch media player
151
+ # --------------------+------------------------------------------------------------
152
+ # LAUNCH_APP1 | 2000/XP Only: Launch user app1
153
+ # --------------------+------------------------------------------------------------
154
+ # LAUNCH_APP2 | 2000/XP Only: Launch user app2
155
+ #
156
+ #A "!" in +keys+ indicates an ALT keystroke,
157
+ #the "+" means SHIFT, "^" CTRL
158
+ #and "#" is the Windows key.
159
+ def send_keys(keys, flag = false)
160
+ @functions[__method__] ||= AU3_Function.new("Send", 'SL')
161
+ @functions[__method__].call(keys.wide, flag)
162
+ end
163
+
164
+ end
165
+
166
+ end
@@ -0,0 +1,105 @@
1
+ #Encoding: UTF-8
2
+ #This file is part of au3.
3
+ #Copyright © 2009 Marvin Gülker
4
+ #
5
+ #au3 is published under the same terms as Ruby.
6
+ #See http://www.ruby-lang.org/en/LICENSE.txt
7
+
8
+ module AutoItX3
9
+
10
+ class << self
11
+
12
+ #Blocks user input or enables it (but the user can gain back control by
13
+ #pressing [CTRL] + [ALT] + [DEL]). In older versions of Windows,
14
+ #AutoIt may also be blocked. Does not work with Windows Vista.
15
+ def block_input=(val)
16
+ @functions[__method__] ||= AU3_Function.new("BlockInput", 'L')
17
+ @functions[__method__].call(!!val)
18
+ @input_blocked = !!val
19
+ end
20
+
21
+ #Returns wheather or not input is blocked by AutoItX3.
22
+ def input_blocked?
23
+ @input_blocked ||= false
24
+ end
25
+
26
+ #Opens the cd drive named in +drive+. +drive+ should be of form
27
+ #<tt>"X:"</tt>. The cd tray must be local at this computer, remote drives
28
+ #cannot be accessed.
29
+ def open_cd_tray(tray)
30
+ @functions[__method__] ||= AU3_Function.new("CDTray", 'SS', 'L')
31
+ raise(ArgumentError, "The drive name has to be of form 'X:'!") unless tray =~ /^\w:$/
32
+ if @functions[__method__].call(tray.wide, "open".wide) == 0
33
+ return false
34
+ else
35
+ return true
36
+ end
37
+ end
38
+
39
+ #Closes a cd tray. +drive+ should be of form <tt>"X:"</tt>. The cd tray must
40
+ #be local at this computer, remote drives cannot be accessed.
41
+ #The method may return true if +drive+ is a laptop drive which can only be
42
+ #closed manually.
43
+ def close_cd_tray(tray)
44
+ @functions[__method__] ||= AU3_Function.new("CDTray", 'SS', 'L')
45
+ raise(ArgumentError, "The drive name has to be of form 'X:'!") unless tray =~ /^\w:$/
46
+ if @functions[__method__].call(tray.wide, "closed".wide) == 0
47
+ return false
48
+ else
49
+ return true
50
+ end
51
+ end
52
+
53
+ #Determines wheather the current user has administrator privileges.
54
+ def is_admin?
55
+ @functions[__method__] ||= AU3_Function.new("IsAdmin", 'V', 'L')
56
+ return false if @functions[__method__].call == 0
57
+ true
58
+ end
59
+
60
+ #Writes +text+ to the Windows clipboard.
61
+ #You can't write NUL characters to the clipboard, the text will
62
+ #be terminated.
63
+ def cliptext=(text)
64
+ @functions[__method__] ||= AU3_Function.new("ClipPut", 'S')
65
+ @functions[__method__].call(text.wide)
66
+ text
67
+ end
68
+
69
+ #Returns the text saved in the clipboard. It will be truncated at the 99,999th character or
70
+ #at a NUL char.
71
+ def cliptext
72
+ @functions[__method__] ||= AU3_Function.new("ClipGet", 'PL')
73
+ cliptext = " " * BUFFER_SIZE
74
+ cliptext.wide!
75
+ @functions[__method__].call(cliptext, cliptext.size - 1)
76
+ cliptext.normal.strip
77
+ end
78
+
79
+ #call-seq:
80
+ # tool_tip( text [, x = INTDEFAULT [, y = INTDEFAULT ] ] ) ==> nil
81
+ # tooltip( text [, x = INTDEFAULT [, y = INTDEFAULT ] ] ) ==> nil
82
+ #
83
+ #Displays a tooltip at the given position. If +x+ and +y+ are ommited,
84
+ #the tooltip will be displayed at the current cursor position. Coordinates
85
+ #out of range are automatically corrected.
86
+ #The tooltip will be deleted when the program ends, or after a system-dependent
87
+ #timeout.
88
+ def tool_tip(text, x = INTDEFAULT, y = INTDEFAULT)
89
+ @functions[__method__] ||= AU3_Function.new("ToolTip", 'SLL')
90
+ @functions[__method__].call(text.wide, x, y)
91
+ end
92
+ alias tooltip tool_tip
93
+
94
+ #Wait for the specified amount of milliseconds. In AutoIt, this function is named
95
+ #"Sleep", but to avoid compatibility issues with Ruby's own sleep I decided to
96
+ #name the function "msleep" (the "m" indicates "milli"). If you wish to name it
97
+ #"sleep", simply define an alias.
98
+ def msleep(msecs)
99
+ @functions[__method__] ||= AU3_Function.new("Sleep", 'L')
100
+ @functions[__method__].call(msecs)
101
+ end
102
+
103
+ end #au3single
104
+
105
+ end #AutoItX3
@@ -0,0 +1,130 @@
1
+ #Encoding: UTF-8
2
+ #This file is part of au3.
3
+ #Copyright © 2009 Marvin Gülker
4
+ #
5
+ #au3 is published under the same terms as Ruby.
6
+ #See http://www.ruby-lang.org/en/LICENSE.txt
7
+
8
+ module AutoItX3
9
+
10
+ #Unknown cursor icon
11
+ UNKNOWN_CURSOR = 0
12
+ #Application starting cursor (arrow with a hourglass next to it)
13
+ APP_STARTING_CURSOR = 1
14
+ #The normal cursor
15
+ ARROW_CURSOR = 2
16
+ #Cross cursor
17
+ CROSS_CURSOR = 3
18
+ #Cursor with a question mark next to it
19
+ HELP_CURSOR = 4
20
+ #Cursor for editing lines of text
21
+ IBEAM_CURSOR = 5
22
+ ICON_CURSOR = 6
23
+ #Cursor for forbidden actions (a circle with a strike through it)
24
+ NO_CURSOR = 7
25
+ SIZE_CURSOR = 8
26
+ SIZE_ALL_CURSOR = 9
27
+ SIZE_NESW_CURSOR = 10
28
+ SIZE_NS_CURSOR = 11
29
+ SIZE_NWSE_CURSOR = 12
30
+ SIZE_WE_CURSOR = 13
31
+ UP_ARROW_CURSOR = 14
32
+ #Wait (the well-known "hourglass")
33
+ WAIT_CURSOR = 15
34
+
35
+ class << self
36
+
37
+ #====Arguments
38
+ #- x (INTDEFAULT): The X position. The cursor's current X if not specified.
39
+ #- y (INTDEFAULT): The Y position. The cursor's current Y if not specified.
40
+ #- button("Primary"): The mouse button to click width. On a mouse for left-handed people the right, for right-handed people the left mouse button.
41
+ #- clicks(1): The number of times to click.
42
+ #- speed(10): The speed the mouse cursor will move with. If set to 0, the cursor is set immediatly.
43
+ #
44
+ #Clicks the mouse.
45
+ def mouse_click(x = INTDEFAULT, y = INTDEFAULT, button = "Primary", clicks = 1, speed = 10)
46
+ @functions[__method__] ||= AU3_Function.new("MouseClick", 'SLLLL', 'L')
47
+ @functions[__method__].call(button.wide, x, y, clicks, speed)
48
+
49
+ raise(Au3Error, "Invalid button '#{button}'!") if last_error == 1
50
+ nil
51
+ end
52
+
53
+ #Performes a drag & drop operation with the given parameters.
54
+ def drag_mouse(x1, y1, x2, y2, button = "Primary", speed = 10)
55
+ @functions[__method__] ||= AU3_Function.new("MouseClickDrag", 'SLLLLL', 'L')
56
+ @functions[__method__].call(button.wide, x1, y1, x2, y2, speed)
57
+
58
+ raise(Au3Error, "Invalid button '#{button}'!") if last_error == 1
59
+ nil
60
+ end
61
+
62
+ #call-seq:
63
+ # hold_mouse_down( [ button = "Primary" ] ) ==> nil
64
+ # mouse_down( [ button = "Primary" ] ) ==> nil
65
+ #
66
+ #Holds a mouse button down (the left by default, or the right if mouse buttons are swapped).
67
+ #You should release the mouse button somewhen.
68
+ def hold_mouse_down(button = "Primary")
69
+ @functions[__method__] ||= AU3_Function.new("MouseDown", 'S')
70
+ @functions[__method__].call(button.wide)
71
+ nil
72
+ end
73
+
74
+ #call-seq:
75
+ # cursor_id ==> aFixnum
76
+ # get_cursor_id ==> aFixnum
77
+ #
78
+ #Returns one of the *_CURSOR constants to indicate which cursor icon is actually shown.
79
+ def cursor_id
80
+ @functions[__method__] ||= AU3_Function.new("MouseGetCursor", '', 'L')
81
+ @functions[__method__].call
82
+ end
83
+
84
+ #call-seq:
85
+ # cursor_pos ==> anArray
86
+ # get_cursor_pos ==> anArray
87
+ #
88
+ #Returns the current cursor position in a two-element array of form <tt>[x, y]</tt>.
89
+ def cursor_pos
90
+ @functions[:cursor_pos_x] ||= AU3_Function.new("MouseGetPosX", 'V', 'L')
91
+ @functions[:cursor_pos_y] ||= AU3_Function.new("MouseGetPosY", 'V', 'L')
92
+ [@functions[:cursor_pos_x].call, @functions[:cursor_pos_y].call]
93
+ end
94
+
95
+ #call-seq:
96
+ # move_mouse( x , y [, speed = 10 ] ) ==> nil
97
+ # mouse_move( x , y [, speed = 10 ] ) ==> nil
98
+ #
99
+ #Moves the mouse cursor to the given position. If +speed+ is 0,
100
+ #it's set immediately.
101
+ def move_mouse(x, y, speed = 10)
102
+ @functions[__method__] ||= AU3_Function.new("MouseMove", 'LLL', 'L')
103
+ @functions[__method__].call(x, y, speed)
104
+ nil
105
+ end
106
+
107
+ #call-seq:
108
+ # release_mouse( [ button = "Primary" ] ) ==> nil
109
+ # mouse_up( [ button = "Primary" ] ) ==> nil
110
+ #
111
+ #Releases a mouse button hold down by #hold_mouse_down.
112
+ def release_mouse(button = "Primary")
113
+ @functions[__method__] ||= AU3_Function.new("MouseUp", 'S')
114
+ @functions[__method__].call(button.wide)
115
+ nil
116
+ end
117
+
118
+ #Scrolls up or down the mouse wheel +times+ times. Use
119
+ #ether "Up" or "Down" as the value for +direction+.
120
+ def mouse_wheel(direction, times = 5)
121
+ @functions[__method__] ||= AU3_Function.new("MouseWheel", 'SL')
122
+ @functions[__method__].call(direction.wide, times)
123
+
124
+ raise(Au3Error, "Undefined mouse wheel direction '#{direction}!") if last_error == 1
125
+ nil
126
+ end
127
+
128
+ end
129
+
130
+ end