Changeset 2752 for trunk/synergy/lib/platform/CPMKeyState.cpp
- Timestamp:
- Jul 29, 2006, 6:43:07 AM (19 years ago)
- File:
-
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/synergy/lib/platform/CPMKeyState.cpp
r2751 r2752 2 2 * synergy -- mouse and keyboard sharing utility 3 3 * Copyright (C) 2003 Chris Schoeneman 4 * Copyright (C) 2006 Knut St. Osmundsen 4 5 * 5 6 * This package is free software; you can redistribute it and/or … … 13 14 */ 14 15 15 #include "CMSWindowsKeyState.h" 16 #include "CMSWindowsDesks.h" 16 #include "CPMKeyState.h" 17 17 #include "CThread.h" 18 18 #include "CFunctionJob.h" … … 21 21 #include "IEventQueue.h" 22 22 #include "TMethodEventJob.h" 23 #include "CArchMiscWindows.h"24 25 // extended mouse buttons26 #if !defined(VK_XBUTTON1)27 #define VK_XBUTTON1 0x0528 #define VK_XBUTTON2 0x0629 #endif30 23 31 24 // 32 // C MSWindowsKeyState25 // CPMKeyState 33 26 // 34 27 35 28 // map virtual keys to synergy key enumeration 36 const KeyID CMSWindowsKeyState::s_virtualKey[] = 37 { 38 /* 0x000 */ { kKeyNone }, // reserved 39 /* 0x001 */ { kKeyNone }, // VK_LBUTTON 40 /* 0x002 */ { kKeyNone }, // VK_RBUTTON 41 /* 0x003 */ { kKeyNone }, // VK_CANCEL 42 /* 0x004 */ { kKeyNone }, // VK_MBUTTON 43 /* 0x005 */ { kKeyNone }, // VK_XBUTTON1 44 /* 0x006 */ { kKeyNone }, // VK_XBUTTON2 45 /* 0x007 */ { kKeyNone }, // undefined 46 /* 0x008 */ { kKeyBackSpace }, // VK_BACK 47 /* 0x009 */ { kKeyTab }, // VK_TAB 48 /* 0x00a */ { kKeyNone }, // undefined 49 /* 0x00b */ { kKeyNone }, // undefined 50 /* 0x00c */ { kKeyClear }, // VK_CLEAR 51 /* 0x00d */ { kKeyReturn }, // VK_RETURN 52 /* 0x00e */ { kKeyNone }, // undefined 53 /* 0x00f */ { kKeyNone }, // undefined 54 /* 0x010 */ { kKeyShift_L }, // VK_SHIFT 55 /* 0x011 */ { kKeyControl_L }, // VK_CONTROL 56 /* 0x012 */ { kKeyAlt_L }, // VK_MENU 57 /* 0x013 */ { kKeyPause }, // VK_PAUSE 58 /* 0x014 */ { kKeyCapsLock }, // VK_CAPITAL 59 /* 0x015 */ { kKeyNone }, // VK_KANA 60 /* 0x016 */ { kKeyNone }, // VK_HANGUL 61 /* 0x017 */ { kKeyNone }, // VK_JUNJA 62 /* 0x018 */ { kKeyNone }, // VK_FINAL 63 /* 0x019 */ { kKeyZenkaku }, // VK_KANJI 64 /* 0x01a */ { kKeyNone }, // undefined 65 /* 0x01b */ { kKeyEscape }, // VK_ESCAPE 66 /* 0x01c */ { kKeyHenkan }, // VK_CONVERT 67 /* 0x01d */ { kKeyNone }, // VK_NONCONVERT 68 /* 0x01e */ { kKeyNone }, // VK_ACCEPT 69 /* 0x01f */ { kKeyNone }, // VK_MODECHANGE 70 /* 0x020 */ { kKeyNone }, // VK_SPACE 71 /* 0x021 */ { kKeyKP_PageUp }, // VK_PRIOR 72 /* 0x022 */ { kKeyKP_PageDown },// VK_NEXT 73 /* 0x023 */ { kKeyKP_End }, // VK_END 74 /* 0x024 */ { kKeyKP_Home }, // VK_HOME 75 /* 0x025 */ { kKeyKP_Left }, // VK_LEFT 76 /* 0x026 */ { kKeyKP_Up }, // VK_UP 77 /* 0x027 */ { kKeyKP_Right }, // VK_RIGHT 78 /* 0x028 */ { kKeyKP_Down }, // VK_DOWN 79 /* 0x029 */ { kKeySelect }, // VK_SELECT 80 /* 0x02a */ { kKeyNone }, // VK_PRINT 81 /* 0x02b */ { kKeyExecute }, // VK_EXECUTE 82 /* 0x02c */ { kKeyPrint }, // VK_SNAPSHOT 83 /* 0x02d */ { kKeyKP_Insert }, // VK_INSERT 84 /* 0x02e */ { kKeyKP_Delete }, // VK_DELETE 85 /* 0x02f */ { kKeyHelp }, // VK_HELP 86 /* 0x030 */ { kKeyNone }, // VK_0 87 /* 0x031 */ { kKeyNone }, // VK_1 88 /* 0x032 */ { kKeyNone }, // VK_2 89 /* 0x033 */ { kKeyNone }, // VK_3 90 /* 0x034 */ { kKeyNone }, // VK_4 91 /* 0x035 */ { kKeyNone }, // VK_5 92 /* 0x036 */ { kKeyNone }, // VK_6 93 /* 0x037 */ { kKeyNone }, // VK_7 94 /* 0x038 */ { kKeyNone }, // VK_8 95 /* 0x039 */ { kKeyNone }, // VK_9 96 /* 0x03a */ { kKeyNone }, // undefined 97 /* 0x03b */ { kKeyNone }, // undefined 98 /* 0x03c */ { kKeyNone }, // undefined 99 /* 0x03d */ { kKeyNone }, // undefined 100 /* 0x03e */ { kKeyNone }, // undefined 101 /* 0x03f */ { kKeyNone }, // undefined 102 /* 0x040 */ { kKeyNone }, // undefined 103 /* 0x041 */ { kKeyNone }, // VK_A 104 /* 0x042 */ { kKeyNone }, // VK_B 105 /* 0x043 */ { kKeyNone }, // VK_C 106 /* 0x044 */ { kKeyNone }, // VK_D 107 /* 0x045 */ { kKeyNone }, // VK_E 108 /* 0x046 */ { kKeyNone }, // VK_F 109 /* 0x047 */ { kKeyNone }, // VK_G 110 /* 0x048 */ { kKeyNone }, // VK_H 111 /* 0x049 */ { kKeyNone }, // VK_I 112 /* 0x04a */ { kKeyNone }, // VK_J 113 /* 0x04b */ { kKeyNone }, // VK_K 114 /* 0x04c */ { kKeyNone }, // VK_L 115 /* 0x04d */ { kKeyNone }, // VK_M 116 /* 0x04e */ { kKeyNone }, // VK_N 117 /* 0x04f */ { kKeyNone }, // VK_O 118 /* 0x050 */ { kKeyNone }, // VK_P 119 /* 0x051 */ { kKeyNone }, // VK_Q 120 /* 0x052 */ { kKeyNone }, // VK_R 121 /* 0x053 */ { kKeyNone }, // VK_S 122 /* 0x054 */ { kKeyNone }, // VK_T 123 /* 0x055 */ { kKeyNone }, // VK_U 124 /* 0x056 */ { kKeyNone }, // VK_V 125 /* 0x057 */ { kKeyNone }, // VK_W 126 /* 0x058 */ { kKeyNone }, // VK_X 127 /* 0x059 */ { kKeyNone }, // VK_Y 128 /* 0x05a */ { kKeyNone }, // VK_Z 129 /* 0x05b */ { kKeySuper_L }, // VK_LWIN 130 /* 0x05c */ { kKeySuper_R }, // VK_RWIN 131 /* 0x05d */ { kKeyMenu }, // VK_APPS 132 /* 0x05e */ { kKeyNone }, // undefined 133 /* 0x05f */ { kKeySleep }, // VK_SLEEP 134 /* 0x060 */ { kKeyKP_0 }, // VK_NUMPAD0 135 /* 0x061 */ { kKeyKP_1 }, // VK_NUMPAD1 136 /* 0x062 */ { kKeyKP_2 }, // VK_NUMPAD2 137 /* 0x063 */ { kKeyKP_3 }, // VK_NUMPAD3 138 /* 0x064 */ { kKeyKP_4 }, // VK_NUMPAD4 139 /* 0x065 */ { kKeyKP_5 }, // VK_NUMPAD5 140 /* 0x066 */ { kKeyKP_6 }, // VK_NUMPAD6 141 /* 0x067 */ { kKeyKP_7 }, // VK_NUMPAD7 142 /* 0x068 */ { kKeyKP_8 }, // VK_NUMPAD8 143 /* 0x069 */ { kKeyKP_9 }, // VK_NUMPAD9 144 /* 0x06a */ { kKeyKP_Multiply },// VK_MULTIPLY 145 /* 0x06b */ { kKeyKP_Add }, // VK_ADD 146 /* 0x06c */ { kKeyKP_Separator },// VK_SEPARATOR 147 /* 0x06d */ { kKeyKP_Subtract },// VK_SUBTRACT 148 /* 0x06e */ { kKeyKP_Decimal }, // VK_DECIMAL 149 /* 0x06f */ { kKeyNone }, // VK_DIVIDE 150 /* 0x070 */ { kKeyF1 }, // VK_F1 151 /* 0x071 */ { kKeyF2 }, // VK_F2 152 /* 0x072 */ { kKeyF3 }, // VK_F3 153 /* 0x073 */ { kKeyF4 }, // VK_F4 154 /* 0x074 */ { kKeyF5 }, // VK_F5 155 /* 0x075 */ { kKeyF6 }, // VK_F6 156 /* 0x076 */ { kKeyF7 }, // VK_F7 157 /* 0x077 */ { kKeyF8 }, // VK_F8 158 /* 0x078 */ { kKeyF9 }, // VK_F9 159 /* 0x079 */ { kKeyF10 }, // VK_F10 160 /* 0x07a */ { kKeyF11 }, // VK_F11 161 /* 0x07b */ { kKeyF12 }, // VK_F12 162 /* 0x07c */ { kKeyF13 }, // VK_F13 163 /* 0x07d */ { kKeyF14 }, // VK_F14 164 /* 0x07e */ { kKeyF15 }, // VK_F15 165 /* 0x07f */ { kKeyF16 }, // VK_F16 166 /* 0x080 */ { kKeyF17 }, // VK_F17 167 /* 0x081 */ { kKeyF18 }, // VK_F18 168 /* 0x082 */ { kKeyF19 }, // VK_F19 169 /* 0x083 */ { kKeyF20 }, // VK_F20 170 /* 0x084 */ { kKeyF21 }, // VK_F21 171 /* 0x085 */ { kKeyF22 }, // VK_F22 172 /* 0x086 */ { kKeyF23 }, // VK_F23 173 /* 0x087 */ { kKeyF24 }, // VK_F24 174 /* 0x088 */ { kKeyNone }, // unassigned 175 /* 0x089 */ { kKeyNone }, // unassigned 176 /* 0x08a */ { kKeyNone }, // unassigned 177 /* 0x08b */ { kKeyNone }, // unassigned 178 /* 0x08c */ { kKeyNone }, // unassigned 179 /* 0x08d */ { kKeyNone }, // unassigned 180 /* 0x08e */ { kKeyNone }, // unassigned 181 /* 0x08f */ { kKeyNone }, // unassigned 182 /* 0x090 */ { kKeyNumLock }, // VK_NUMLOCK 183 /* 0x091 */ { kKeyScrollLock }, // VK_SCROLL 184 /* 0x092 */ { kKeyNone }, // unassigned 185 /* 0x093 */ { kKeyNone }, // unassigned 186 /* 0x094 */ { kKeyNone }, // unassigned 187 /* 0x095 */ { kKeyNone }, // unassigned 188 /* 0x096 */ { kKeyNone }, // unassigned 189 /* 0x097 */ { kKeyNone }, // unassigned 190 /* 0x098 */ { kKeyNone }, // unassigned 191 /* 0x099 */ { kKeyNone }, // unassigned 192 /* 0x09a */ { kKeyNone }, // unassigned 193 /* 0x09b */ { kKeyNone }, // unassigned 194 /* 0x09c */ { kKeyNone }, // unassigned 195 /* 0x09d */ { kKeyNone }, // unassigned 196 /* 0x09e */ { kKeyNone }, // unassigned 197 /* 0x09f */ { kKeyNone }, // unassigned 198 /* 0x0a0 */ { kKeyShift_L }, // VK_LSHIFT 199 /* 0x0a1 */ { kKeyShift_R }, // VK_RSHIFT 200 /* 0x0a2 */ { kKeyControl_L }, // VK_LCONTROL 201 /* 0x0a3 */ { kKeyControl_R }, // VK_RCONTROL 202 /* 0x0a4 */ { kKeyAlt_L }, // VK_LMENU 203 /* 0x0a5 */ { kKeyAlt_R }, // VK_RMENU 204 /* 0x0a6 */ { kKeyNone }, // VK_BROWSER_BACK 205 /* 0x0a7 */ { kKeyNone }, // VK_BROWSER_FORWARD 206 /* 0x0a8 */ { kKeyNone }, // VK_BROWSER_REFRESH 207 /* 0x0a9 */ { kKeyNone }, // VK_BROWSER_STOP 208 /* 0x0aa */ { kKeyNone }, // VK_BROWSER_SEARCH 209 /* 0x0ab */ { kKeyNone }, // VK_BROWSER_FAVORITES 210 /* 0x0ac */ { kKeyNone }, // VK_BROWSER_HOME 211 /* 0x0ad */ { kKeyNone }, // VK_VOLUME_MUTE 212 /* 0x0ae */ { kKeyNone }, // VK_VOLUME_DOWN 213 /* 0x0af */ { kKeyNone }, // VK_VOLUME_UP 214 /* 0x0b0 */ { kKeyNone }, // VK_MEDIA_NEXT_TRACK 215 /* 0x0b1 */ { kKeyNone }, // VK_MEDIA_PREV_TRACK 216 /* 0x0b2 */ { kKeyNone }, // VK_MEDIA_STOP 217 /* 0x0b3 */ { kKeyNone }, // VK_MEDIA_PLAY_PAUSE 218 /* 0x0b4 */ { kKeyNone }, // VK_LAUNCH_MAIL 219 /* 0x0b5 */ { kKeyNone }, // VK_LAUNCH_MEDIA_SELECT 220 /* 0x0b6 */ { kKeyNone }, // VK_LAUNCH_APP1 221 /* 0x0b7 */ { kKeyNone }, // VK_LAUNCH_APP2 222 /* 0x0b8 */ { kKeyNone }, // unassigned 223 /* 0x0b9 */ { kKeyNone }, // unassigned 224 /* 0x0ba */ { kKeyNone }, // OEM specific 225 /* 0x0bb */ { kKeyNone }, // OEM specific 226 /* 0x0bc */ { kKeyNone }, // OEM specific 227 /* 0x0bd */ { kKeyNone }, // OEM specific 228 /* 0x0be */ { kKeyNone }, // OEM specific 229 /* 0x0bf */ { kKeyNone }, // OEM specific 230 /* 0x0c0 */ { kKeyNone }, // OEM specific 231 /* 0x0c1 */ { kKeyNone }, // unassigned 232 /* 0x0c2 */ { kKeyNone }, // unassigned 233 /* 0x0c3 */ { kKeyNone }, // unassigned 234 /* 0x0c4 */ { kKeyNone }, // unassigned 235 /* 0x0c5 */ { kKeyNone }, // unassigned 236 /* 0x0c6 */ { kKeyNone }, // unassigned 237 /* 0x0c7 */ { kKeyNone }, // unassigned 238 /* 0x0c8 */ { kKeyNone }, // unassigned 239 /* 0x0c9 */ { kKeyNone }, // unassigned 240 /* 0x0ca */ { kKeyNone }, // unassigned 241 /* 0x0cb */ { kKeyNone }, // unassigned 242 /* 0x0cc */ { kKeyNone }, // unassigned 243 /* 0x0cd */ { kKeyNone }, // unassigned 244 /* 0x0ce */ { kKeyNone }, // unassigned 245 /* 0x0cf */ { kKeyNone }, // unassigned 246 /* 0x0d0 */ { kKeyNone }, // unassigned 247 /* 0x0d1 */ { kKeyNone }, // unassigned 248 /* 0x0d2 */ { kKeyNone }, // unassigned 249 /* 0x0d3 */ { kKeyNone }, // unassigned 250 /* 0x0d4 */ { kKeyNone }, // unassigned 251 /* 0x0d5 */ { kKeyNone }, // unassigned 252 /* 0x0d6 */ { kKeyNone }, // unassigned 253 /* 0x0d7 */ { kKeyNone }, // unassigned 254 /* 0x0d8 */ { kKeyNone }, // unassigned 255 /* 0x0d9 */ { kKeyNone }, // unassigned 256 /* 0x0da */ { kKeyNone }, // unassigned 257 /* 0x0db */ { kKeyNone }, // OEM specific 258 /* 0x0dc */ { kKeyNone }, // OEM specific 259 /* 0x0dd */ { kKeyNone }, // OEM specific 260 /* 0x0de */ { kKeyNone }, // OEM specific 261 /* 0x0df */ { kKeyNone }, // OEM specific 262 /* 0x0e0 */ { kKeyNone }, // OEM specific 263 /* 0x0e1 */ { kKeyNone }, // OEM specific 264 /* 0x0e2 */ { kKeyNone }, // OEM specific 265 /* 0x0e3 */ { kKeyNone }, // OEM specific 266 /* 0x0e4 */ { kKeyNone }, // OEM specific 267 /* 0x0e5 */ { kKeyNone }, // unassigned 268 /* 0x0e6 */ { kKeyNone }, // OEM specific 269 /* 0x0e7 */ { kKeyNone }, // unassigned 270 /* 0x0e8 */ { kKeyNone }, // unassigned 271 /* 0x0e9 */ { kKeyNone }, // OEM specific 272 /* 0x0ea */ { kKeyNone }, // OEM specific 273 /* 0x0eb */ { kKeyNone }, // OEM specific 274 /* 0x0ec */ { kKeyNone }, // OEM specific 275 /* 0x0ed */ { kKeyNone }, // OEM specific 276 /* 0x0ee */ { kKeyNone }, // OEM specific 277 /* 0x0ef */ { kKeyNone }, // OEM specific 278 /* 0x0f0 */ { kKeyNone }, // OEM specific 279 /* 0x0f1 */ { kKeyNone }, // OEM specific 280 /* 0x0f2 */ { kKeyNone }, // OEM specific 281 /* 0x0f3 */ { kKeyNone }, // OEM specific 282 /* 0x0f4 */ { kKeyNone }, // OEM specific 283 /* 0x0f5 */ { kKeyNone }, // OEM specific 284 /* 0x0f6 */ { kKeyNone }, // VK_ATTN 285 /* 0x0f7 */ { kKeyNone }, // VK_CRSEL 286 /* 0x0f8 */ { kKeyNone }, // VK_EXSEL 287 /* 0x0f9 */ { kKeyNone }, // VK_EREOF 288 /* 0x0fa */ { kKeyNone }, // VK_PLAY 289 /* 0x0fb */ { kKeyNone }, // VK_ZOOM 290 /* 0x0fc */ { kKeyNone }, // reserved 291 /* 0x0fd */ { kKeyNone }, // VK_PA1 292 /* 0x0fe */ { kKeyNone }, // VK_OEM_CLEAR 293 /* 0x0ff */ { kKeyNone }, // reserved 294 295 /* 0x100 */ { kKeyNone }, // reserved 296 /* 0x101 */ { kKeyNone }, // VK_LBUTTON 297 /* 0x102 */ { kKeyNone }, // VK_RBUTTON 298 /* 0x103 */ { kKeyBreak }, // VK_CANCEL 299 /* 0x104 */ { kKeyNone }, // VK_MBUTTON 300 /* 0x105 */ { kKeyNone }, // VK_XBUTTON1 301 /* 0x106 */ { kKeyNone }, // VK_XBUTTON2 302 /* 0x107 */ { kKeyNone }, // undefined 303 /* 0x108 */ { kKeyNone }, // VK_BACK 304 /* 0x109 */ { kKeyNone }, // VK_TAB 305 /* 0x10a */ { kKeyNone }, // undefined 306 /* 0x10b */ { kKeyNone }, // undefined 307 /* 0x10c */ { kKeyClear }, // VK_CLEAR 308 /* 0x10d */ { kKeyKP_Enter }, // VK_RETURN 309 /* 0x10e */ { kKeyNone }, // undefined 310 /* 0x10f */ { kKeyNone }, // undefined 311 /* 0x110 */ { kKeyShift_R }, // VK_SHIFT 312 /* 0x111 */ { kKeyControl_R }, // VK_CONTROL 313 /* 0x112 */ { kKeyAlt_R }, // VK_MENU 314 /* 0x113 */ { kKeyNone }, // VK_PAUSE 315 /* 0x114 */ { kKeyNone }, // VK_CAPITAL 316 /* 0x115 */ { kKeyNone }, // VK_KANA 317 /* 0x116 */ { kKeyNone }, // VK_HANGUL 318 /* 0x117 */ { kKeyNone }, // VK_JUNJA 319 /* 0x118 */ { kKeyNone }, // VK_FINAL 320 /* 0x119 */ { kKeyNone }, // VK_KANJI 321 /* 0x11a */ { kKeyNone }, // undefined 322 /* 0x11b */ { kKeyNone }, // VK_ESCAPE 323 /* 0x11c */ { kKeyNone }, // VK_CONVERT 324 /* 0x11d */ { kKeyNone }, // VK_NONCONVERT 325 /* 0x11e */ { kKeyNone }, // VK_ACCEPT 326 /* 0x11f */ { kKeyNone }, // VK_MODECHANGE 327 /* 0x120 */ { kKeyNone }, // VK_SPACE 328 /* 0x121 */ { kKeyPageUp }, // VK_PRIOR 329 /* 0x122 */ { kKeyPageDown }, // VK_NEXT 330 /* 0x123 */ { kKeyEnd }, // VK_END 331 /* 0x124 */ { kKeyHome }, // VK_HOME 332 /* 0x125 */ { kKeyLeft }, // VK_LEFT 333 /* 0x126 */ { kKeyUp }, // VK_UP 334 /* 0x127 */ { kKeyRight }, // VK_RIGHT 335 /* 0x128 */ { kKeyDown }, // VK_DOWN 336 /* 0x129 */ { kKeySelect }, // VK_SELECT 337 /* 0x12a */ { kKeyNone }, // VK_PRINT 338 /* 0x12b */ { kKeyExecute }, // VK_EXECUTE 339 /* 0x12c */ { kKeyPrint }, // VK_SNAPSHOT 340 /* 0x12d */ { kKeyInsert }, // VK_INSERT 341 /* 0x12e */ { kKeyDelete }, // VK_DELETE 342 /* 0x12f */ { kKeyHelp }, // VK_HELP 343 /* 0x130 */ { kKeyNone }, // VK_0 344 /* 0x131 */ { kKeyNone }, // VK_1 345 /* 0x132 */ { kKeyNone }, // VK_2 346 /* 0x133 */ { kKeyNone }, // VK_3 347 /* 0x134 */ { kKeyNone }, // VK_4 348 /* 0x135 */ { kKeyNone }, // VK_5 349 /* 0x136 */ { kKeyNone }, // VK_6 350 /* 0x137 */ { kKeyNone }, // VK_7 351 /* 0x138 */ { kKeyNone }, // VK_8 352 /* 0x139 */ { kKeyNone }, // VK_9 353 /* 0x13a */ { kKeyNone }, // undefined 354 /* 0x13b */ { kKeyNone }, // undefined 355 /* 0x13c */ { kKeyNone }, // undefined 356 /* 0x13d */ { kKeyNone }, // undefined 357 /* 0x13e */ { kKeyNone }, // undefined 358 /* 0x13f */ { kKeyNone }, // undefined 359 /* 0x140 */ { kKeyNone }, // undefined 360 /* 0x141 */ { kKeyNone }, // VK_A 361 /* 0x142 */ { kKeyNone }, // VK_B 362 /* 0x143 */ { kKeyNone }, // VK_C 363 /* 0x144 */ { kKeyNone }, // VK_D 364 /* 0x145 */ { kKeyNone }, // VK_E 365 /* 0x146 */ { kKeyNone }, // VK_F 366 /* 0x147 */ { kKeyNone }, // VK_G 367 /* 0x148 */ { kKeyNone }, // VK_H 368 /* 0x149 */ { kKeyNone }, // VK_I 369 /* 0x14a */ { kKeyNone }, // VK_J 370 /* 0x14b */ { kKeyNone }, // VK_K 371 /* 0x14c */ { kKeyNone }, // VK_L 372 /* 0x14d */ { kKeyNone }, // VK_M 373 /* 0x14e */ { kKeyNone }, // VK_N 374 /* 0x14f */ { kKeyNone }, // VK_O 375 /* 0x150 */ { kKeyNone }, // VK_P 376 /* 0x151 */ { kKeyNone }, // VK_Q 377 /* 0x152 */ { kKeyNone }, // VK_R 378 /* 0x153 */ { kKeyNone }, // VK_S 379 /* 0x154 */ { kKeyNone }, // VK_T 380 /* 0x155 */ { kKeyNone }, // VK_U 381 /* 0x156 */ { kKeyNone }, // VK_V 382 /* 0x157 */ { kKeyNone }, // VK_W 383 /* 0x158 */ { kKeyNone }, // VK_X 384 /* 0x159 */ { kKeyNone }, // VK_Y 385 /* 0x15a */ { kKeyNone }, // VK_Z 386 /* 0x15b */ { kKeySuper_L }, // VK_LWIN 387 /* 0x15c */ { kKeySuper_R }, // VK_RWIN 388 /* 0x15d */ { kKeyMenu }, // VK_APPS 389 /* 0x15e */ { kKeyNone }, // undefined 390 /* 0x15f */ { kKeyNone }, // VK_SLEEP 391 /* 0x160 */ { kKeyNone }, // VK_NUMPAD0 392 /* 0x161 */ { kKeyNone }, // VK_NUMPAD1 393 /* 0x162 */ { kKeyNone }, // VK_NUMPAD2 394 /* 0x163 */ { kKeyNone }, // VK_NUMPAD3 395 /* 0x164 */ { kKeyNone }, // VK_NUMPAD4 396 /* 0x165 */ { kKeyNone }, // VK_NUMPAD5 397 /* 0x166 */ { kKeyNone }, // VK_NUMPAD6 398 /* 0x167 */ { kKeyNone }, // VK_NUMPAD7 399 /* 0x168 */ { kKeyNone }, // VK_NUMPAD8 400 /* 0x169 */ { kKeyNone }, // VK_NUMPAD9 401 /* 0x16a */ { kKeyNone }, // VK_MULTIPLY 402 /* 0x16b */ { kKeyNone }, // VK_ADD 403 /* 0x16c */ { kKeyKP_Separator },// VK_SEPARATOR 404 /* 0x16d */ { kKeyNone }, // VK_SUBTRACT 405 /* 0x16e */ { kKeyNone }, // VK_DECIMAL 406 /* 0x16f */ { kKeyKP_Divide }, // VK_DIVIDE 407 /* 0x170 */ { kKeyNone }, // VK_F1 408 /* 0x171 */ { kKeyNone }, // VK_F2 409 /* 0x172 */ { kKeyNone }, // VK_F3 410 /* 0x173 */ { kKeyNone }, // VK_F4 411 /* 0x174 */ { kKeyNone }, // VK_F5 412 /* 0x175 */ { kKeyNone }, // VK_F6 413 /* 0x176 */ { kKeyNone }, // VK_F7 414 /* 0x177 */ { kKeyNone }, // VK_F8 415 /* 0x178 */ { kKeyNone }, // VK_F9 416 /* 0x179 */ { kKeyNone }, // VK_F10 417 /* 0x17a */ { kKeyNone }, // VK_F11 418 /* 0x17b */ { kKeyNone }, // VK_F12 419 /* 0x17c */ { kKeyF13 }, // VK_F13 420 /* 0x17d */ { kKeyF14 }, // VK_F14 421 /* 0x17e */ { kKeyF15 }, // VK_F15 422 /* 0x17f */ { kKeyF16 }, // VK_F16 423 /* 0x180 */ { kKeyF17 }, // VK_F17 424 /* 0x181 */ { kKeyF18 }, // VK_F18 425 /* 0x182 */ { kKeyF19 }, // VK_F19 426 /* 0x183 */ { kKeyF20 }, // VK_F20 427 /* 0x184 */ { kKeyF21 }, // VK_F21 428 /* 0x185 */ { kKeyF22 }, // VK_F22 429 /* 0x186 */ { kKeyF23 }, // VK_F23 430 /* 0x187 */ { kKeyF24 }, // VK_F24 431 /* 0x188 */ { kKeyNone }, // unassigned 432 /* 0x189 */ { kKeyNone }, // unassigned 433 /* 0x18a */ { kKeyNone }, // unassigned 434 /* 0x18b */ { kKeyNone }, // unassigned 435 /* 0x18c */ { kKeyNone }, // unassigned 436 /* 0x18d */ { kKeyNone }, // unassigned 437 /* 0x18e */ { kKeyNone }, // unassigned 438 /* 0x18f */ { kKeyNone }, // unassigned 439 /* 0x190 */ { kKeyNumLock }, // VK_NUMLOCK 440 /* 0x191 */ { kKeyNone }, // VK_SCROLL 441 /* 0x192 */ { kKeyNone }, // unassigned 442 /* 0x193 */ { kKeyNone }, // unassigned 443 /* 0x194 */ { kKeyNone }, // unassigned 444 /* 0x195 */ { kKeyNone }, // unassigned 445 /* 0x196 */ { kKeyNone }, // unassigned 446 /* 0x197 */ { kKeyNone }, // unassigned 447 /* 0x198 */ { kKeyNone }, // unassigned 448 /* 0x199 */ { kKeyNone }, // unassigned 449 /* 0x19a */ { kKeyNone }, // unassigned 450 /* 0x19b */ { kKeyNone }, // unassigned 451 /* 0x19c */ { kKeyNone }, // unassigned 452 /* 0x19d */ { kKeyNone }, // unassigned 453 /* 0x19e */ { kKeyNone }, // unassigned 454 /* 0x19f */ { kKeyNone }, // unassigned 455 /* 0x1a0 */ { kKeyShift_L }, // VK_LSHIFT 456 /* 0x1a1 */ { kKeyShift_R }, // VK_RSHIFT 457 /* 0x1a2 */ { kKeyControl_L }, // VK_LCONTROL 458 /* 0x1a3 */ { kKeyControl_R }, // VK_RCONTROL 459 /* 0x1a4 */ { kKeyAlt_L }, // VK_LMENU 460 /* 0x1a5 */ { kKeyAlt_R }, // VK_RMENU 461 /* 0x1a6 */ { kKeyWWWBack }, // VK_BROWSER_BACK 462 /* 0x1a7 */ { kKeyWWWForward }, // VK_BROWSER_FORWARD 463 /* 0x1a8 */ { kKeyWWWRefresh }, // VK_BROWSER_REFRESH 464 /* 0x1a9 */ { kKeyWWWStop }, // VK_BROWSER_STOP 465 /* 0x1aa */ { kKeyWWWSearch }, // VK_BROWSER_SEARCH 466 /* 0x1ab */ { kKeyWWWFavorites },// VK_BROWSER_FAVORITES 467 /* 0x1ac */ { kKeyWWWHome }, // VK_BROWSER_HOME 468 /* 0x1ad */ { kKeyAudioMute }, // VK_VOLUME_MUTE 469 /* 0x1ae */ { kKeyAudioDown }, // VK_VOLUME_DOWN 470 /* 0x1af */ { kKeyAudioUp }, // VK_VOLUME_UP 471 /* 0x1b0 */ { kKeyAudioNext }, // VK_MEDIA_NEXT_TRACK 472 /* 0x1b1 */ { kKeyAudioPrev }, // VK_MEDIA_PREV_TRACK 473 /* 0x1b2 */ { kKeyAudioStop }, // VK_MEDIA_STOP 474 /* 0x1b3 */ { kKeyAudioPlay }, // VK_MEDIA_PLAY_PAUSE 475 /* 0x1b4 */ { kKeyAppMail }, // VK_LAUNCH_MAIL 476 /* 0x1b5 */ { kKeyAppMedia }, // VK_LAUNCH_MEDIA_SELECT 477 /* 0x1b6 */ { kKeyAppUser1 }, // VK_LAUNCH_APP1 478 /* 0x1b7 */ { kKeyAppUser2 }, // VK_LAUNCH_APP2 479 /* 0x1b8 */ { kKeyNone }, // unassigned 480 /* 0x1b9 */ { kKeyNone }, // unassigned 481 /* 0x1ba */ { kKeyNone }, // OEM specific 482 /* 0x1bb */ { kKeyNone }, // OEM specific 483 /* 0x1bc */ { kKeyNone }, // OEM specific 484 /* 0x1bd */ { kKeyNone }, // OEM specific 485 /* 0x1be */ { kKeyNone }, // OEM specific 486 /* 0x1bf */ { kKeyNone }, // OEM specific 487 /* 0x1c0 */ { kKeyNone }, // OEM specific 488 /* 0x1c1 */ { kKeyNone }, // unassigned 489 /* 0x1c2 */ { kKeyNone }, // unassigned 490 /* 0x1c3 */ { kKeyNone }, // unassigned 491 /* 0x1c4 */ { kKeyNone }, // unassigned 492 /* 0x1c5 */ { kKeyNone }, // unassigned 493 /* 0x1c6 */ { kKeyNone }, // unassigned 494 /* 0x1c7 */ { kKeyNone }, // unassigned 495 /* 0x1c8 */ { kKeyNone }, // unassigned 496 /* 0x1c9 */ { kKeyNone }, // unassigned 497 /* 0x1ca */ { kKeyNone }, // unassigned 498 /* 0x1cb */ { kKeyNone }, // unassigned 499 /* 0x1cc */ { kKeyNone }, // unassigned 500 /* 0x1cd */ { kKeyNone }, // unassigned 501 /* 0x1ce */ { kKeyNone }, // unassigned 502 /* 0x1cf */ { kKeyNone }, // unassigned 503 /* 0x1d0 */ { kKeyNone }, // unassigned 504 /* 0x1d1 */ { kKeyNone }, // unassigned 505 /* 0x1d2 */ { kKeyNone }, // unassigned 506 /* 0x1d3 */ { kKeyNone }, // unassigned 507 /* 0x1d4 */ { kKeyNone }, // unassigned 508 /* 0x1d5 */ { kKeyNone }, // unassigned 509 /* 0x1d6 */ { kKeyNone }, // unassigned 510 /* 0x1d7 */ { kKeyNone }, // unassigned 511 /* 0x1d8 */ { kKeyNone }, // unassigned 512 /* 0x1d9 */ { kKeyNone }, // unassigned 513 /* 0x1da */ { kKeyNone }, // unassigned 514 /* 0x1db */ { kKeyNone }, // OEM specific 515 /* 0x1dc */ { kKeyNone }, // OEM specific 516 /* 0x1dd */ { kKeyNone }, // OEM specific 517 /* 0x1de */ { kKeyNone }, // OEM specific 518 /* 0x1df */ { kKeyNone }, // OEM specific 519 /* 0x1e0 */ { kKeyNone }, // OEM specific 520 /* 0x1e1 */ { kKeyNone }, // OEM specific 521 /* 0x1e2 */ { kKeyNone }, // OEM specific 522 /* 0x1e3 */ { kKeyNone }, // OEM specific 523 /* 0x1e4 */ { kKeyNone }, // OEM specific 524 /* 0x1e5 */ { kKeyNone }, // unassigned 525 /* 0x1e6 */ { kKeyNone }, // OEM specific 526 /* 0x1e7 */ { kKeyNone }, // unassigned 527 /* 0x1e8 */ { kKeyNone }, // unassigned 528 /* 0x1e9 */ { kKeyNone }, // OEM specific 529 /* 0x1ea */ { kKeyNone }, // OEM specific 530 /* 0x1eb */ { kKeyNone }, // OEM specific 531 /* 0x1ec */ { kKeyNone }, // OEM specific 532 /* 0x1ed */ { kKeyNone }, // OEM specific 533 /* 0x1ee */ { kKeyNone }, // OEM specific 534 /* 0x1ef */ { kKeyNone }, // OEM specific 535 /* 0x1f0 */ { kKeyNone }, // OEM specific 536 /* 0x1f1 */ { kKeyNone }, // OEM specific 537 /* 0x1f2 */ { kKeyNone }, // OEM specific 538 /* 0x1f3 */ { kKeyNone }, // OEM specific 539 /* 0x1f4 */ { kKeyNone }, // OEM specific 540 /* 0x1f5 */ { kKeyNone }, // OEM specific 541 /* 0x1f6 */ { kKeyNone }, // VK_ATTN 542 /* 0x1f7 */ { kKeyNone }, // VK_CRSEL 543 /* 0x1f8 */ { kKeyNone }, // VK_EXSEL 544 /* 0x1f9 */ { kKeyNone }, // VK_EREOF 545 /* 0x1fa */ { kKeyNone }, // VK_PLAY 546 /* 0x1fb */ { kKeyNone }, // VK_ZOOM 547 /* 0x1fc */ { kKeyNone }, // reserved 548 /* 0x1fd */ { kKeyNone }, // VK_PA1 549 /* 0x1fe */ { kKeyNone }, // VK_OEM_CLEAR 550 /* 0x1ff */ { kKeyNone } // reserved 29 const KeyID CPMKeyState::s_virtualKey[0x42] = 30 { 31 /* 0x000 */ kKeyNone, // reserved 32 /* 0x001 */ kKeyNone, // VK_BUTTON1 VK_BUTTON1 0x0001 33 /* 0x002 */ kKeyNone, // VK_BUTTON2 VK_BUTTON2 0x0002 34 /* 0x003 */ kKeyNone, // VK_BUTTON3 VK_BUTTON3 0x0003 35 /* 0x004 */ kKeyBreak, // VK_BREAK VK_BREAK 0x0004 36 /* 0x005 */ kKeyBackSpace, // VK_BACKSPACE 37 /* 0x006 */ kKeyTab, // VK_TAB 38 /* 0x007 */ kKeyLeftTab, // VK_BACKTAB -- ??? 39 /* 0x008 */ kKeyReturn, // VK_NEWLINE 40 /* 0x009 */ kKeyShift_L, // VK_SHIFT 41 /* 0x00a */ kKeyControl_L, // VK_CTRL 0x000a 42 /* 0x00b */ kKeyAlt_L, // VK_ALT 0x000b 43 /* 0x00c */ kKeyAltGr, // VK_ALTGRAF 0x000c 44 /* 0x00d */ kKeyPause, // VK_PAUSE 0x000d 45 /* 0x00e */ kKeyCapsLock, // VK_CAPSLOCK 0x000e 46 /* 0x00f */ kKeyEscape, // VK_ESC 0x000f 47 /* 0x010 */ kKeyNone, // VK_SPACE 0x0010 48 /* 0x011 */ kKeyPageUp, // VK_PAGEUP 0x0011 49 /* 0x012 */ kKeyPageDown, // VK_PAGEDOWN 0x0012 50 /* 0x013 */ kKeyEnd, // VK_END 0x0013 51 /* 0x014 */ kKeyHome, // VK_HOME 0x0014 52 /* 0x015 */ kKeyLeft, // VK_LEFT 0x0015 53 /* 0x016 */ kKeyUp, // VK_UP 0x0016 54 /* 0x017 */ kKeyRight, // VK_RIGHT 0x0017 55 /* 0x018 */ kKeyDown, // VK_DOWN 0x0018 56 /* 0x019 */ kKeyNone, // VK_PRINTSCRN 0x0019 57 /* 0x01a */ kKeyInsert, // VK_INSERT 0x001a 58 /* 0x01b */ kKeyDelete, // VK_DELETE 0x001b 59 /* 0x01c */ kKeyScrollLock, // VK_SCRLLOCK 0x001c 60 /* 0x01d */ kKeyNumLock, // VK_NUMLOCK 0x001d 61 /* 0x01e */ kKeyKP_Enter, // VK_ENTER 0x001e 62 /* 0x01f */ kKeySysReq, // VK_SYSRQ 0x001f 63 /* 0x020 */ kKeyF1, // VK_F1 0x0020 64 /* 0x021 */ kKeyF2, // VK_F2 0x0021 65 /* 0x022 */ kKeyF3, // VK_F3 0x0022 66 /* 0x023 */ kKeyF4, // VK_F4 0x0023 67 /* 0x024 */ kKeyF5, // VK_F5 0x0024 68 /* 0x025 */ kKeyF6, // VK_F6 0x0025 69 /* 0x026 */ kKeyF7, // VK_F7 0x0026 70 /* 0x027 */ kKeyF8, // VK_F8 0x0027 71 /* 0x028 */ kKeyF9, // VK_F9 0x0028 72 /* 0x029 */ kKeyF10, // VK_F10 0x0029 73 /* 0x02a */ kKeyF11, // VK_F11 0x002a 74 /* 0x02b */ kKeyF12, // VK_F12 0x002b 75 /* 0x02c */ kKeyF13, // VK_F13 0x002c 76 /* 0x02d */ kKeyF14, // VK_F14 0x002d 77 /* 0x02e */ kKeyF15, // VK_F15 0x002e 78 /* 0x02f */ kKeyF16, // VK_F16 0x002f 79 /* 0x030 */ kKeyF17, // VK_F17 0x0030 80 /* 0x031 */ kKeyF18, // VK_F18 0x0031 81 /* 0x032 */ kKeyF19, // VK_F19 0x0032 82 /* 0x033 */ kKeyF20, // VK_F20 0x0033 83 /* 0x034 */ kKeyF21, // VK_F21 0x0034 84 /* 0x035 */ kKeyF22, // VK_F22 0x0035 85 /* 0x036 */ kKeyF23, // VK_F23 0x0036 86 /* 0x037 */ kKeyF24, // VK_F24 0x0037 87 /* 0x038 */ kKeyNone, // VK_ENDDRAG 0x0038 88 /* 0x039 */ kKeyClear, // VK_CLEAR 0x0039 89 /* 0x03a */ kKeyNone, // VK_EREOF 0x003a 90 /* 0x03b */ kKeyNone, // VK_PA1 0x003b 91 /* 0x03c */ kKeyNone, // VK_ATTN 0x003c 92 /* 0x03d */ kKeyNone, // VK_CRSEL 0x003d 93 /* 0x03e */ kKeyNone, // VK_EXSEL 0x003e 94 /* 0x03f */ kKeyNone, // VK_COPY 0x003f 95 /* 0x040 */ kKeyNone, // VK_BLK1 0x0040 96 /* 0x041 */ kKeyNone // VK_BLK2 0x0041 551 97 }; 552 98 553 99 struct CWin32Modifiers { 554 100 public: 555 U INTm_vk;101 ULONG m_vk; 556 102 KeyModifierMask m_mask; 557 103 }; … … 560 106 { 561 107 { VK_SHIFT, KeyModifierShift }, 562 { VK_LSHIFT, KeyModifierShift }, 563 { VK_RSHIFT, KeyModifierShift }, 564 { VK_CONTROL, KeyModifierControl }, 565 { VK_LCONTROL, KeyModifierControl }, 566 { VK_RCONTROL, KeyModifierControl }, 567 { VK_MENU, KeyModifierAlt }, 568 { VK_LMENU, KeyModifierAlt }, 569 { VK_RMENU, KeyModifierAlt }, 570 { VK_LWIN, KeyModifierSuper }, 571 { VK_RWIN, KeyModifierSuper } 108 { VK_CTRL, KeyModifierControl }, 109 { VK_ALT, KeyModifierAlt }, 110 { VK_ALTGRAF, KeyModifierAltGr }, 572 111 }; 573 112 574 CMSWindowsKeyState::CMSWindowsKeyState(CMSWindowsDesks* desks, 575 void* eventTarget) : 576 m_is95Family(CArchMiscWindows::isWindows95Family()), 113 CPMKeyState::CPMKeyState(void* eventTarget) : 577 114 m_eventTarget(eventTarget), 578 m_desks(desks),579 m_keyLayout(GetKeyboardLayout(0)),580 115 m_fixTimer(NULL), 581 116 m_lastDown(0), … … 584 119 m_originalSavedModifiers(0) 585 120 { 586 // look up symbol that's available on winNT family but not win95 587 HMODULE userModule = GetModuleHandle("user32.dll"); 588 m_ToUnicodeEx = (ToUnicodeEx_t)GetProcAddress(userModule, "ToUnicodeEx"); 589 } 590 591 CMSWindowsKeyState::~CMSWindowsKeyState() 121 122 } 123 124 CPMKeyState::~CPMKeyState() 592 125 { 593 126 disable(); … … 595 128 596 129 void 597 C MSWindowsKeyState::disable()130 CPMKeyState::disable() 598 131 { 599 132 if (m_fixTimer != NULL) { … … 606 139 607 140 KeyButton 608 C MSWindowsKeyState::virtualKeyToButton(UINTvirtualKey) const141 CPMKeyState::virtualKeyToButton(ULONG virtualKey) const 609 142 { 610 143 return m_virtualKeyToButton[virtualKey & 0xffu]; 611 144 } 612 145 613 void614 CMSWindowsKeyState::setKeyLayout(HKL keyLayout)615 {616 m_keyLayout = keyLayout;617 }618 619 146 bool 620 C MSWindowsKeyState::testAutoRepeat(bool press, bool isRepeat, KeyButton button)147 CPMKeyState::testAutoRepeat(bool press, bool isRepeat, KeyButton button) 621 148 { 622 149 if (!isRepeat) { … … 633 160 634 161 void 635 C MSWindowsKeyState::saveModifiers()162 CPMKeyState::saveModifiers() 636 163 { 637 164 m_savedModifiers = getActiveModifiers(); … … 640 167 641 168 void 642 C MSWindowsKeyState::useSavedModifiers(bool enable)169 CPMKeyState::useSavedModifiers(bool enable) 643 170 { 644 171 if (enable != m_useSavedModifiers) { … … 654 181 655 182 KeyID 656 CMSWindowsKeyState::mapKeyFromEvent(WPARAM charAndVirtKey, 657 LPARAM info, KeyModifierMask* maskOut) const 658 { 659 static const KeyModifierMask s_controlAlt = 660 KeyModifierControl | KeyModifierAlt; 183 CPMKeyState::mapKeyFromEvent(MPARAM charAndVirtKey, MPARAM info, KeyModifierMask* maskOut) const 184 { 185 static const KeyModifierMask s_controlAlt = KeyModifierControl | KeyModifierAlt; 661 186 662 187 // extract character, virtual key, and if we didn't use AltGr … … 708 233 709 234 bool 710 C MSWindowsKeyState::didGroupsChange() const235 CPMKeyState::didGroupsChange() const 711 236 { 712 237 GroupList groups; … … 715 240 716 241 UINT 717 C MSWindowsKeyState::mapKeyToVirtualKey(KeyID key) const242 CPMKeyState::mapKeyToVirtualKey(KeyID key) const 718 243 { 719 244 if (key == kKeyNone) { … … 730 255 731 256 void 732 C MSWindowsKeyState::onKey(KeyButton button, bool down, KeyModifierMask newState)257 CPMKeyState::onKey(KeyButton button, bool down, KeyModifierMask newState) 733 258 { 734 259 // handle win32 brokenness and forward to superclass … … 739 264 740 265 void 741 C MSWindowsKeyState::sendKeyEvent(void* target,266 CPMKeyState::sendKeyEvent(void* target, 742 267 bool press, bool isAutoRepeat, 743 268 KeyID key, KeyModifierMask mask, … … 765 290 766 291 void 767 C MSWindowsKeyState::fakeKeyDown(KeyID id, KeyModifierMask mask,292 CPMKeyState::fakeKeyDown(KeyID id, KeyModifierMask mask, 768 293 KeyButton button) 769 294 { … … 772 297 773 298 void 774 C MSWindowsKeyState::fakeKeyRepeat(KeyID id, KeyModifierMask mask,299 CPMKeyState::fakeKeyRepeat(KeyID id, KeyModifierMask mask, 775 300 SInt32 count, KeyButton button) 776 301 { … … 779 304 780 305 bool 781 CMSWindowsKeyState::fakeCtrlAltDel() 782 { 783 if (!m_is95Family) { 784 // to fake ctrl+alt+del on the NT family we broadcast a suitable 785 // hotkey to all windows on the winlogon desktop. however, the 786 // current thread must be on that desktop to do the broadcast 787 // and we can't switch just any thread because some own windows 788 // or hooks. so start a new thread to do the real work. 789 CThread cad(new CFunctionJob(&CMSWindowsKeyState::ctrlAltDelThread)); 790 cad.wait(); 791 } 792 else { 793 // simulate ctrl+alt+del 794 fakeKeyDown(kKeyDelete, KeyModifierControl | KeyModifierAlt, 795 virtualKeyToButton(VK_DELETE)); 796 } 797 return true; 798 } 799 800 void 801 CMSWindowsKeyState::ctrlAltDelThread(void*) 802 { 803 // get the Winlogon desktop at whatever privilege we can 804 HDESK desk = OpenDesktop("Winlogon", 0, FALSE, MAXIMUM_ALLOWED); 805 if (desk != NULL) { 806 if (SetThreadDesktop(desk)) { 807 PostMessage(HWND_BROADCAST, WM_HOTKEY, 0, 808 MAKELPARAM(MOD_CONTROL | MOD_ALT, VK_DELETE)); 809 } 810 else { 811 LOG((CLOG_DEBUG "can't switch to Winlogon desk: %d", GetLastError())); 812 } 813 CloseDesktop(desk); 814 } 815 else { 816 LOG((CLOG_DEBUG "can't open Winlogon desk: %d", GetLastError())); 817 } 306 CPMKeyState::fakeCtrlAltDel() 307 { 308 fakeKeyDown(kKeyDelete, KeyModifierControl | KeyModifierAlt, virtualKeyToButton(VK_DELETE)); 818 309 } 819 310 820 311 KeyModifierMask 821 C MSWindowsKeyState::pollActiveModifiers() const312 CPMKeyState::pollActiveModifiers() const 822 313 { 823 314 KeyModifierMask state = 0; … … 832 323 833 324 // we can get toggle modifiers from the system 834 if ( (GetKeyState(VK_CAPITAL) & 0x01) != 0) {325 if (WinGetKeyState(HWND_DESKTOP, VK_CAPITAL) & 1) { 835 326 state |= KeyModifierCapsLock; 836 327 } 837 if ( (GetKeyState(VK_NUMLOCK) & 0x01) != 0) {328 if (WinGetKeyState(HWND_DESKTOP, VK_NUMLOCK) & 1) { 838 329 state |= KeyModifierNumLock; 839 330 } 840 if ( (GetKeyState(VK_SCROLL) & 0x01) != 0) {331 if (WinGetKeyState(HWND_DESKTOP, VK_SCROLL) & 1) { 841 332 state |= KeyModifierScrollLock; 842 333 } … … 846 337 847 338 SInt32 848 C MSWindowsKeyState::pollActiveGroup() const339 CPMKeyState::pollActiveGroup() const 849 340 { 850 341 // determine the thread that'll receive this event 851 342 HWND targetWindow = GetForegroundWindow(); 852 DWORDtargetThread = GetWindowThreadProcessId(targetWindow, NULL);343 ULONG targetThread = GetWindowThreadProcessId(targetWindow, NULL); 853 344 854 345 // get keyboard layout for the thread … … 866 357 867 358 void 868 C MSWindowsKeyState::pollPressedKeys(KeyButtonSet& pressedKeys) const359 CPMKeyState::pollPressedKeys(KeyButtonSet& pressedKeys) const 869 360 { 870 361 BYTE keyState[256]; … … 878 369 879 370 void 880 C MSWindowsKeyState::getKeyMap(CKeyMap& keyMap)371 CPMKeyState::getKeyMap(CKeyMap& keyMap) 881 372 { 882 373 // update keyboard groups … … 1185 676 1186 677 void 1187 C MSWindowsKeyState::fakeKey(const Keystroke& keystroke)678 CPMKeyState::fakeKey(const Keystroke& keystroke) 1188 679 { 1189 680 switch (keystroke.m_type) { … … 1241 732 1242 733 KeyModifierMask& 1243 C MSWindowsKeyState::getActiveModifiersRValue()734 CPMKeyState::getActiveModifiersRValue() 1244 735 { 1245 736 if (m_useSavedModifiers) { … … 1252 743 1253 744 bool 1254 C MSWindowsKeyState::getGroups(GroupList& groups) const745 CPMKeyState::getGroups(GroupList& groups) const 1255 746 { 1256 747 // get keyboard layouts … … 1275 766 1276 767 void 1277 C MSWindowsKeyState::setWindowGroup(SInt32 group)768 CPMKeyState::setWindowGroup(SInt32 group) 1278 769 { 1279 770 HWND targetWindow = GetForegroundWindow(); … … 1294 785 1295 786 void 1296 C MSWindowsKeyState::fixKeys()787 CPMKeyState::fixKeys() 1297 788 { 1298 789 // fake key releases for the windows keys if we think they're … … 1347 838 m_fixTimer = EVENTQUEUE->newTimer(0.1, NULL); 1348 839 EVENTQUEUE->adoptHandler(CEvent::kTimer, m_fixTimer, 1349 new TMethodEventJob<C MSWindowsKeyState>(1350 this, &C MSWindowsKeyState::handleFixKeys));840 new TMethodEventJob<CPMKeyState>( 841 this, &CPMKeyState::handleFixKeys)); 1351 842 } 1352 843 else if (!fix && m_fixTimer != NULL) { … … 1359 850 1360 851 void 1361 C MSWindowsKeyState::handleFixKeys(const CEvent&, void*)852 CPMKeyState::handleFixKeys(const CEvent&, void*) 1362 853 { 1363 854 fixKeys(); … … 1365 856 1366 857 KeyID 1367 C MSWindowsKeyState::getKeyID(UINT virtualKey, KeyButton button)858 CPMKeyState::getKeyID(UINT virtualKey, KeyButton button) 1368 859 { 1369 860 if ((button & 0x100u) != 0) { … … 1374 865 1375 866 KeyID 1376 C MSWindowsKeyState::getIDForKey(CKeyMap::KeyItem& item,867 CPMKeyState::getIDForKey(CKeyMap::KeyItem& item, 1377 868 KeyButton button, UINT virtualKey, 1378 869 PBYTE keyState, HKL hkl) const … … 1412 903 1413 904 void 1414 C MSWindowsKeyState::addKeyEntry(CKeyMap& keyMap, CKeyMap::KeyItem& item)905 CPMKeyState::addKeyEntry(CKeyMap& keyMap, CKeyMap::KeyItem& item) 1415 906 { 1416 907 keyMap.addKeyEntry(item);
Note:
See TracChangeset
for help on using the changeset viewer.