/***** Normal use, default configuration *****/ // global keyboard hook entry #define WM_GLOBAL_KBDHOOK WM_USER+3 BOOL APIENTRY RegisterHookSendWindow(HWND hwnd, UINT uiMsg); // hidden switch window information #define SWITCH_TIMER 1015 void SwitchOnCreate(HWND hWnd); void SwitchOnEndSession(HWND hWnd); void SwitchOnTimer(HWND hWnd); void SwitchOnPollMsg(HWND hWnd); BOOL SwitchOnCopyData(WPARAM wParam, LPARAM lParam); // msswch.dll header information typedef HANDLE HSWITCHPORT; HSWITCHPORT APIENTRY swchOpenSwitchPort( HWND hWnd, DWORD dwPortStyle ); #define PS_POLLING 1 #define PS_EVENTS 2 BOOL APIENTRY swchCloseSwitchPort( HSWITCHPORT hSwitchPort ); #define NUM_SWITCHES 6 #define BIT_SWITCHES 0x003F #define SWITCH_NONE 0x0000 #define SWITCH_1 0x0001 #define SWITCH_2 0x0002 #define SWITCH_3 0x0004 #define SWITCH_4 0x0008 #define SWITCH_5 0x0010 #define SWITCH_6 0x0020 // These messages need to be reserved with Microsoft #define SW_SWITCHDOWNBASE 0x00E0 #define SW_SWITCH1DOWN (SW_SWITCHDOWNBASE + 1) #define SW_SWITCH2DOWN (SW_SWITCHDOWNBASE + 2) #define SW_SWITCH3DOWN (SW_SWITCHDOWNBASE + 3) #define SW_SWITCH4DOWN (SW_SWITCHDOWNBASE + 4) #define SW_SWITCH5DOWN (SW_SWITCHDOWNBASE + 5) #define SW_SWITCH6DOWN (SW_SWITCHDOWNBASE + 6) // These messages need to be reserved with Microsoft #define SW_SWITCHUPBASE 0x00F0 #define SW_SWITCH1UP (SW_SWITCHUPBASE + 1) #define SW_SWITCH2UP (SW_SWITCHUPBASE + 2) #define SW_SWITCH3UP (SW_SWITCHUPBASE + 3) #define SW_SWITCH4UP (SW_SWITCHUPBASE + 4) #define SW_SWITCH5UP (SW_SWITCHUPBASE + 5) #define SW_SWITCH6UP (SW_SWITCHUPBASE + 6) /***** Configuration *****/ typedef HANDLE HSWITCHDEVICE; // make this a dword rather then a handle this is to make this 64 bit portable typedef DWORD HJOYDEVICE; // This message needs to be reserved with Microsoft #define SW_SWITCHCONFIGCHANGED 0x00D0 #define SC_TYPE_COM 1 #define SC_TYPE_LPT 2 #define SC_TYPE_JOYSTICK 3 #define SC_TYPE_KEYS 4 // Not defined yet #define SC_TYPE_USB 5 #define SC_TYPE_1394 6 typedef struct _SWITCHLIST { DWORD dwSwitchCount; HSWITCHDEVICE hsd[ANYSIZE_ARRAY]; } SWITCHLIST, *PSWITCHLIST; typedef struct _SWITCHCONFIG_LPT { DWORD dwReserved1; // possible future Status register preset DWORD dwReserved2; // possible future Data register preset } SWITCHCONFIG_LPT, *PSWITCHCONFIG_LPT; typedef struct _SWITCHCONFIG_JOYSTICK { DWORD dwJoySubType; DWORD dwJoyThresholdMinX; DWORD dwJoyThresholdMaxX; DWORD dwJoyThresholdMinY; DWORD dwJoyThresholdMaxY; DWORD dwJoyHysteresis; } SWITCHCONFIG_JOYSTICK, *PSWITCHCONFIG_JOYSTICK; typedef struct _SWITCHCONFIG_KEYS { DWORD dwKeySwitch1; DWORD dwKeySwitch2; } SWITCHCONFIG_KEYS, *PSWITCHCONFIG_KEYS; typedef struct _SWITCHCONFIG_USB { // *** NOT DEFINED YET *** DWORD dwReserved; } SWITCHCONFIG_USB, *PSWITCHCONFIG_USB; typedef struct _SWITCHCONFIG_IEEE1394 { // *** NOT DEFINED YET *** DWORD dwReserved; } SWITCHCONFIG_IEEE1394, *PSWITCHCONFIG_IEEE1394; typedef struct _SWITCHCONFIG_COM { DWORD dwComStatus; } SWITCHCONFIG_COM, *PSWITCHCONFIG_COM; typedef struct _SWITCHCONFIG { DWORD cbSize; UINT uiDeviceType; UINT uiDeviceNumber; DWORD dwFlags; DWORD dwSwitches; DWORD dwErrorCode; union { SWITCHCONFIG_COM Com; SWITCHCONFIG_LPT Lpt; SWITCHCONFIG_JOYSTICK Joystick; SWITCHCONFIG_KEYS Keys; SWITCHCONFIG_USB USB; SWITCHCONFIG_IEEE1394 IEEE1394; } u; } SWITCHCONFIG, *PSWITCHCONFIG; HSWITCHDEVICE swchGetSwitchDevice( HSWITCHPORT hSwitchPort, UINT uiDeviceType, UINT uiDeviceNumber ); UINT swchGetDeviceType( HSWITCHPORT hSwitchPort, HSWITCHDEVICE hsd ); UINT swchGetPortNumber( HSWITCHPORT hSwitchPort, HSWITCHDEVICE hsd ); BOOL swchGetSwitchConfig( HSWITCHPORT hSwitchPort, HSWITCHDEVICE hsd, PSWITCHCONFIG psc ); BOOL swchSetSwitchConfig( HSWITCHPORT hSwitchPort, HSWITCHDEVICE hsd, PSWITCHCONFIG psc ); //v-mjgran: API to modify return value in keyboard hook. Avoid to send the scan char. void APIENTRY swchCheckForScanChar (BOOL fCheckForScanKey); LRESULT CALLBACK swcKeyboardHookProc( int nCode, WPARAM wParam, LPARAM lParam ); // bitflags #define SC_FLAG_ACTIVE 0x00000001 #define SC_FLAG_DEFAULT 0x00000002 #define SC_FLAG_ERROR 0x00000004 #define SC_FLAG_UNAVAILABLE 0x00000080 // bitflags #define SC_COM_DTR 0x00000010 #define SC_COM_RTS 0x00000020 #define SC_COM_DEFAULT SC_COM_RTS // bitflags #define SC_LPT_STROBE 0x00000100 #define SC_LPT_AF 0x00000200 #define SC_LPT_INIT 0x00000400 #define SC_LPT_SLCTIN 0x00000800 #define SC_LPT_DEFAULT 0 #define SC_LPTDATA_DEFAULT 0x000000FF #define SC_JOY_BUTTONS 0 #define SC_JOY_XYSWITCH 1 #define SC_JOY_XYANALOG 2 #define SC_JOY_DEFAULT SC_JOY_BUTTONS #define SC_JOYVALUE_DEFAULT 0 // Error return values #define SWCHERR_NO_ERROR 0 #define SWCHERR_ERROR 1 #define SWCHERR_INVALID_PARAMETER 2 #define SWCHERR_MAXIMUM_USERS 3 #define SWCHERR_ALREADY_OPEN 4 #define SWCHERR_NULL_POINTER 5 #define SWCHERR_INVALID_BUFFER_SIZE 6 #define SWCHERR_ALLOCATING_MEMORY 7