windows-pr 1.1.3 → 1.2.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.
Files changed (123) hide show
  1. data/CHANGES +15 -0
  2. data/MANIFEST +65 -65
  3. data/README +149 -149
  4. data/Rakefile +37 -52
  5. data/doc/conversion_guide.txt +37 -37
  6. data/lib/windows/clipboard.rb +2 -0
  7. data/lib/windows/com.rb +2 -0
  8. data/lib/windows/com/accessibility.rb +12 -10
  9. data/lib/windows/com/automation.rb +149 -147
  10. data/lib/windows/com/variant.rb +24 -22
  11. data/lib/windows/console.rb +114 -112
  12. data/lib/windows/debug.rb +35 -33
  13. data/lib/windows/device_io.rb +248 -246
  14. data/lib/windows/directory.rb +2 -0
  15. data/lib/windows/error.rb +2 -0
  16. data/lib/windows/eventlog.rb +2 -0
  17. data/lib/windows/file.rb +264 -262
  18. data/lib/windows/file_mapping.rb +25 -23
  19. data/lib/windows/filesystem.rb +2 -0
  20. data/lib/windows/gdi/bitmap.rb +65 -63
  21. data/lib/windows/gdi/device_context.rb +46 -44
  22. data/lib/windows/gdi/metafile.rb +40 -38
  23. data/lib/windows/gdi/painting_drawing.rb +115 -113
  24. data/lib/windows/handle.rb +2 -0
  25. data/lib/windows/library.rb +2 -0
  26. data/lib/windows/limits.rb +34 -31
  27. data/lib/windows/mailslot.rb +2 -0
  28. data/lib/windows/memory.rb +2 -0
  29. data/lib/windows/msvcrt/buffer.rb +75 -73
  30. data/lib/windows/msvcrt/directory.rb +31 -29
  31. data/lib/windows/msvcrt/file.rb +47 -45
  32. data/lib/windows/msvcrt/io.rb +62 -60
  33. data/lib/windows/msvcrt/string.rb +2 -0
  34. data/lib/windows/msvcrt/time.rb +169 -167
  35. data/lib/windows/national.rb +580 -578
  36. data/lib/windows/network/management.rb +525 -523
  37. data/lib/windows/network/snmp.rb +92 -90
  38. data/lib/windows/network/winsock.rb +128 -126
  39. data/lib/windows/nio.rb +2 -0
  40. data/lib/windows/ntfs/winternl.rb +96 -82
  41. data/lib/windows/path.rb +143 -141
  42. data/lib/windows/pipe.rb +42 -40
  43. data/lib/windows/process.rb +2 -0
  44. data/lib/windows/registry.rb +171 -126
  45. data/lib/windows/security.rb +479 -477
  46. data/lib/windows/security/authentication.rb +32 -30
  47. data/lib/windows/service.rb +142 -140
  48. data/lib/windows/shell.rb +171 -169
  49. data/lib/windows/socket.rb +86 -0
  50. data/lib/windows/sound.rb +39 -37
  51. data/lib/windows/synchronize.rb +133 -131
  52. data/lib/windows/system_info.rb +4 -2
  53. data/lib/windows/thread.rb +2 -0
  54. data/lib/windows/time.rb +48 -46
  55. data/lib/windows/tool_helper.rb +36 -34
  56. data/lib/windows/unicode.rb +2 -0
  57. data/lib/windows/volume.rb +61 -59
  58. data/lib/windows/window.rb +81 -79
  59. data/lib/windows/window/classes.rb +59 -57
  60. data/lib/windows/window/dialog.rb +91 -89
  61. data/lib/windows/window/menu.rb +102 -100
  62. data/lib/windows/window/message.rb +297 -295
  63. data/lib/windows/window/properties.rb +20 -18
  64. data/lib/windows/window/timer.rb +19 -17
  65. data/lib/windows/wsa.rb +102 -0
  66. data/test/tc_clipboard.rb +41 -41
  67. data/test/tc_com.rb +32 -32
  68. data/test/tc_com_automation.rb +15 -15
  69. data/test/tc_console.rb +108 -108
  70. data/test/tc_debug.rb +48 -48
  71. data/test/tc_device_io.rb +29 -29
  72. data/test/tc_directory.rb +25 -25
  73. data/test/tc_error.rb +38 -50
  74. data/test/tc_eventlog.rb +58 -58
  75. data/test/tc_file.rb +67 -67
  76. data/test/tc_file_mapping.rb +38 -38
  77. data/test/tc_filesystem.rb +27 -27
  78. data/test/tc_gdi_bitmap.rb +25 -25
  79. data/test/tc_gdi_metafile.rb +23 -23
  80. data/test/tc_handle.rb +36 -36
  81. data/test/tc_library.rb +37 -37
  82. data/test/tc_limits.rb +34 -34
  83. data/test/tc_mailslot.rb +22 -22
  84. data/test/tc_memory.rb +44 -44
  85. data/test/tc_msvcrt_buffer.rb +59 -68
  86. data/test/tc_msvcrt_directory.rb +96 -98
  87. data/test/tc_msvcrt_file.rb +80 -80
  88. data/test/tc_msvcrt_io.rb +48 -48
  89. data/test/tc_msvcrt_string.rb +94 -93
  90. data/test/tc_msvcrt_time.rb +19 -29
  91. data/test/tc_national.rb +38 -38
  92. data/test/tc_network_management.rb +32 -32
  93. data/test/tc_network_snmp.rb +31 -31
  94. data/test/tc_network_winsock.rb +34 -34
  95. data/test/tc_nio.rb +32 -32
  96. data/test/tc_ntfs_winternl.rb +33 -18
  97. data/test/tc_path.rb +90 -90
  98. data/test/tc_pipe.rb +53 -53
  99. data/test/tc_process.rb +24 -24
  100. data/test/tc_registry.rb +29 -29
  101. data/test/tc_security.rb +104 -104
  102. data/test/tc_security_authentication.rb +34 -34
  103. data/test/tc_service.rb +57 -57
  104. data/test/tc_shell.rb +34 -34
  105. data/test/tc_socket.rb +20 -0
  106. data/test/tc_sound.rb +37 -37
  107. data/test/tc_synchronize.rb +75 -75
  108. data/test/tc_system_info.rb +33 -43
  109. data/test/tc_thread.rb +29 -29
  110. data/test/tc_time.rb +32 -32
  111. data/test/tc_tool_helper.rb +29 -29
  112. data/test/tc_unicode.rb +62 -62
  113. data/test/tc_volume.rb +47 -47
  114. data/test/tc_window.rb +45 -45
  115. data/test/tc_window_classes.rb +33 -33
  116. data/test/tc_window_dialog.rb +33 -33
  117. data/test/tc_window_menu.rb +29 -29
  118. data/test/tc_window_message.rb +33 -33
  119. data/test/tc_window_properties.rb +29 -29
  120. data/test/tc_window_timer.rb +29 -29
  121. data/test/tc_wsa.rb +19 -0
  122. data/windows-pr.gemspec +1 -1
  123. metadata +13 -7
@@ -1,295 +1,297 @@
1
- require 'windows/api'
2
-
3
- module Windows
4
- module Window
5
- module Message
6
- API.auto_namespace = 'Windows::Window::Message'
7
- API.auto_constant = true
8
- API.auto_method = true
9
- API.auto_unicode = false
10
-
11
- # These constants are in winuser.h
12
-
13
- BSF_QUERY = 0x00000001
14
- BSF_IGNORECURRENTTASK = 0x00000002
15
- BSF_FLUSHDISK = 0x00000004
16
- BSF_NOHANG = 0x00000008
17
- BSF_POSTMESSAGE = 0x00000010
18
- BSF_FORCEIFHUNG = 0x00000020
19
- BSF_NOTIMEOUTIFNOTHUNG = 0x00000040
20
- BSF_ALLOWSFW = 0x00000080
21
- BSF_SENDNOTIFYMESSAGE = 0x00000100
22
- BSF_RETURNHDESK = 0x00000200
23
- BSF_LUID = 0x00000400
24
-
25
- SMTO_NORMAL = 0x0000
26
- SMTO_BLOCK = 0x0001
27
- SMTO_ABORTIFHUNG = 0x0002
28
- SMTO_NOTIMEOUTIFNOTHUNG = 0x0008
29
-
30
- WM_NULL = 0x0000
31
- WM_CREATE = 0x0001
32
- WM_DESTROY = 0x0002
33
- WM_MOVE = 0x0003
34
- WM_SIZE = 0x0005
35
- WM_ACTIVATE = 0x0006
36
- WM_SETFOCUS = 0x0007
37
- WM_KILLFOCUS = 0x0008
38
- WM_ENABLE = 0x000A
39
- WM_SETREDRAW = 0x000B
40
- WM_SETTEXT = 0x000C
41
- WM_GETTEXT = 0x000D
42
- WM_GETTEXTLENGTH = 0x000E
43
- WM_PAINT = 0x000F
44
- WM_CLOSE = 0x0010
45
- WM_QUERYENDSESSION = 0x0011
46
- WM_QUERYOPEN = 0x0013
47
- WM_ENDSESSION = 0x0016
48
- WM_QUIT = 0x0012
49
- WM_ERASEBKGND = 0x0014
50
- WM_SYSCOLORCHANGE = 0x0015
51
- WM_SHOWWINDOW = 0x0018
52
- WM_WININICHANGE = 0x001A
53
- WM_SETTINGCHANGE = WM_WININICHANGE
54
- WM_DEVMODECHANGE = 0x001B
55
- WM_ACTIVATEAPP = 0x001C
56
- WM_FONTCHANGE = 0x001D
57
- WM_TIMECHANGE = 0x001E
58
- WM_CANCELMODE = 0x001F
59
- WM_SETCURSOR = 0x0020
60
- WM_MOUSEACTIVATE = 0x0021
61
- WM_CHILDACTIVATE = 0x0022
62
- WM_QUEUESYNC = 0x0023
63
- WM_GETMINMAXINFO = 0x0024
64
- WM_PAINTICON = 0x0026
65
- WM_ICONERASEBKGND = 0x0027
66
- WM_NEXTDLGCTL = 0x0028
67
- WM_SPOOLERSTATUS = 0x002A
68
- WM_DRAWITEM = 0x002B
69
- WM_MEASUREITEM = 0x002C
70
- WM_DELETEITEM = 0x002D
71
- WM_VKEYTOITEM = 0x002E
72
- WM_CHARTOITEM = 0x002F
73
- WM_SETFONT = 0x0030
74
- WM_GETFONT = 0x0031
75
- WM_SETHOTKEY = 0x0032
76
- WM_GETHOTKEY = 0x0033
77
- WM_QUERYDRAGICON = 0x0037
78
- WM_COMPAREITEM = 0x0039
79
- WM_GETOBJECT = 0x003D
80
- WM_COMPACTING = 0x0041
81
- WM_COMMNOTIFY = 0x0044
82
- WM_WINDOWPOSCHANGING = 0x0046
83
- WM_WINDOWPOSCHANGED = 0x0047
84
- WM_POWER = 0x0048
85
- WM_COPYDATA = 0x004A
86
- WM_CANCELJOURNAL = 0x004B
87
- WM_NOTIFY = 0x004E
88
- WM_INPUTLANGCHANGEREQUEST = 0x0050
89
- WM_INPUTLANGCHANGE = 0x0051
90
- WM_TCARD = 0x0052
91
- WM_HELP = 0x0053
92
- WM_USERCHANGED = 0x0054
93
- WM_NOTIFYFORMAT = 0x0055
94
- WM_CONTEXTMENU = 0x007B
95
- WM_STYLECHANGING = 0x007C
96
- WM_STYLECHANGED = 0x007D
97
- WM_DISPLAYCHANGE = 0x007E
98
- WM_GETICON = 0x007F
99
- WM_SETICON = 0x0080
100
- WM_NCCREATE = 0x0081
101
- WM_NCDESTROY = 0x0082
102
- WM_NCCALCSIZE = 0x0083
103
- WM_NCHITTEST = 0x0084
104
- WM_NCPAINT = 0x0085
105
- WM_NCACTIVATE = 0x0086
106
- WM_GETDLGCODE = 0x0087
107
- WM_SYNCPAINT = 0x0088
108
- WM_NCMOUSEMOVE = 0x00A0
109
- WM_NCLBUTTONDOWN = 0x00A1
110
- WM_NCLBUTTONUP = 0x00A2
111
- WM_NCLBUTTONDBLCLK = 0x00A3
112
- WM_NCRBUTTONDOWN = 0x00A4
113
- WM_NCRBUTTONUP = 0x00A5
114
- WM_NCRBUTTONDBLCLK = 0x00A6
115
- WM_NCMBUTTONDOWN = 0x00A7
116
- WM_NCMBUTTONUP = 0x00A8
117
- WM_NCMBUTTONDBLCLK = 0x00A9
118
- WM_NCXBUTTONDOWN = 0x00AB
119
- WM_NCXBUTTONUP = 0x00AC
120
- WM_NCXBUTTONDBLCLK = 0x00AD
121
- WM_INPUT = 0x00FF
122
- WM_KEYFIRST = 0x0100
123
- WM_KEYDOWN = 0x0100
124
- WM_KEYUP = 0x0101
125
- WM_CHAR = 0x0102
126
- WM_DEADCHAR = 0x0103
127
- WM_SYSKEYDOWN = 0x0104
128
- WM_SYSKEYUP = 0x0105
129
- WM_SYSCHAR = 0x0106
130
- WM_SYSDEADCHAR = 0x0107
131
- WM_UNICHAR = 0x0109
132
- WM_IME_STARTCOMPOSITION = 0x010D
133
- WM_IME_ENDCOMPOSITION = 0x010E
134
- WM_IME_COMPOSITION = 0x010F
135
- WM_IME_KEYLAST = 0x010F
136
- WM_INITDIALOG = 0x0110
137
- WM_COMMAND = 0x0111
138
- WM_SYSCOMMAND = 0x0112
139
- WM_TIMER = 0x0113
140
- WM_HSCROLL = 0x0114
141
- WM_VSCROLL = 0x0115
142
- WM_INITMENU = 0x0116
143
- WM_INITMENUPOPUP = 0x0117
144
- WM_MENUSELECT = 0x011F
145
- WM_MENUCHAR = 0x0120
146
- WM_ENTERIDLE = 0x0121
147
- WM_MENURBUTTONUP = 0x0122
148
- WM_MENUDRAG = 0x0123
149
- WM_MENUGETOBJECT = 0x0124
150
- WM_UNINITMENUPOPUP = 0x0125
151
- WM_MENUCOMMAND = 0x0126
152
- WM_CHANGEUISTATE = 0x0127
153
- WM_UPDATEUISTATE = 0x0128
154
- WM_QUERYUISTATE = 0x0129
155
- WM_CTLCOLORMSGBOX = 0x0132
156
- WM_CTLCOLOREDIT = 0x0133
157
- WM_CTLCOLORLISTBOX = 0x0134
158
- WM_CTLCOLORBTN = 0x0135
159
- WM_CTLCOLORDLG = 0x0136
160
- WM_CTLCOLORSCROLLBAR = 0x0137
161
- WM_CTLCOLORSTATIC = 0x0138
162
- WM_MOUSEFIRST = 0x0200
163
- WM_MOUSEMOVE = 0x0200
164
- WM_LBUTTONDOWN = 0x0201
165
- WM_LBUTTONUP = 0x0202
166
- WM_LBUTTONDBLCLK = 0x0203
167
- WM_RBUTTONDOWN = 0x0204
168
- WM_RBUTTONUP = 0x0205
169
- WM_RBUTTONDBLCLK = 0x0206
170
- WM_MBUTTONDOWN = 0x0207
171
- WM_MBUTTONUP = 0x0208
172
- WM_MBUTTONDBLCLK = 0x0209
173
- WM_MOUSEWHEEL = 0x020A
174
- WM_XBUTTONDOWN = 0x020B
175
- WM_XBUTTONUP = 0x020C
176
- WM_XBUTTONDBLCLK = 0x020D
177
- WM_MOUSELAST = 0x020D # Assume Win2k or later
178
- WM_PARENTNOTIFY = 0x0210
179
- WM_ENTERMENULOOP = 0x0211
180
- WM_EXITMENULOOP = 0x0212
181
- WM_NEXTMENU = 0x0213
182
- WM_SIZING = 0x0214
183
- WM_CAPTURECHANGED = 0x0215
184
- WM_MOVING = 0x0216
185
- WM_POWERBROADCAST = 0x0218
186
- WM_DEVICECHANGE = 0x0219
187
- WM_MDICREATE = 0x0220
188
- WM_MDIDESTROY = 0x0221
189
- WM_MDIACTIVATE = 0x0222
190
- WM_MDIRESTORE = 0x0223
191
- WM_MDINEXT = 0x0224
192
- WM_MDIMAXIMIZE = 0x0225
193
- WM_MDITILE = 0x0226
194
- WM_MDICASCADE = 0x0227
195
- WM_MDIICONARRANGE = 0x0228
196
- WM_MDIGETACTIVE = 0x0229
197
- WM_MDISETMENU = 0x0230
198
- WM_ENTERSIZEMOVE = 0x0231
199
- WM_EXITSIZEMOVE = 0x0232
200
- WM_DROPFILES = 0x0233
201
- WM_MDIREFRESHMENU = 0x0234
202
- WM_IME_SETCONTEXT = 0x0281
203
- WM_IME_NOTIFY = 0x0282
204
- WM_IME_CONTROL = 0x0283
205
- WM_IME_COMPOSITIONFULL = 0x0284
206
- WM_IME_SELECT = 0x0285
207
- WM_IME_CHAR = 0x0286
208
- WM_IME_REQUEST = 0x0288
209
- WM_IME_KEYDOWN = 0x0290
210
- WM_IME_KEYUP = 0x0291
211
- WM_MOUSEHOVER = 0x02A1
212
- WM_MOUSELEAVE = 0x02A3
213
- WM_NCMOUSEHOVER = 0x02A0
214
- WM_NCMOUSELEAVE = 0x02A2
215
- WM_WTSSESSION_CHANGE = 0x02B1
216
- WM_TABLET_FIRST = 0x02c0
217
- WM_TABLET_LAST = 0x02df
218
- WM_CUT = 0x0300
219
- WM_COPY = 0x0301
220
- WM_PASTE = 0x0302
221
- WM_CLEAR = 0x0303
222
- WM_UNDO = 0x0304
223
- WM_RENDERFORMAT = 0x0305
224
- WM_RENDERALLFORMATS = 0x0306
225
- WM_DESTROYCLIPBOARD = 0x0307
226
- WM_DRAWCLIPBOARD = 0x0308
227
- WM_PAINTCLIPBOARD = 0x0309
228
- WM_VSCROLLCLIPBOARD = 0x030A
229
- WM_SIZECLIPBOARD = 0x030B
230
- WM_ASKCBFORMATNAME = 0x030C
231
- WM_CHANGECBCHAIN = 0x030D
232
- WM_HSCROLLCLIPBOARD = 0x030E
233
- WM_QUERYNEWPALETTE = 0x030F
234
- WM_PALETTEISCHANGING = 0x0310
235
- WM_PALETTECHANGED = 0x0311
236
- WM_HOTKEY = 0x0312
237
- WM_PRINT = 0x0317
238
- WM_PRINTCLIENT = 0x0318
239
- WM_APPCOMMAND = 0x0319
240
- WM_THEMECHANGED = 0x031A
241
- WM_HANDHELDFIRST = 0x0358
242
- WM_HANDHELDLAST = 0x035F
243
- WM_AFXFIRST = 0x0360
244
- WM_AFXLAST = 0x037F
245
- WM_PENWINFIRST = 0x0380
246
- WM_PENWINLAST = 0x038F
247
- WM_APP = 0x8000
248
- WM_USER = 0x0400
249
-
250
- # I'd rather not mixin Windows::SystemInfo
251
- getVersionEx = Win32::API.new('GetVersionEx', 'P', 'B')
252
- vbuf = "\0" * 128
253
- vinfo = [148, 0 ,0, 0, 0, vbuf].pack("LLLLLa128")
254
- getVersionEx.call(vinfo)
255
- info = vinfo.unpack("LLLLLa128")
256
-
257
- if info[2] >= 1
258
- WM_KEYLAST = 0x0109 # Windows XP or later
259
- else
260
- WM_KEYLAST = 0x0108 # Windows 2000
261
- end
262
-
263
- API.new('BroadcastSystemMessage', 'LPILL', 'L', 'user32')
264
- API.new('DefWindowProc', 'LLLL', 'L', 'user32')
265
- API.new('DispatchMessage', 'P', 'L', 'user32')
266
- API.new('GetInputState', 'V', 'B', 'user32')
267
- API.new('GetMessage', 'PLII', 'B', 'user32')
268
- API.new('GetMessageExtraInfo', 'V', 'L', 'user32')
269
- API.new('GetMessagePos', 'V', 'L', 'user32')
270
- API.new('GetMessageTime', 'V', 'L', 'user32')
271
- API.new('GetQueueStatus', 'I', 'L', 'user32')
272
- API.new('InSendMessage', 'V', 'B', 'user32')
273
- API.new('InSendMessageEx', 'L', 'L', 'user32')
274
- API.new('PeekMessage', 'PLIII', 'B', 'user32')
275
- API.new('PostMessage', 'PLLL', 'B', 'user32')
276
- API.new('PostQuitMessage', 'I', 'V', 'user32')
277
- API.new('PostThreadMessage', 'LILL', 'B', 'user32')
278
- API.new('RegisterWindowMessage', 'P', 'I', 'user32')
279
- API.new('ReplyMessage', 'L', 'B', 'user32')
280
- API.new('SendMessage', 'LILL', 'L', 'user32')
281
- API.new('SendMessageCallback', 'LILLKP', 'B', 'user32')
282
- API.new('SendMessageTimeout', 'LILLIIP', 'L', 'user32')
283
- API.new('SendNotifyMessage', 'LILLIIP', 'L', 'user32')
284
- API.new('SetMessageExtraInfo', 'L', 'L', 'user32')
285
- API.new('TranslateMessage', 'P', 'B', 'user32')
286
- API.new('WaitMessage', 'V', 'B', 'user32')
287
-
288
- begin
289
- API.new('BroadcastSystemMessageEx', 'LPILLP', 'L', 'user32')
290
- rescue Win32::API::LoadLibraryError
291
- # Windows XP or later
292
- end
293
- end
294
- end
295
- end
1
+ require 'windows/api'
2
+
3
+ module Windows
4
+ module Window
5
+ module Message
6
+ API.auto_namespace = 'Windows::Window::Message'
7
+ API.auto_constant = true
8
+ API.auto_method = true
9
+ API.auto_unicode = false
10
+
11
+ private
12
+
13
+ # These constants are in winuser.h
14
+
15
+ BSF_QUERY = 0x00000001
16
+ BSF_IGNORECURRENTTASK = 0x00000002
17
+ BSF_FLUSHDISK = 0x00000004
18
+ BSF_NOHANG = 0x00000008
19
+ BSF_POSTMESSAGE = 0x00000010
20
+ BSF_FORCEIFHUNG = 0x00000020
21
+ BSF_NOTIMEOUTIFNOTHUNG = 0x00000040
22
+ BSF_ALLOWSFW = 0x00000080
23
+ BSF_SENDNOTIFYMESSAGE = 0x00000100
24
+ BSF_RETURNHDESK = 0x00000200
25
+ BSF_LUID = 0x00000400
26
+
27
+ SMTO_NORMAL = 0x0000
28
+ SMTO_BLOCK = 0x0001
29
+ SMTO_ABORTIFHUNG = 0x0002
30
+ SMTO_NOTIMEOUTIFNOTHUNG = 0x0008
31
+
32
+ WM_NULL = 0x0000
33
+ WM_CREATE = 0x0001
34
+ WM_DESTROY = 0x0002
35
+ WM_MOVE = 0x0003
36
+ WM_SIZE = 0x0005
37
+ WM_ACTIVATE = 0x0006
38
+ WM_SETFOCUS = 0x0007
39
+ WM_KILLFOCUS = 0x0008
40
+ WM_ENABLE = 0x000A
41
+ WM_SETREDRAW = 0x000B
42
+ WM_SETTEXT = 0x000C
43
+ WM_GETTEXT = 0x000D
44
+ WM_GETTEXTLENGTH = 0x000E
45
+ WM_PAINT = 0x000F
46
+ WM_CLOSE = 0x0010
47
+ WM_QUERYENDSESSION = 0x0011
48
+ WM_QUERYOPEN = 0x0013
49
+ WM_ENDSESSION = 0x0016
50
+ WM_QUIT = 0x0012
51
+ WM_ERASEBKGND = 0x0014
52
+ WM_SYSCOLORCHANGE = 0x0015
53
+ WM_SHOWWINDOW = 0x0018
54
+ WM_WININICHANGE = 0x001A
55
+ WM_SETTINGCHANGE = WM_WININICHANGE
56
+ WM_DEVMODECHANGE = 0x001B
57
+ WM_ACTIVATEAPP = 0x001C
58
+ WM_FONTCHANGE = 0x001D
59
+ WM_TIMECHANGE = 0x001E
60
+ WM_CANCELMODE = 0x001F
61
+ WM_SETCURSOR = 0x0020
62
+ WM_MOUSEACTIVATE = 0x0021
63
+ WM_CHILDACTIVATE = 0x0022
64
+ WM_QUEUESYNC = 0x0023
65
+ WM_GETMINMAXINFO = 0x0024
66
+ WM_PAINTICON = 0x0026
67
+ WM_ICONERASEBKGND = 0x0027
68
+ WM_NEXTDLGCTL = 0x0028
69
+ WM_SPOOLERSTATUS = 0x002A
70
+ WM_DRAWITEM = 0x002B
71
+ WM_MEASUREITEM = 0x002C
72
+ WM_DELETEITEM = 0x002D
73
+ WM_VKEYTOITEM = 0x002E
74
+ WM_CHARTOITEM = 0x002F
75
+ WM_SETFONT = 0x0030
76
+ WM_GETFONT = 0x0031
77
+ WM_SETHOTKEY = 0x0032
78
+ WM_GETHOTKEY = 0x0033
79
+ WM_QUERYDRAGICON = 0x0037
80
+ WM_COMPAREITEM = 0x0039
81
+ WM_GETOBJECT = 0x003D
82
+ WM_COMPACTING = 0x0041
83
+ WM_COMMNOTIFY = 0x0044
84
+ WM_WINDOWPOSCHANGING = 0x0046
85
+ WM_WINDOWPOSCHANGED = 0x0047
86
+ WM_POWER = 0x0048
87
+ WM_COPYDATA = 0x004A
88
+ WM_CANCELJOURNAL = 0x004B
89
+ WM_NOTIFY = 0x004E
90
+ WM_INPUTLANGCHANGEREQUEST = 0x0050
91
+ WM_INPUTLANGCHANGE = 0x0051
92
+ WM_TCARD = 0x0052
93
+ WM_HELP = 0x0053
94
+ WM_USERCHANGED = 0x0054
95
+ WM_NOTIFYFORMAT = 0x0055
96
+ WM_CONTEXTMENU = 0x007B
97
+ WM_STYLECHANGING = 0x007C
98
+ WM_STYLECHANGED = 0x007D
99
+ WM_DISPLAYCHANGE = 0x007E
100
+ WM_GETICON = 0x007F
101
+ WM_SETICON = 0x0080
102
+ WM_NCCREATE = 0x0081
103
+ WM_NCDESTROY = 0x0082
104
+ WM_NCCALCSIZE = 0x0083
105
+ WM_NCHITTEST = 0x0084
106
+ WM_NCPAINT = 0x0085
107
+ WM_NCACTIVATE = 0x0086
108
+ WM_GETDLGCODE = 0x0087
109
+ WM_SYNCPAINT = 0x0088
110
+ WM_NCMOUSEMOVE = 0x00A0
111
+ WM_NCLBUTTONDOWN = 0x00A1
112
+ WM_NCLBUTTONUP = 0x00A2
113
+ WM_NCLBUTTONDBLCLK = 0x00A3
114
+ WM_NCRBUTTONDOWN = 0x00A4
115
+ WM_NCRBUTTONUP = 0x00A5
116
+ WM_NCRBUTTONDBLCLK = 0x00A6
117
+ WM_NCMBUTTONDOWN = 0x00A7
118
+ WM_NCMBUTTONUP = 0x00A8
119
+ WM_NCMBUTTONDBLCLK = 0x00A9
120
+ WM_NCXBUTTONDOWN = 0x00AB
121
+ WM_NCXBUTTONUP = 0x00AC
122
+ WM_NCXBUTTONDBLCLK = 0x00AD
123
+ WM_INPUT = 0x00FF
124
+ WM_KEYFIRST = 0x0100
125
+ WM_KEYDOWN = 0x0100
126
+ WM_KEYUP = 0x0101
127
+ WM_CHAR = 0x0102
128
+ WM_DEADCHAR = 0x0103
129
+ WM_SYSKEYDOWN = 0x0104
130
+ WM_SYSKEYUP = 0x0105
131
+ WM_SYSCHAR = 0x0106
132
+ WM_SYSDEADCHAR = 0x0107
133
+ WM_UNICHAR = 0x0109
134
+ WM_IME_STARTCOMPOSITION = 0x010D
135
+ WM_IME_ENDCOMPOSITION = 0x010E
136
+ WM_IME_COMPOSITION = 0x010F
137
+ WM_IME_KEYLAST = 0x010F
138
+ WM_INITDIALOG = 0x0110
139
+ WM_COMMAND = 0x0111
140
+ WM_SYSCOMMAND = 0x0112
141
+ WM_TIMER = 0x0113
142
+ WM_HSCROLL = 0x0114
143
+ WM_VSCROLL = 0x0115
144
+ WM_INITMENU = 0x0116
145
+ WM_INITMENUPOPUP = 0x0117
146
+ WM_MENUSELECT = 0x011F
147
+ WM_MENUCHAR = 0x0120
148
+ WM_ENTERIDLE = 0x0121
149
+ WM_MENURBUTTONUP = 0x0122
150
+ WM_MENUDRAG = 0x0123
151
+ WM_MENUGETOBJECT = 0x0124
152
+ WM_UNINITMENUPOPUP = 0x0125
153
+ WM_MENUCOMMAND = 0x0126
154
+ WM_CHANGEUISTATE = 0x0127
155
+ WM_UPDATEUISTATE = 0x0128
156
+ WM_QUERYUISTATE = 0x0129
157
+ WM_CTLCOLORMSGBOX = 0x0132
158
+ WM_CTLCOLOREDIT = 0x0133
159
+ WM_CTLCOLORLISTBOX = 0x0134
160
+ WM_CTLCOLORBTN = 0x0135
161
+ WM_CTLCOLORDLG = 0x0136
162
+ WM_CTLCOLORSCROLLBAR = 0x0137
163
+ WM_CTLCOLORSTATIC = 0x0138
164
+ WM_MOUSEFIRST = 0x0200
165
+ WM_MOUSEMOVE = 0x0200
166
+ WM_LBUTTONDOWN = 0x0201
167
+ WM_LBUTTONUP = 0x0202
168
+ WM_LBUTTONDBLCLK = 0x0203
169
+ WM_RBUTTONDOWN = 0x0204
170
+ WM_RBUTTONUP = 0x0205
171
+ WM_RBUTTONDBLCLK = 0x0206
172
+ WM_MBUTTONDOWN = 0x0207
173
+ WM_MBUTTONUP = 0x0208
174
+ WM_MBUTTONDBLCLK = 0x0209
175
+ WM_MOUSEWHEEL = 0x020A
176
+ WM_XBUTTONDOWN = 0x020B
177
+ WM_XBUTTONUP = 0x020C
178
+ WM_XBUTTONDBLCLK = 0x020D
179
+ WM_MOUSELAST = 0x020D # Assume Win2k or later
180
+ WM_PARENTNOTIFY = 0x0210
181
+ WM_ENTERMENULOOP = 0x0211
182
+ WM_EXITMENULOOP = 0x0212
183
+ WM_NEXTMENU = 0x0213
184
+ WM_SIZING = 0x0214
185
+ WM_CAPTURECHANGED = 0x0215
186
+ WM_MOVING = 0x0216
187
+ WM_POWERBROADCAST = 0x0218
188
+ WM_DEVICECHANGE = 0x0219
189
+ WM_MDICREATE = 0x0220
190
+ WM_MDIDESTROY = 0x0221
191
+ WM_MDIACTIVATE = 0x0222
192
+ WM_MDIRESTORE = 0x0223
193
+ WM_MDINEXT = 0x0224
194
+ WM_MDIMAXIMIZE = 0x0225
195
+ WM_MDITILE = 0x0226
196
+ WM_MDICASCADE = 0x0227
197
+ WM_MDIICONARRANGE = 0x0228
198
+ WM_MDIGETACTIVE = 0x0229
199
+ WM_MDISETMENU = 0x0230
200
+ WM_ENTERSIZEMOVE = 0x0231
201
+ WM_EXITSIZEMOVE = 0x0232
202
+ WM_DROPFILES = 0x0233
203
+ WM_MDIREFRESHMENU = 0x0234
204
+ WM_IME_SETCONTEXT = 0x0281
205
+ WM_IME_NOTIFY = 0x0282
206
+ WM_IME_CONTROL = 0x0283
207
+ WM_IME_COMPOSITIONFULL = 0x0284
208
+ WM_IME_SELECT = 0x0285
209
+ WM_IME_CHAR = 0x0286
210
+ WM_IME_REQUEST = 0x0288
211
+ WM_IME_KEYDOWN = 0x0290
212
+ WM_IME_KEYUP = 0x0291
213
+ WM_MOUSEHOVER = 0x02A1
214
+ WM_MOUSELEAVE = 0x02A3
215
+ WM_NCMOUSEHOVER = 0x02A0
216
+ WM_NCMOUSELEAVE = 0x02A2
217
+ WM_WTSSESSION_CHANGE = 0x02B1
218
+ WM_TABLET_FIRST = 0x02c0
219
+ WM_TABLET_LAST = 0x02df
220
+ WM_CUT = 0x0300
221
+ WM_COPY = 0x0301
222
+ WM_PASTE = 0x0302
223
+ WM_CLEAR = 0x0303
224
+ WM_UNDO = 0x0304
225
+ WM_RENDERFORMAT = 0x0305
226
+ WM_RENDERALLFORMATS = 0x0306
227
+ WM_DESTROYCLIPBOARD = 0x0307
228
+ WM_DRAWCLIPBOARD = 0x0308
229
+ WM_PAINTCLIPBOARD = 0x0309
230
+ WM_VSCROLLCLIPBOARD = 0x030A
231
+ WM_SIZECLIPBOARD = 0x030B
232
+ WM_ASKCBFORMATNAME = 0x030C
233
+ WM_CHANGECBCHAIN = 0x030D
234
+ WM_HSCROLLCLIPBOARD = 0x030E
235
+ WM_QUERYNEWPALETTE = 0x030F
236
+ WM_PALETTEISCHANGING = 0x0310
237
+ WM_PALETTECHANGED = 0x0311
238
+ WM_HOTKEY = 0x0312
239
+ WM_PRINT = 0x0317
240
+ WM_PRINTCLIENT = 0x0318
241
+ WM_APPCOMMAND = 0x0319
242
+ WM_THEMECHANGED = 0x031A
243
+ WM_HANDHELDFIRST = 0x0358
244
+ WM_HANDHELDLAST = 0x035F
245
+ WM_AFXFIRST = 0x0360
246
+ WM_AFXLAST = 0x037F
247
+ WM_PENWINFIRST = 0x0380
248
+ WM_PENWINLAST = 0x038F
249
+ WM_APP = 0x8000
250
+ WM_USER = 0x0400
251
+
252
+ # I'd rather not mixin Windows::SystemInfo
253
+ getVersionEx = Win32::API.new('GetVersionEx', 'P', 'B')
254
+ vbuf = "\0" * 128
255
+ vinfo = [148, 0 ,0, 0, 0, vbuf].pack("LLLLLa128")
256
+ getVersionEx.call(vinfo)
257
+ info = vinfo.unpack("LLLLLa128")
258
+
259
+ if info[2] >= 1
260
+ WM_KEYLAST = 0x0109 # Windows XP or later
261
+ else
262
+ WM_KEYLAST = 0x0108 # Windows 2000
263
+ end
264
+
265
+ API.new('BroadcastSystemMessage', 'LPILL', 'L', 'user32')
266
+ API.new('DefWindowProc', 'LLLL', 'L', 'user32')
267
+ API.new('DispatchMessage', 'P', 'L', 'user32')
268
+ API.new('GetInputState', 'V', 'B', 'user32')
269
+ API.new('GetMessage', 'PLII', 'B', 'user32')
270
+ API.new('GetMessageExtraInfo', 'V', 'L', 'user32')
271
+ API.new('GetMessagePos', 'V', 'L', 'user32')
272
+ API.new('GetMessageTime', 'V', 'L', 'user32')
273
+ API.new('GetQueueStatus', 'I', 'L', 'user32')
274
+ API.new('InSendMessage', 'V', 'B', 'user32')
275
+ API.new('InSendMessageEx', 'L', 'L', 'user32')
276
+ API.new('PeekMessage', 'PLIII', 'B', 'user32')
277
+ API.new('PostMessage', 'PLLL', 'B', 'user32')
278
+ API.new('PostQuitMessage', 'I', 'V', 'user32')
279
+ API.new('PostThreadMessage', 'LILL', 'B', 'user32')
280
+ API.new('RegisterWindowMessage', 'P', 'I', 'user32')
281
+ API.new('ReplyMessage', 'L', 'B', 'user32')
282
+ API.new('SendMessage', 'LILL', 'L', 'user32')
283
+ API.new('SendMessageCallback', 'LILLKP', 'B', 'user32')
284
+ API.new('SendMessageTimeout', 'LILLIIP', 'L', 'user32')
285
+ API.new('SendNotifyMessage', 'LILLIIP', 'L', 'user32')
286
+ API.new('SetMessageExtraInfo', 'L', 'L', 'user32')
287
+ API.new('TranslateMessage', 'P', 'B', 'user32')
288
+ API.new('WaitMessage', 'V', 'B', 'user32')
289
+
290
+ begin
291
+ API.new('BroadcastSystemMessageEx', 'LPILLP', 'L', 'user32')
292
+ rescue Win32::API::LoadLibraryError
293
+ # Windows XP or later
294
+ end
295
+ end
296
+ end
297
+ end