Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

251 lines
9.2 KiB

// ********************************************************************
// Main.c
// Main init entry into the Human Accessibilities Control panel applet
// ********************************************************************
#include <assert.h>
#pragma comment(lib, "comctl32.lib")
#include "Access.h"
HINSTANCE g_hinst = NULL;
BOOL OpenAccessPropertySheet (HWND, int);
// Define our help data structure
const DWORD g_aIds[] = {
#if 1
IDC_NO_HELP_1, NO_HELP,
IDC_STK_ENABLE, IDH_STICKYKEYS_ENABLE,
IDC_SK_TEXT, IDH_STICKYKEYS_ENABLE,
IDC_STK_SETTINGS, IDH_STICKYKEYS_SETTINGS,
IDC_FK_ENABLE, IDH_FILTERKEYS_ENABLE,
IDC_FK_TEXT, IDH_FILTERKEYS_ENABLE,
IDC_FK_SETTINGS, IDH_FILTERKEYS_SETTINGS,
IDC_TK_ENABLE, IDH_TOGGLEKEYS_ENABLE,
IDC_TK_TEXT, IDH_TOGGLEKEYS_ENABLE,
IDC_TK_SETTINGS, IDH_TOGGLEKEYS_SETTINGS,
IDC_STK_HOTKEY, IDH_STICKYKEYS_HOTKEY,
IDC_STK_TEXT, IDH_STICKYKEYS_HOTKEY,
IDC_STK_LOCK, IDH_STICKYKEYS_LOCK,
IDC_STK_2KEYS, IDH_STICKYKEYS_2KEYS,
IDC_STK_SOUNDMOD, IDH_STICKYKEYS_SOUND,
IDC_STK_STATUS, IDH_STICKYKEYS_STATUS,
IDC_FK_HOTKEY, IDH_FILTERKEYS_HOTKEY,
IDC_FK_TEXT1, IDH_FILTERKEYS_HOTKEY,
IDC_FK_REPEAT, IDH_FILTERKEYS_REPEATKEYS,
IDC_BK_SETTINGS, IDH_FILTERKEYS_BKSETTINGS,
IDC_FK_BOUNCE, IDH_FILTERKEYS_BOUNCEKEYS,
IDC_RK_SETTINGS, IDH_FILTERKEYS_SETTINGS_REPEAT,
IDC_FK_TESTBOX, IDH_FILTERKEYS_TESTBOX,
IDC_FK_SOUND, IDH_FILTERKEYS_BEEPONKEYPRESS,
IDC_FK_STATUS, IDH_FILTERKEYS_SPAWNSTATUSAPP,
IDC_RK_NOREPEAT, IDH_FILTERKEYS_NO_REPEAT,
IDC_RK_REPEAT, IDH_FILTERKEYS_SLOW,
IDC_RK_DELAYRATE_LBL, IDH_REPEAT_DELAY,
IDC_CMB_RK_DELAYRATE, IDH_FILTERKEYS_DELAY,
IDC_RK_REPEATRATE_LBL, IDH_REPEAT_RATE,
IDC_CMB_RK_REPEATRATE, IDH_FILTERKEYS_RATE,
IDC_RK_ACCEPTRATE_LBL, IDH_VALID_KEY_TIME,
IDC_CMB_RK_ACCEPTRATE, IDH_FILTERKEYS_KEYSPEED,
IDC_RK_TESTBOX, IDH_FILTERKEYS_TEST1,
IDC_BK_TIME_LBL1, IDH_FILTERKEYS_IGNORE_REPEAT,
IDC_BK_TIME_LBL2, IDH_KEY_PRESS_TIME,
IDC_CMB_BK_BOUNCERATE, IDH_FILTERKEYS_IGNORE_REPEAT,
IDC_BK_TESTBOX, IDH_FILTERKEYS_TEST2,
IDC_TK_HOTKEY, IDH_TOGGLEKEYS_HOTKEY,
IDC_TK_TEXT1, IDH_TOGGLEKEYS_HOTKEY,
IDC_SS_ENABLE_SOUND, IDH_SOUNDSENTRY_ENABLE,
IDC_SS_TEXT, IDH_SOUNDSENTRY_ENABLE,
IDC_SS_ENABLE_SHOW, IDH_SHOWSOUNDS_ENABLE,
IDC_SS_TEXT1, IDH_SHOWSOUNDS_ENABLE,
IDC_SS_WINDOWED, IDH_SOUNDSENTRY_WINDOWED,
IDC_SS_CHOOSE, IDH_SOUNDSENTRY_WINDOWED,
IDC_HC_ENABLE, IDH_HIGHCONTRAST_ENABLE,
IDC_HC_TEXT, IDH_HIGHCONTRAST_ENABLE,
IDC_HC_SETTINGS, IDH_HIGHCONTRAST_SETTINGS,
IDC_HC_HOTKEY, IDH_HIGHCONTRAST_HOTKEY,
IDC_HC_TEXT1, IDH_HIGHCONTRAST_HOTKEY,
IDC_KCURSOR_RATE, IDH_KCURSOR_RATE,
IDC_KCUR_TEXT_RATE, IDH_KCURSOR_RATE,
IDC_KCUR_TEXT_NONE, IDH_KCURSOR_RATE,
IDC_KCUR_TEXT_FAST, IDH_KCURSOR_RATE,
IDC_KCURSOR_WIDTH, IDH_KCURSOR_WIDTH,
IDC_KCUR_TEXT_WIDTH, IDH_KCURSOR_WIDTH,
IDC_KCUR_TEXT_NARR, IDH_KCURSOR_WIDTH,
IDC_KCUR_TEXT_WIDE, IDH_KCURSOR_WIDTH,
IDC_KCURSOR_OPTS, IDH_KCURSOR_OPTS,
IDC_HC_DEFAULTSCHEME, IDH_HIGHCONTRAST_DEFAULTSCHEME,
IDC_HC_CURSCHEME, IDH_HIGHCONTRAST_DEFAULTSCHEME,
IDC_MK_ENABLE, IDH_MOUSEKEYS_ENABLE,
IDC_MK_TEXT, IDH_MOUSEKEYS_ENABLE,
IDC_MK_SETTINGS, IDH_MOUSEKEYS_SETTINGS,
IDC_MK_HOTKEY, IDH_MOUSEKEYS_HOTKEY,
IDC_MK_TEXT1, IDH_MOUSEKEYS_HOTKEY,
IDC_MK_TOPSPEED, IDH_MOUSEKEYS_MAXSPEED,
IDC_MK_SPEED, IDH_MOUSEKEYS_MAXSPEED,
IDC_MK_SPEED_LOW, IDH_MOUSEKEYS_MAXSPEED,
IDC_MK_SPEED_HIGH, IDH_MOUSEKEYS_MAXSPEED,
IDC_MK_ACCEL, IDH_MOUSEKEYS_ACCELERATION,
IDC_MK_ACCELER, IDH_MOUSEKEYS_ACCELERATION,
IDC_MK_ACCELER_SLOW, IDH_MOUSEKEYS_ACCELERATION,
IDC_MK_ACCELER_FAST, IDH_MOUSEKEYS_ACCELERATION,
IDC_MK_USEMODKEYS, IDH_MOUSEKEYS_USEMODIFIERKEYS,
IDC_MK_NLOFF, IDH_MOUSEKEYS_NUMLOCKMODE,
IDC_MK_NLON, IDH_MOUSEKEYS_NUMLOCKMODE,
IDC_MK_TEXT2, IDH_MOUSEKEYS_NUMLOCKMODE,
IDC_MK_STATUS, IDH_MOUSEKEYS_SPAWNSTATUSAPP,
// IDC_SAVE_SETTINGS, IDH_ACCESS_SAVESETTINGS,
IDC_TO_ENABLE, IDH_ACCESS_TIMEOUT,
IDC_TO_TIMEOUTVAL, IDH_ACCESS_TIMEOUT,
IDC_WARNING_SOUND, IDH_ACCESS_CONFIRMHOTKEY,
IDC_SOUND_ONOFF, IDH_ACCESS_SOUNDONHOTKEY,
IDC_SK_ENABLE, IDH_SERIALKEYS_ENABLE,
IDC_SERKEY_TEXT, IDH_SERIALKEYS_ENABLE,
IDC_SK_SETTINGS, IDH_SERIALKEYS_SETTINGS,
IDC_SK_PORT, IDH_SERIALKEYS_SERIAL,
IDC_SK_PORTEXT, IDH_SERIALKEYS_SERIAL,
IDC_SK_BAUD, IDH_SERIALKEYS_BAUD,
IDC_SK_BAUD_TEXT, IDH_SERIALKEYS_BAUD,
IDC_CHECK1, IDH_SHOW_KEYBOARD_HELP,
IDC_ADMIN_LOGON, 2010,
IDC_ADMIN_DEFAULT, 2011,
#endif
0, 0
} ;
// ************************************************************************
// Our entry point...
// ************************************************************************
BOOL WINAPI DllMain (HANDLE hinstDll, DWORD dwReason, LPVOID lpReserved) {
switch (dwReason) {
case DLL_PROCESS_ATTACH: g_hinst = hinstDll; break;
case DLL_PROCESS_DETACH: break;
case DLL_THREAD_DETACH: break;
case DLL_THREAD_ATTACH: break;
}
return(TRUE);
}
#define SPI_OFF(T, M) \
{ \
T s; \
s.cbSize = sizeof(T); \
if (!SystemParametersInfo(SPI_GET##T, s.cbSize, &s, 0)) \
return E_FAIL; \
\
if (s.dwFlags & M) \
{ \
s.dwFlags &= ~M; \
if (!SystemParametersInfo(SPI_SET##T, s.cbSize, &s, 0)) \
return E_FAIL; \
} \
}
HRESULT WINAPI DllUnregisterServer(void)
{
SPI_OFF(FILTERKEYS, FKF_HOTKEYACTIVE)
SPI_OFF(HIGHCONTRAST, HCF_HOTKEYACTIVE)
SPI_OFF(MOUSEKEYS, MKF_HOTKEYACTIVE)
SPI_OFF(STICKYKEYS, SKF_HOTKEYACTIVE)
SPI_OFF(TOGGLEKEYS, TKF_HOTKEYACTIVE)
return S_OK;
}
HRESULT WINAPI DllRegisterServer(void)
{
return S_OK;
}
// This is the RUNDLLPROC prototype
// I got it from Win95 source code \WIN\CORE\SHELL\CPLS\MSPRINT\MSPRINT\MSPRINT.C
// It should be in some Windows header file but I could not find it!
typedef VOID (WINAPI *RUNDLLPROC)(HWND, HINSTANCE, LPTSTR, int);
VOID WINAPI DebugMain (HWND hwnd, HINSTANCE hinstExe, LPSTR pszCmdLine, int nCmdShow) {
OpenAccessPropertySheet(hwnd, 0);
}
/////////////////////////////////////////////////////////////////////////////
// CplApplet:
// The main applet information manager.
/////////////////////////////////////////////////////////////////////////////
LONG WINAPI CPlApplet (HWND hwnd, UINT uMsg, LPARAM lParam1, LPARAM lParam2) {
LONG lRetVal = TRUE;
switch (uMsg) {
case CPL_INIT:
// If initialization is successful, return TRUE; else FALSE
break;
case CPL_GETCOUNT:
// There is only 1 applet in this DLL
lRetVal = 1;
break;
case CPL_INQUIRE:
Assert(lParam1 == 0); // Applet number in the DLL
#define lpOldCPlInfo ((LPCPLINFO) lParam2)
lpOldCPlInfo->idIcon = IDI_ACCESS;
lpOldCPlInfo->idName = IDS_ACCESS;
lpOldCPlInfo->idInfo = IDS_ACCESSINFO;
lpOldCPlInfo->lData = 0;
break;
case CPL_NEWINQUIRE:
Assert(lParam1 == 0); // Applet number in the DLL
#define lpCPlInfo ((LPNEWCPLINFO) lParam2)
lpCPlInfo->dwSize = sizeof(NEWCPLINFO);
lpCPlInfo->dwFlags = 0;
lpCPlInfo->dwHelpContext = 0;
lpCPlInfo->lData = 0;
lpCPlInfo->hIcon = LoadIcon(g_hinst, MAKEINTRESOURCE(IDI_ACCESS));
LoadString(g_hinst, IDS_ACCESS, lpCPlInfo->szName, ARRAY_SIZE(lpCPlInfo->szName));
LoadString(g_hinst, IDS_ACCESSINFO, lpCPlInfo->szInfo, ARRAY_SIZE(lpCPlInfo->szInfo));
lpCPlInfo->szHelpFile[0] = 0;
#undef lpCPlInfo
lRetVal = 1; // Tell the system that we responded to this message
// Returning 1 causes the system to NOT send the CPL_INQUIRE message
break;
case CPL_STARTWPARMS:
Assert(lParam1 == 0); // Applet number in the DLL
OpenAccessPropertySheet(hwnd, (int) ((* (PBYTE) lParam2) - 0x31));
lRetVal = TRUE;
break;
case CPL_DBLCLK:
Assert(lParam1 == 0); // Applet number in the DLL
OpenAccessPropertySheet(hwnd, 0);
lRetVal = 0; // Success
break;
case CPL_EXIT:
// Free up any allocations of resources made.
// If de-initialization is successful, return TRUE; else FALSE
break;
}
return(lRetVal);
}
// ***********************************************************************
// FeatureUnavailible
// Show the "I can't do that" dialog box for features that are currently
// disabled.
// ***********************************************************************
void FeatureUnavailible (HWND hwnd) {
TCHAR szTitle[100];
TCHAR szText[256];
if (LoadString(g_hinst, IDS_UNAVAIL_TITLE, szTitle, ARRAY_SIZE(szTitle)))
if (LoadString(g_hinst, IDS_UNAVAIL_TEXT, szText, ARRAY_SIZE(szText)))
MessageBox(hwnd, szText, szTitle, MB_OK);
}
///////////////////////////////// End of File /////////////////////////////////