Ignore:
Timestamp:
Jul 29, 2006, 6:43:07 AM (19 years ago)
Author:
bird
Message:

Two classes (CPMScreen and CPMKeyState) + the hook dll left (and debugging of course).

File:
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/synergy/lib/platform/CPMKeyState.cpp

    r2751 r2752  
    22 * synergy -- mouse and keyboard sharing utility
    33 * Copyright (C) 2003 Chris Schoeneman
     4 * Copyright (C) 2006 Knut St. Osmundsen
    45 *
    56 * This package is free software; you can redistribute it and/or
     
    1314 */
    1415
    15 #include "CMSWindowsKeyState.h"
    16 #include "CMSWindowsDesks.h"
     16#include "CPMKeyState.h"
    1717#include "CThread.h"
    1818#include "CFunctionJob.h"
     
    2121#include "IEventQueue.h"
    2222#include "TMethodEventJob.h"
    23 #include "CArchMiscWindows.h"
    24 
    25 // extended mouse buttons
    26 #if !defined(VK_XBUTTON1)
    27 #define VK_XBUTTON1                             0x05
    28 #define VK_XBUTTON2                             0x06
    29 #endif
    3023
    3124//
    32 // CMSWindowsKeyState
     25// CPMKeyState
    3326//
    3427
    3528// 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
     29const 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         
    55197};
    55298
    55399struct CWin32Modifiers {
    554100public:
    555         UINT                            m_vk;
     101        ULONG                           m_vk;
    556102        KeyModifierMask         m_mask;
    557103};
     
    560106{
    561107        { 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     },
    572111};
    573112
    574 CMSWindowsKeyState::CMSWindowsKeyState(CMSWindowsDesks* desks,
    575                                 void* eventTarget) :
    576         m_is95Family(CArchMiscWindows::isWindows95Family()),
     113CPMKeyState::CPMKeyState(void* eventTarget) :
    577114        m_eventTarget(eventTarget),
    578         m_desks(desks),
    579         m_keyLayout(GetKeyboardLayout(0)),
    580115        m_fixTimer(NULL),
    581116        m_lastDown(0),
     
    584119        m_originalSavedModifiers(0)
    585120{
    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
     124CPMKeyState::~CPMKeyState()
    592125{
    593126        disable();
     
    595128
    596129void
    597 CMSWindowsKeyState::disable()
     130CPMKeyState::disable()
    598131{
    599132        if (m_fixTimer != NULL) {
     
    606139
    607140KeyButton
    608 CMSWindowsKeyState::virtualKeyToButton(UINT virtualKey) const
     141CPMKeyState::virtualKeyToButton(ULONG virtualKey) const
    609142{
    610143        return m_virtualKeyToButton[virtualKey & 0xffu];
    611144}
    612145
    613 void
    614 CMSWindowsKeyState::setKeyLayout(HKL keyLayout)
    615 {
    616         m_keyLayout = keyLayout;
    617 }
    618 
    619146bool
    620 CMSWindowsKeyState::testAutoRepeat(bool press, bool isRepeat, KeyButton button)
     147CPMKeyState::testAutoRepeat(bool press, bool isRepeat, KeyButton button)
    621148{
    622149        if (!isRepeat) {
     
    633160
    634161void
    635 CMSWindowsKeyState::saveModifiers()
     162CPMKeyState::saveModifiers()
    636163{
    637164        m_savedModifiers         = getActiveModifiers();
     
    640167
    641168void
    642 CMSWindowsKeyState::useSavedModifiers(bool enable)
     169CPMKeyState::useSavedModifiers(bool enable)
    643170{
    644171        if (enable != m_useSavedModifiers) {
     
    654181
    655182KeyID
    656 CMSWindowsKeyState::mapKeyFromEvent(WPARAM charAndVirtKey,
    657                                 LPARAM info, KeyModifierMask* maskOut) const
    658 {
    659         static const KeyModifierMask s_controlAlt =
    660                 KeyModifierControl | KeyModifierAlt;
     183CPMKeyState::mapKeyFromEvent(MPARAM charAndVirtKey, MPARAM info, KeyModifierMask* maskOut) const
     184{
     185        static const KeyModifierMask s_controlAlt = KeyModifierControl | KeyModifierAlt;
    661186
    662187        // extract character, virtual key, and if we didn't use AltGr
     
    708233
    709234bool
    710 CMSWindowsKeyState::didGroupsChange() const
     235CPMKeyState::didGroupsChange() const
    711236{
    712237        GroupList groups;
     
    715240
    716241UINT
    717 CMSWindowsKeyState::mapKeyToVirtualKey(KeyID key) const
     242CPMKeyState::mapKeyToVirtualKey(KeyID key) const
    718243{
    719244        if (key == kKeyNone) {
     
    730255
    731256void
    732 CMSWindowsKeyState::onKey(KeyButton button, bool down, KeyModifierMask newState)
     257CPMKeyState::onKey(KeyButton button, bool down, KeyModifierMask newState)
    733258{
    734259        // handle win32 brokenness and forward to superclass
     
    739264
    740265void
    741 CMSWindowsKeyState::sendKeyEvent(void* target,
     266CPMKeyState::sendKeyEvent(void* target,
    742267                                                        bool press, bool isAutoRepeat,
    743268                                                        KeyID key, KeyModifierMask mask,
     
    765290
    766291void
    767 CMSWindowsKeyState::fakeKeyDown(KeyID id, KeyModifierMask mask,
     292CPMKeyState::fakeKeyDown(KeyID id, KeyModifierMask mask,
    768293                                KeyButton button)
    769294{
     
    772297
    773298void
    774 CMSWindowsKeyState::fakeKeyRepeat(KeyID id, KeyModifierMask mask,
     299CPMKeyState::fakeKeyRepeat(KeyID id, KeyModifierMask mask,
    775300                                SInt32 count, KeyButton button)
    776301{
     
    779304
    780305bool
    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         }
     306CPMKeyState::fakeCtrlAltDel()
     307{
     308    fakeKeyDown(kKeyDelete, KeyModifierControl | KeyModifierAlt, virtualKeyToButton(VK_DELETE));
    818309}
    819310
    820311KeyModifierMask
    821 CMSWindowsKeyState::pollActiveModifiers() const
     312CPMKeyState::pollActiveModifiers() const
    822313{
    823314        KeyModifierMask state = 0;
     
    832323
    833324        // we can get toggle modifiers from the system
    834         if ((GetKeyState(VK_CAPITAL) & 0x01) != 0) {
     325        if (WinGetKeyState(HWND_DESKTOP, VK_CAPITAL) & 1) {
    835326                state |= KeyModifierCapsLock;
    836327        }
    837         if ((GetKeyState(VK_NUMLOCK) & 0x01) != 0) {
     328        if (WinGetKeyState(HWND_DESKTOP, VK_NUMLOCK) & 1) {
    838329                state |= KeyModifierNumLock;
    839330        }
    840         if ((GetKeyState(VK_SCROLL) & 0x01) != 0) {
     331        if (WinGetKeyState(HWND_DESKTOP, VK_SCROLL) & 1) {
    841332                state |= KeyModifierScrollLock;
    842333        }
     
    846337
    847338SInt32
    848 CMSWindowsKeyState::pollActiveGroup() const
     339CPMKeyState::pollActiveGroup() const
    849340{
    850341        // determine the thread that'll receive this event
    851342        HWND  targetWindow = GetForegroundWindow();
    852         DWORD targetThread = GetWindowThreadProcessId(targetWindow, NULL);
     343        ULONG targetThread = GetWindowThreadProcessId(targetWindow, NULL);
    853344
    854345        // get keyboard layout for the thread
     
    866357
    867358void
    868 CMSWindowsKeyState::pollPressedKeys(KeyButtonSet& pressedKeys) const
     359CPMKeyState::pollPressedKeys(KeyButtonSet& pressedKeys) const
    869360{
    870361        BYTE keyState[256];
     
    878369
    879370void
    880 CMSWindowsKeyState::getKeyMap(CKeyMap& keyMap)
     371CPMKeyState::getKeyMap(CKeyMap& keyMap)
    881372{
    882373        // update keyboard groups
     
    1185676
    1186677void
    1187 CMSWindowsKeyState::fakeKey(const Keystroke& keystroke)
     678CPMKeyState::fakeKey(const Keystroke& keystroke)
    1188679{
    1189680        switch (keystroke.m_type) {
     
    1241732
    1242733KeyModifierMask&
    1243 CMSWindowsKeyState::getActiveModifiersRValue()
     734CPMKeyState::getActiveModifiersRValue()
    1244735{
    1245736        if (m_useSavedModifiers) {
     
    1252743
    1253744bool
    1254 CMSWindowsKeyState::getGroups(GroupList& groups) const
     745CPMKeyState::getGroups(GroupList& groups) const
    1255746{
    1256747        // get keyboard layouts
     
    1275766
    1276767void
    1277 CMSWindowsKeyState::setWindowGroup(SInt32 group)
     768CPMKeyState::setWindowGroup(SInt32 group)
    1278769{
    1279770        HWND targetWindow = GetForegroundWindow();
     
    1294785
    1295786void
    1296 CMSWindowsKeyState::fixKeys()
     787CPMKeyState::fixKeys()
    1297788{
    1298789        // fake key releases for the windows keys if we think they're
     
    1347838                m_fixTimer = EVENTQUEUE->newTimer(0.1, NULL);
    1348839                EVENTQUEUE->adoptHandler(CEvent::kTimer, m_fixTimer,
    1349                                                         new TMethodEventJob<CMSWindowsKeyState>(
    1350                                                                 this, &CMSWindowsKeyState::handleFixKeys));
     840                                                        new TMethodEventJob<CPMKeyState>(
     841                                                                this, &CPMKeyState::handleFixKeys));
    1351842        }
    1352843        else if (!fix && m_fixTimer != NULL) {
     
    1359850
    1360851void
    1361 CMSWindowsKeyState::handleFixKeys(const CEvent&, void*)
     852CPMKeyState::handleFixKeys(const CEvent&, void*)
    1362853{
    1363854        fixKeys();
     
    1365856
    1366857KeyID
    1367 CMSWindowsKeyState::getKeyID(UINT virtualKey, KeyButton button)
     858CPMKeyState::getKeyID(UINT virtualKey, KeyButton button)
    1368859{
    1369860        if ((button & 0x100u) != 0) {
     
    1374865
    1375866KeyID
    1376 CMSWindowsKeyState::getIDForKey(CKeyMap::KeyItem& item,
     867CPMKeyState::getIDForKey(CKeyMap::KeyItem& item,
    1377868                                KeyButton button, UINT virtualKey,
    1378869                                PBYTE keyState, HKL hkl) const
     
    1412903
    1413904void
    1414 CMSWindowsKeyState::addKeyEntry(CKeyMap& keyMap, CKeyMap::KeyItem& item)
     905CPMKeyState::addKeyEntry(CKeyMap& keyMap, CKeyMap::KeyItem& item)
    1415906{
    1416907        keyMap.addKeyEntry(item);
Note: See TracChangeset for help on using the changeset viewer.