win 0.0.6 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/lib/win/window.rb DELETED
@@ -1,608 +0,0 @@
1
- require 'win/library'
2
-
3
- module Win
4
-
5
- # Contains constants, functions and wrappers related to Windows manipulation
6
- #
7
- module Window
8
- # Internal constants:
9
-
10
- # Windows keyboard-related Constants:
11
- # ? move to keyboard.rb?
12
- KEY_DELAY = 0.00001
13
-
14
- include Win::Library
15
-
16
- #General constants:
17
-
18
- # Windows Message Get Text
19
- WM_GETTEXT = 0x000D
20
- # Windows Message Sys Command
21
- WM_SYSCOMMAND = 0x0112
22
- # Sys Command Close
23
- SC_CLOSE = 0xF060
24
-
25
- # Key down keyboard event (the key is being depressed)
26
- KEYEVENTF_KEYDOWN = 0
27
- # Key up keyboard event (the key is being released)
28
- KEYEVENTF_KEYUP = 2
29
- # Extended kb event. If specified, the scan code was preceded by a prefix byte having the value 0xE0 (224).
30
- KEYEVENTF_EXTENDEDKEY = 1
31
-
32
- # Virtual key codes:
33
-
34
- # Control-break processing
35
- VK_CANCEL = 0x03
36
- # Backspace? key
37
- VK_BACK = 0x08
38
- # Tab key
39
- VK_TAB = 0x09
40
- # Shift key
41
- VK_SHIFT = 0x10
42
- # Ctrl key
43
- VK_CONTROL = 0x11
44
- # ENTER key
45
- VK_RETURN = 0x0D
46
- # ALT key
47
- VK_ALT = 0x12
48
- # ALT key alias
49
- VK_MENU = 0x12
50
- # PAUSE key
51
- VK_PAUSE = 0x13
52
- # CAPS LOCK key
53
- VK_CAPITAL = 0x14
54
- # ESC key
55
- VK_ESCAPE = 0x1B
56
- # SPACEBAR
57
- VK_SPACE = 0x20
58
- # PAGE UP key
59
- VK_PRIOR = 0x21
60
- # PAGE DOWN key
61
- VK_NEXT = 0x22
62
- # END key
63
- VK_END = 0x23
64
- # HOME key
65
- VK_HOME = 0x24
66
- # LEFT ARROW key
67
- VK_LEFT = 0x25
68
- # UP ARROW key
69
- VK_UP = 0x26
70
- # RIGHT ARROW key
71
- VK_RIGHT = 0x27
72
- # DOWN ARROW key
73
- VK_DOWN = 0x28
74
- # SELECT key
75
- VK_SELECT = 0x29
76
- # PRINT key
77
- VK_PRINT = 0x2A
78
- # EXECUTE key
79
- VK_EXECUTE = 0x2B
80
- # PRINT SCREEN key
81
- VK_SNAPSHOT = 0x2C
82
- # INS key
83
- VK_INSERT = 0x2D
84
- # DEL key
85
- VK_DELETE = 0x2E
86
- # HELP key
87
- VK_HELP = 0x2F
88
-
89
- # ShowWindow constants:
90
-
91
- # Hides the window and activates another window.
92
- SW_HIDE = 0
93
- # Same as SW_SHOWNORMAL
94
- SW_NORMAL = 1
95
- # Activates and displays a window. If the window is minimized or maximized, the system restores it to its
96
- # original size and position. An application should specify this flag when displaying the window for the first time.
97
- SW_SHOWNORMAL = 1
98
- # Activates the window and displays it as a minimized window.
99
- SW_SHOWMINIMIZED = 2
100
- # Activates the window and displays it as a maximized window.
101
- SW_SHOWMAXIMIZED = 3
102
- # Activates the window and displays it as a maximized window.
103
- SW_MAXIMIZE = 3
104
- # Displays a window in its most recent size and position. Similar to SW_SHOWNORMAL, but the window is not activated.
105
- SW_SHOWNOACTIVATE = 4
106
- # Activates the window and displays it in its current size and position.
107
- SW_SHOW = 5
108
- # Minimizes the specified window, activates the next top-level window in the Z order.
109
- SW_MINIMIZE = 6
110
- # Displays the window as a minimized window. Similar to SW_SHOWMINIMIZED, except the window is not activated.
111
- SW_SHOWMINNOACTIVE= 7
112
- # Displays the window in its current size and position. Similar to SW_SHOW, except the window is not activated.
113
- SW_SHOWNA = 8
114
- # Activates and displays the window. If the window is minimized or maximized, the system restores it to its original
115
- # size and position. An application should specify this flag when restoring a minimized window.
116
- SW_RESTORE = 9
117
- # Sets the show state based on the SW_ value specified in the STARTUPINFO structure passed to the CreateProcess
118
- # function by the program that started the application.
119
- SW_SHOWDEFAULT = 10
120
- # Windows 2000/XP: Minimizes a window, even if the thread that owns the window is not responding. Only use this
121
- # flag when minimizing windows from a different thread.
122
- SW_FORCEMINIMIZE = 11
123
-
124
- class << self
125
- # Def_block that calls API function expecting EnumWindowsProc callback (EnumWindows, EnumChildWindows, ...).
126
- # Default callback just pushes all passed handles into Array that is returned if Enum function call was successful.
127
- # If runtime block is given it is added to the end of default callback (handles Array is still collected/returned).
128
- # If Enum function call failed, method returns nil, otherwise an Array of window handles.
129
- #
130
- def return_enum #:nodoc:
131
- lambda do |api, *args, &block|
132
- args.push 0 if args.size == api.prototype.size - 2 # If value is missing, it defaults to 0
133
- handles = []
134
-
135
- # Insert callback proc into appropriate place of args Array
136
- args[api.prototype.find_index(:enum_callback), 0] =
137
- proc do |handle, message|
138
- handles << handle
139
- block ? block[handle, message] : true
140
- end
141
- handles if api.call *args
142
- end
143
- end
144
-
145
- # Helper method that creates def_block returning (possibly encoded) string as a result of
146
- # api function call or nil if zero characters was returned by api call
147
- #
148
- def return_string( encode = nil ) #:nodoc:
149
- lambda do |api, *args|
150
- namespace.enforce_count( args, api.prototype, -2)
151
- buffer = FFI::MemoryPointer.new :char, 1024
152
- buffer.put_string(0, "\x00" * 1023)
153
- args += [buffer, 1024]
154
- num_chars = api.call(*args)
155
- return nil if num_chars == 0
156
- if encode
157
- string = buffer.get_bytes(0, num_chars*2)
158
- string = string.force_encoding('utf-16LE').encode(encode)
159
- else
160
- string = buffer.get_bytes(0, num_chars)
161
- end
162
- string.rstrip
163
- end
164
- end
165
-
166
- private :return_enum, :return_string
167
- end
168
-
169
- # Windows GUI API definitions:
170
-
171
- ##
172
- # Tests whether the specified window handle identifies an existing window.
173
- # A thread should not use IsWindow for a window that it did not create because the window
174
- # could be destroyed after this function was called. Further, because window handles are
175
- # recycled the handle could even point to a different window.
176
- #
177
- # :call-seq:
178
- # window?( win_handle )
179
- #
180
- function 'IsWindow', 'L', 'L'
181
-
182
- ##
183
- # Tests if the specified window, its parent window, its parent's parent window, and so forth,
184
- # have the WS_VISIBLE style. Because the return value specifies whether the window has the
185
- # WS_VISIBLE style, it may be true even if the window is totally obscured by other windows.
186
- #
187
- # :call-seq:
188
- # [window_]visible?( win_handle )
189
- #
190
- function 'IsWindowVisible', 'L', 'L', aliases: :visible?
191
-
192
- ##
193
- # Tests whether the specified window is maximized.
194
- #
195
- # :call-seq:
196
- # zoomed?( win_handle ), maximized?( win_handle )
197
- #
198
- function 'IsZoomed', 'L', 'L', aliases: :maximized?
199
-
200
- ##
201
- # Tests whether the specified window is maximized.
202
- #
203
- # :call-seq:
204
- # iconic?( win_handle ), minimized?( win_handle )
205
- #
206
- function 'IsIconic', 'L', 'L', aliases: :minimized?
207
-
208
- ##
209
- # Tests whether a window is a child (or descendant) window of a specified parent window.
210
- # A child window is the direct descendant of a specified parent window if that parent window
211
- # is in the chain of parent windows; the chain of parent windows leads from the original overlapped
212
- # or pop-up window to the child window.
213
- #
214
- # :call-seq:
215
- # child?( win_handle )
216
- #
217
- function 'IsChild', 'LL', 'L'
218
-
219
- ##
220
- # Returns a handle to the top-level window whose class and window name match the specified strings.
221
- # This function does not search child windows. This function does not perform a case-sensitive search.
222
- #
223
- # Parameters:
224
- # class_name (P) - String that specifies (window) class name OR class atom created by a previous
225
- # call to the RegisterClass(Ex) function. The atom must be in the low-order word of class_name;
226
- # the high-order word must be zero. The class name can be any name registered with RegisterClass(Ex),
227
- # or any of the predefined control-class names. If this parameter is nil, it finds any window whose
228
- # title matches the win_title parameter.
229
- # win_name (P) - String that specifies the window name (title). If nil, all names match.
230
- # Return Value (L): found window handle or NIL if nothing found
231
- #
232
- # :call-seq:
233
- # win_handle = find_window( class_name, win_name )
234
- #
235
- function 'FindWindow', 'PP', 'L', zeronil: true
236
-
237
- ##
238
- # Unicode version of find_window (strings must be encoded as utf-16LE AND terminate with "\x00\x00")
239
- #
240
- # :call-seq:
241
- # win_handle = find_window_w( class_name, win_name )
242
- #
243
- function 'FindWindowW', 'PP', 'L', zeronil: true
244
-
245
- ##
246
- # Retrieves a handle to a CHILD window whose class name and window name match the specified strings.
247
- # The function searches child windows, beginning with the one following the specified child window.
248
- # This function does NOT perform a case-sensitive search.
249
- #
250
- # Parameters:
251
- # parent (L) - Handle to the parent window whose child windows are to be searched.
252
- # If nil, the function uses the desktop window as the parent window.
253
- # The function searches among windows that are child windows of the desktop.
254
- # after_child (L) - Handle to a child window. Search begins with the NEXT child window in the Z order.
255
- # The child window must be a direct child window of parent, not just a descendant window.
256
- # If after_child is nil, the search begins with the first child window of parent.
257
- # win_class (P), win_title (P) - Strings that specify window class and name(title). If nil, anything matches.
258
- # Returns (L): found child window handle or NIL if nothing found
259
- #
260
- # :call-seq:
261
- # win_handle = find_window_ex( win_handle, after_child, class_name, win_name )
262
- #
263
- function 'FindWindowEx', 'LLPP', 'L', zeronil: true
264
-
265
- ##
266
- # Returns the text of the specified window's title bar (if it has one).
267
- # If the specified window is a control, the text of the control is copied. However, GetWindowText
268
- # cannot retrieve the text of a control in another application.
269
- #
270
- # Original Parameters:
271
- # win_handle (L) - Handle to the window and, indirectly, the class to which the window belongs.
272
- # text (P) - Long Pointer to the buffer that is to receive the text string.
273
- # max_count (I) - Specifies the length, in TCHAR, of the buffer pointed to by the text parameter.
274
- # The class name string is truncated if it is longer than the buffer and is always null-terminated.
275
- # Original Return Value (L): Length, in characters, of the copied string, not including the terminating null
276
- # character, indicates success. Zero indicates that the window has no title bar or text, if the title bar
277
- # is empty, or if the window or control handle is invalid. For extended error information, call GetLastError.
278
- #
279
- # Enhanced API requires only win_handle and returns rstripped text
280
- #
281
- # Enhanced Parameters:
282
- # win_handle (L) - Handle to the window and, indirectly, the class to which the window belongs.
283
- # Returns: Window title bar text or nil
284
- # If the window has no title bar or text, if the title bar is empty, or if the window or control handle
285
- # is invalid, the return value is NIL. To get extended error information, call GetLastError.
286
- #
287
- # Remarks: This function CANNOT retrieve the text of an edit control in ANOTHER app.
288
- # If the target window is owned by the current process, GetWindowText causes a WM_GETTEXT message to
289
- # be sent to the specified window or control. If the target window is owned by another process and has
290
- # a caption, GetWindowText retrieves the window caption text. If the window does not have a caption,
291
- # the return value is a null string. This allows to call GetWindowText without becoming unresponsive
292
- # if the target window owner process is not responding. However, if the unresponsive target window
293
- # belongs to the calling app, GetWindowText will cause the calling app to become unresponsive.
294
- # To retrieve the text of a control in another process, send a WM_GETTEXT message directly instead
295
- # of calling GetWindowText.
296
- #
297
- #:call-seq:
298
- # text = [get_]window_text( win_handle )
299
- #
300
- function 'GetWindowText', 'LPI', 'L', &return_string
301
-
302
- ##
303
- # Unicode version of get_window_text (returns rstripped utf-8 string)
304
- # API improved to require only win_handle and return rstripped string
305
- #
306
- #:call-seq:
307
- # text = [get_]window_text_w( win_handle )
308
- #
309
- function 'GetWindowTextW', 'LPI', 'L', &return_string('utf-8')
310
-
311
- ##
312
- # Retrieves the name of the class to which the specified window belongs.
313
- #
314
- # Original Parameters:
315
- # win_handle (L) - Handle to the window and, indirectly, the class to which the window belongs.
316
- # class_name (P) - Long Pointer to the buffer that is to receive the class name string.
317
- # max_count (I) - Specifies the length, in TCHAR, of the buffer pointed to by the class_name parameter.
318
- # The class name string is truncated if it is longer than the buffer and is always null-terminated.
319
- # Original Return Value (L): Length, in characters, of the copied string, not including the terminating null
320
- # character, indicates success. Zero indicates that the window has no title bar or text, if the title bar
321
- # is empty, or if the window or control handle is invalid. For extended error information, call GetLastError.
322
- #
323
- # API improved to require only win_handle and return rstripped string
324
- #
325
- # Enhanced Parameters:
326
- # win_handle (L) - Handle to the window and, indirectly, the class to which the window belongs.
327
- # Returns: Name of the class or NIL if function fails. For extended error information, call GetLastError.
328
- #
329
- #:call-seq:
330
- # text = [get_]class_name( win_handle )
331
- #
332
- function 'GetClassName', 'LPI', 'I', &return_string
333
-
334
- ##
335
- # Unicode version of get_class_name (returns rstripped utf-8 string)
336
- # API improved to require only win_handle and return rstripped string
337
- #
338
- #:call-seq:
339
- # text = [get_]class_name_w( win_handle )
340
- #
341
- function 'GetClassNameW', 'LPI', 'I', &return_string('utf-8')
342
-
343
- ##
344
- # Shows and hides windows.
345
- #
346
- # Parameters:
347
- # win_handle (L) - Handle to the window.
348
- # cmd (I) - Specifies how the window is to be shown. This parameter is ignored the first time an
349
- # application calls ShowWindow, if the program that launched the application provides a STARTUPINFO
350
- # structure. Otherwise, the first time ShowWindow is called, the value should be the value obtained
351
- # by the WinMain function in its nCmdShow parameter. In subsequent calls, cmd may be:
352
- # SW_HIDE, SW_MAXIMIZE, SW_MINIMIZE, SW_SHOW, SW_SHOWMAXIMIZED, SW_SHOWMINIMIZED, SW_SHOWMINNOACTIVE,
353
- # SW_SHOWNA, SW_SHOWNOACTIVATE, SW_SHOWNORMAL, SW_RESTORE, SW_SHOWDEFAULT, SW_FORCEMINIMIZE
354
- #
355
- # Original Return Value: - Nonzero if the window was PREVIOUSLY visible, otherwise zero
356
- # Enhanced Returns: - True if the window was PREVIOUSLY visible, otherwise false
357
- #
358
- #:call-seq:
359
- # was_visible = show_window( win_handle, cmd )
360
- #
361
- function 'ShowWindow', 'LI', 'I', boolean: true
362
-
363
- # Hides the window and activates another window
364
- def hide_window(win_handle)
365
- show_window(win_handle, SW_HIDE)
366
- end
367
-
368
- ##
369
- # Retrieves the identifier of the thread that created the specified window
370
- # and, optionally, the identifier of the process that created the window.
371
- #
372
- # Original Parameters:
373
- # handle (L) - Handle to the window.
374
- # process (P) - A POINTER to a (Long) variable that receives the process identifier.
375
- # Original Return (L): Identifier of the thread that created the window.
376
- #
377
- # API improved to accept window handle as a single arg and return a pair of [thread, process] ids
378
- #
379
- # New Parameters:
380
- # handle (L) - Handle to the window.
381
- # Returns: Pair of identifiers of the thread and process_id that created the window.
382
- #
383
- #:call-seq:
384
- # thread, process_id = [get_]window_tread_process_id( win_handle )
385
- #
386
- function 'GetWindowThreadProcessId', [:long, :pointer], :long, &->(api, *args) {
387
- namespace.enforce_count( args, api.prototype, -1)
388
- process = FFI::MemoryPointer.new(:long)
389
- process.write_long(1)
390
- thread = api.call(args.first, process)
391
- thread == 0 ? [nil, nil] : [thread, process.read_long()] }
392
- # weird lambda literal instead of block is needed because RDoc goes crazy if block is attached to meta-definition
393
-
394
- ##
395
- # Retrieves the dimensions of the specified window bounding rectangle.
396
- # Dimensions are given relative to the upper-left corner of the screen.
397
- #
398
- # Original Parameters:
399
- # win_handle (L) - Handle to the window.
400
- # rect (P) - Long pointer to a RECT structure that receives the screen coordinates of the upper-left and
401
- # lower-right corners of the window.
402
- # Original Return Value: Nonzero indicates success. Zero indicates failure. For error info, call GetLastError.
403
- #
404
- # API improved to accept only window handle and return 4-member dimensions array (left, top, right, bottom)
405
- #
406
- # New Parameters:
407
- # win_handle (L) - Handle to the window
408
- # New Return: Array(left, top, right, bottom) - rectangle dimensions
409
- #
410
- # Remarks: As a convention for the RECT structure, the bottom-right coordinates of the returned rectangle
411
- # are exclusive. In other words, the pixel at (right, bottom) lies immediately outside the rectangle.
412
- #
413
- #:call-seq:
414
- # rect = [get_]window_rect( win_handle )
415
- #
416
- function 'GetWindowRect', 'LP', 'I', &->(api, *args) {
417
- namespace.enforce_count( args, api.prototype, -1)
418
- rect = FFI::MemoryPointer.new(:long, 4)
419
- rect.write_array_of_long([0, 0, 0, 0])
420
- res = api.call args.first, rect
421
- res == 0 ? [nil, nil, nil, nil] : rect.read_array_of_long(4) }
422
- # weird lambda literal instead of block is needed because RDoc goes crazy if block is attached to meta-definition
423
-
424
- # This is an application-defined callback function that receives top-level window handles as a result of a call
425
- # to the EnumWindows, EnumChildWindows or EnumDesktopWindows function.
426
- #
427
- # Syntax: BOOL CALLBACK EnumWindowsProc( HWND hwnd, LPARAM lParam );
428
- #
429
- # Parameters:
430
- # hwnd (L) - [out] Handle to a top-level window.
431
- # lParam (L) - [in] Specifies the application-defined value given in EnumWindows or EnumDesktopWindows.
432
- # Return Values:
433
- # TRUE continues enumeration. FALSE stops enumeration.
434
- #
435
- # Remarks: An application must register this callback function by passing its address to EnumWindows or EnumDesktopWindows.
436
- callback :enum_callback, 'LL', :bool
437
-
438
- ##
439
- # The EnumWindows function enumerates all top-level windows on the screen by passing the handle to
440
- # each window, in turn, to an application-defined callback function. EnumWindows continues until
441
- # the last top-level window is enumerated or the callback function returns FALSE.
442
- #
443
- # Original Parameters:
444
- # callback [K] - Pointer to an application-defined callback function (see EnumWindowsProc).
445
- # value [P] - Specifies an application-defined value(message) to be passed to the callback function.
446
- # Original Return: Nonzero if the function succeeds, zero if the function fails. GetLastError for error info.
447
- # If callback returns zero, the return value is also zero. In this case, the callback function should
448
- # call SetLastError to obtain a meaningful error code to be returned to the caller of EnumWindows.
449
- #
450
- # API improved to accept blocks (instead of callback objects) and message as a single arg
451
- #
452
- # New Parameters:
453
- # message [P] - Specifies an application-defined value(message) to be passed to the callback function.
454
- # block given to method invocation serves as an application-defined callback function (see EnumWindowsProc).
455
- # Returns: True if the function succeeds, false if the function fails. GetLastError for error info.
456
- # If callback returns zero, the return value is also zero. In this case, the callback function should
457
- # call SetLastError to obtain a meaningful error code to be returned to the caller of EnumWindows.
458
- #
459
- # Remarks: The EnumWindows function does not enumerate child windows, with the exception of a few top-level
460
- # windows owned by the system that have the WS_CHILD style. This function is more reliable than calling
461
- # the GetWindow function in a loop. An application that calls GetWindow to perform this task risks being
462
- # caught in an infinite loop or referencing a handle to a window that has been destroyed.
463
- #
464
- #:call-seq:
465
- # handles = enum_windows( [value] ) {|handle, message| your callback procedure }
466
- #
467
- function'EnumWindows', [:enum_callback, :long], :bool, &return_enum
468
-
469
- ##
470
- #EnumDesktopWindows Function
471
- #
472
- #Enumerates all top-level windows associated with the specified desktop. It passes the handle to each window, in turn, to an application-defined callback function.
473
- #
474
- #
475
- #Syntax
476
- #BOOL WINAPI EnumDesktopWindows(
477
- # __in_opt HDESK hDesktop,
478
- # __in WNDENUMPROC lpfn,
479
- # __in LPARAM lParam
480
- #);
481
- #
482
- #Parameters
483
- #hDesktop
484
- #A handle to the desktop whose top-level windows are to be enumerated. This handle is returned by the CreateDesktop, GetThreadDesktop, OpenDesktop, or OpenInputDesktop function, and must have the DESKTOP_ENUMERATE access right. For more information, see Desktop Security and Access Rights.
485
- #
486
- #If this parameter is NULL, the current desktop is used.
487
- #
488
- #lpfn
489
- #A pointer to an application-defined EnumWindowsProc callback function.
490
- #
491
- #lParam
492
- #An application-defined value to be passed to the callback function.
493
- #
494
- #Return Value
495
- #If the function fails or is unable to perform the enumeration, the return value is zero.
496
- #
497
- #To get extended error information, call GetLastError.
498
- #
499
- #You must ensure that the callback function sets SetLastError if it fails.
500
- #
501
- #Windows Server 2003 and Windows XP/2000: If there are no windows on the desktop, GetLastError returns ERROR_INVALID_HANDLE.
502
- #Remarks
503
- #The EnumDesktopWindows function repeatedly invokes the lpfn callback function until the last top-level window is enumerated or the callback function returns FALSE.
504
- #
505
- #Requirements
506
- #Client Requires Windows Vista, Windows XP, or Windows 2000 Professional.
507
- function'EnumDesktopWindows', [:ulong, :enum_callback, :long], :bool, &return_enum
508
-
509
- ##
510
- # Enumerates child windows to a given window.
511
- #
512
- # Original Parameters:
513
- # parent (L) - Handle to the parent window whose child windows are to be enumerated.
514
- # callback [K] - Pointer to an application-defined callback function (see EnumWindowsProc).
515
- # message [P] - Specifies an application-defined value(message) to be passed to the callback function.
516
- # Original Return: Not used (?!)
517
- # If callback returns zero, the return value is also zero. In this case, the callback function should
518
- # call SetLastError to obtain a meaningful error code to be returned to the caller of EnumWindows.
519
- # If it is nil, this function is equivalent to EnumWindows. Windows 95/98/Me: parent cannot be NULL.
520
- #
521
- # API improved to accept blocks (instead of callback objects) and parent handle (value is optional, default 0)
522
- # New Parameters:
523
- # parent (L) - Handle to the parent window whose child windows are to be enumerated.
524
- # value (P) - Specifies an application-defined value(message) to be passed to the callback function.
525
- # block given to method invocation serves as an application-defined callback function (see EnumChildProc).
526
- #
527
- # Remarks:
528
- # If a child window has created child windows of its own, EnumChildWindows enumerates those windows as well.
529
- # A child window that is moved or repositioned in the Z order during the enumeration process will be properly enumerated.
530
- # The function does not enumerate a child window that is destroyed before being enumerated or that is created during the enumeration process.
531
- #
532
- #:call-seq:
533
- # handles = enum_child_windows( parent_handle, [value = 0] ) {|handle, message| your callback procedure }
534
- #
535
- function 'EnumChildWindows', [:ulong, :enum_callback, :long], :bool, &return_enum
536
-
537
- ##
538
- # GetForegroundWindow function returns a handle to the foreground window (the window with which the user
539
- # is currently working). The system assigns a slightly higher priority to the thread that creates the
540
- # foreground window than it does to other threads.
541
- #
542
- # Syntax: HWND GetForegroundWindow(VOID);
543
- #
544
- # Return Value: The return value is a handle to the foreground window. The foreground window can be NULL in
545
- # certain circumstances, such as when a window is losing activation.
546
- #
547
- #:call-seq:
548
- # win_handle = [get_]foreground_window()
549
- #
550
- function 'GetForegroundWindow', [], 'L'
551
-
552
- ##
553
- # Tests if given window handle points to foreground (topmost) window
554
- #
555
- def foreground?(win_handle)
556
- win_handle == foreground_window
557
- end
558
-
559
- ##
560
- # The GetActiveWindow function retrieves the window handle to the active window attached to
561
- # the calling thread's message queue.
562
- #
563
- # Syntax: HWND GetActiveWindow(VOID);
564
- #
565
- # Return Value: The return value is the handle to the active window attached to the calling
566
- # thread's message queue. Otherwise, the return value is NULL.
567
- #
568
- # Remarks: To get the handle to the foreground window, you can use GetForegroundWindow.
569
- # To get the window handle to the active window in the message queue for another thread, use GetGUIThreadInfo.
570
- #
571
- #:call-seq:
572
- # win_handle = [get_]active_window()
573
- #
574
- function 'GetActiveWindow', [], 'L'
575
-
576
- ##
577
- # The keybd_event function synthesizes a keystroke. The system can use such a synthesized keystroke to generate
578
- # a WM_KEYUP or WM_KEYDOWN message. The keyboard driver's interrupt handler calls the keybd_event function.
579
- #
580
- # !!!! Windows NT/2000/XP/Vista:This function has been superseded. Use SendInput instead.
581
- #
582
- # Syntax: VOID keybd_event( BYTE bVk, BYTE bScan, DWORD dwFlags, PTR dwExtraInfo);
583
- #
584
- # Parameters:
585
- # bVk [C] - [in] Specifies a virtual-key code. The code must be a value in the range 1 to 254.
586
- # For a complete list, see Virtual-Key Codes.
587
- # bScan [C] - [in] Specifies a hardware scan code for the key.
588
- # dwFlags [L] - [in] Specifies various aspects of function operation. This parameter can be
589
- # one or more of the following values:
590
- # KEYEVENTF_EXTENDEDKEY, KEYEVENTF_KEYUP, KEYEVENTF_KEYDOWN
591
- # dwExtraInfo [L] -[in] Specifies an additional value associated with the key stroke.
592
- #
593
- # Return Value: none
594
- #
595
- # Remarks: An application can simulate a press of the PRINTSCRN key in order to obtain a screen snapshot and save
596
- # it to the clipboard. To do this, call keybd_event with the bVk parameter set to VK_SNAPSHOT.
597
- #
598
- # Windows NT/2000/XP: The keybd_event function can toggle the NUM LOCK, CAPS LOCK, and SCROLL LOCK keys.
599
- # Windows 95/98/Me: The keybd_event function can toggle only the CAPS LOCK and SCROLL LOCK keys.
600
- #
601
- function 'keybd_event', 'IILL', 'V'
602
-
603
- function 'PostMessage', 'LLLL', 'L'
604
- function 'SendMessage', 'LLLP', 'L'
605
- function 'GetDlgItem', 'LL', 'L'
606
-
607
- end
608
- end