|
|
/*++
Copyright (c) 1994-1998, Microsoft Corporation All rights reserved.
Module Name:
keybd.c
Abstract:
This module contains the main routines for the Keyboard applet.
Revision History:
--*/
//
// Include Files.
//
#include "main.h"
#include "rc.h"
#include "applet.h"
#include <regstr.h>
#include <cplext.h>
#include "util.h"
#include <intlid.h>
//
// Constant Declarations.
//
#define MAX_PAGES 32 // limit on number of pages
const HWPAGEINFO c_hpiKeybd = { // Keyboard device class
{ 0x4d36e96bL, 0xe325, 0x11ce, { 0xbf, 0xc1, 0x08, 0x00, 0x2b, 0xe1, 0x03, 0x18 } },
// Keyboard troubleshooter command line
IDS_KEYBD_TSHOOT, };
//
// Global Variables.
//
//
// Location of prop sheet hooks in the registry.
//
static const TCHAR sc_szRegKeybd[] = REGSTR_PATH_CONTROLSFOLDER TEXT("\\Keyboard");
//
// Function Prototypes.
//
INT_PTR CALLBACK KeyboardSpdDlg( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
////////////////////////////////////////////////////////////////////////////
//
// _AddKeybdPropSheetPage
//
// Adds a property sheet page.
//
////////////////////////////////////////////////////////////////////////////
BOOL CALLBACK _AddKeybdPropSheetPage( HPROPSHEETPAGE hpage, LPARAM lParam) { PROPSHEETHEADER *ppsh = (PROPSHEETHEADER *)lParam;
if (hpage && ppsh->nPages < MAX_PAGES) { ppsh->phpage[ppsh->nPages++] = hpage; return (TRUE); } return (FALSE); }
////////////////////////////////////////////////////////////////////////////
//
// KeybdApplet
//
////////////////////////////////////////////////////////////////////////////
int KeybdApplet( HINSTANCE instance, HWND parent, LPCTSTR cmdline) { HPROPSHEETPAGE rPages[MAX_PAGES]; PROPSHEETPAGE psp; PROPSHEETHEADER psh; HPSXA hpsxa; int Result;
//
// Make the initial page.
//
psh.dwSize = sizeof(psh); psh.dwFlags = PSH_PROPTITLE; psh.hwndParent = parent; psh.hInstance = instance; psh.pszCaption = MAKEINTRESOURCE(IDS_KEYBD_TITLE); psh.nPages = 0;
if (cmdline) { psh.nStartPage = lstrlen(cmdline) ? StrToLong(cmdline) : 0; } else { psh.nStartPage = 0; } psh.phpage = rPages;
//
// Load any installed extensions.
//
hpsxa = SHCreatePropSheetExtArray(HKEY_LOCAL_MACHINE, sc_szRegKeybd, 8);
//
// Add the Speed page.
//
psp.dwSize = sizeof(psp); psp.dwFlags = PSP_DEFAULT; psp.hInstance = instance; psp.pszTemplate = MAKEINTRESOURCE(DLG_KEYBD_SPEED); psp.pfnDlgProc = KeyboardSpdDlg; psp.lParam = 0;
_AddKeybdPropSheetPage(CreatePropertySheetPage(&psp), (LPARAM)&psh);
//
// Add the Hardware page (not replaceable).
//
_AddKeybdPropSheetPage(CreateHardwarePage(&c_hpiKeybd), (LPARAM)&psh);
//
// Add any extra pages that the extensions want in there.
//
if (hpsxa) { UINT cutoff = psh.nPages; UINT added = SHAddFromPropSheetExtArray( hpsxa, _AddKeybdPropSheetPage, (LPARAM)&psh );
if (psh.nStartPage >= cutoff) { psh.nStartPage += added; } }
//
// Invoke the Property Sheets.
//
switch (PropertySheet(&psh)) { case ( ID_PSRESTARTWINDOWS ) : { Result = APPLET_RESTART; break; } case ( ID_PSREBOOTSYSTEM ) : { Result = APPLET_REBOOT; break; } default : { Result = 0; break; } }
//
// Free any loaded extensions.
//
if (hpsxa) { SHDestroyPropSheetExtArray(hpsxa); }
return (Result); }
|