// SystemDialog.cpp: implementation of the CSystemDialog class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "SystemDialog.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
#define NUM_SYSTEM_DIALOGS 16
#ifdef _UNICODE
typedef void (_stdcall *PFUNCTION_ENTRYPOINT)(
HWND hwndStub,
HINSTANCE hAppInstance,
LPWSTR lpCmdLine,
int nCmdShow
);
#else
typedef void (_stdcall *PFUNCTION_ENTRYPOINT)(
HWND hwndStub,
HINSTANCE hAppInstance,
LPSTR lpCmdLine,
int nCmdShow
);
#endif
//iSystemDialogID, cDllName, cFuncName, cCommand
static SystemDialog SDArray[NUM_SYSTEM_DIALOGS]=
#ifndef _UNICODE //ANSI
{
{SD_FORMAT, _T("Shell32.dll"), "SHFormatDrive", ""},
{SD_INTERNET_OPTIONS, _T("Shell32.dll"), "Control_RunDLLA", "inetcpl.cpl,,0"},
{SD_ADD_REMOVE_PROGRAMS, _T("Shell32.dll"), "Control_RunDLLA", "appwiz.cpl"},
{SD_DATE_TIME, _T("Shell32.dll"), "Control_RunDLLA", "timedate.cpl"},
{SD_DISPLAY, _T("Shell32.dll"), "Control_RunDLLA", "desk.cpl"},
{SD_MODEM, _T("Shell32.dll"), "Control_RunDLLA", "modem.cpl"},
{SD_MULTIMEDIA, _T("Shell32.dll"), "Control_RunDLLA", "mmsys.cpl,,0"},
{SD_MOUSE, _T("Shell32.dll"), "Control_RunDLLA", "main.cpl @0"},
{SD_NETWORK, _T("Shell32.dll"), "Control_RunDLLA", "netcpl.cpl"},
{SD_PASSWORD, _T("Shell32.dll"), "Control_RunDLLA", "password.cpl"},
{SD_SYSTEM, _T("Shell32.dll"), "Control_RunDLLA", "sysdm.cpl,,0"},
{SD_REGIONAL_SETTINGS, _T("Shell32.dll"), "Control_RunDLLA", "intl.cpl,,0"},
{SD_SOUNDS, _T("Shell32.dll"), "Control_RunDLLA", "mmsys.cpl @1"},
{SD_GAME_CONTROLLERS, _T("Shell32.dll"), "Control_RunDLLA", "joy.cpl"},
{SD_KEYBOARD, _T("Shell32.dll"), "Control_RunDLLA", "main.cpl @1"},
{SD_DEVICE_MANAGER, _T("DevMgr.dll"), "DeviceManager_ExecuteA", " " /*set device ID here*/}
};
#else //UNICODE
{
{SD_FORMAT, _T("Shell32.dll"), "SHFormatDrive", ""},
{SD_INTERNET_OPTIONS, _T("Shell32.dll"), "Control_RunDLLW", "inetcpl.cpl,,0"},
{SD_ADD_REMOVE_PROGRAMS, _T("Shell32.dll"), "Control_RunDLLW", "appwiz.cpl"},
{SD_DATE_TIME, _T("Shell32.dll"), "Control_RunDLLW", "timedate.cpl"},
{SD_DISPLAY, _T("Shell32.dll"), "Control_RunDLLW", "desk.cpl"},
{SD_MODEM, _T("Shell32.dll"), "Control_RunDLLW", "modem.cpl"},
{SD_MULTIMEDIA, _T("Shell32.dll"), "Control_RunDLLW", "mmsys.cpl,,0"},
{SD_MOUSE, _T("Shell32.dll"), "Control_RunDLLW", "main.cpl @0"},
{SD_NETWORK, _T("Shell32.dll"), "Control_RunDLLW", "netcpl.cpl"},
{SD_PASSWORD, _T("Shell32.dll"), "Control_RunDLLW", "password.cpl"},
{SD_SYSTEM, _T("Shell32.dll"), "Control_RunDLLW", "sysdm.cpl,,0"},
{SD_REGIONAL_SETTINGS, _T("Shell32.dll"), "Control_RunDLLW", "intl.cpl,,0"},
{SD_SOUNDS, _T("Shell32.dll"), "Control_RunDLLW", "mmsys.cpl @1"},
{SD_GAME_CONTROLLERS, _T("Shell32.dll"), "Control_RunDLLW", "joy.cpl"},
{SD_KEYBOARD, _T("Shell32.dll"), "Control_RunDLLW", "main.cpl @1"},
{SD_DEVICE_MANAGER, _T("DevMgr.dll"), "DeviceManager_ExecuteA", " " /*set device ID here*/}
};
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CSystemDialog::CSystemDialog()
{
}
CSystemDialog::~CSystemDialog()
{
}
void CSystemDialog::DoModal(int iDialogID, HWND hParent)
{
for (int i=0; i<NUM_SYSTEM_DIALOGS; i++)
{
if (iDialogID==SDArray[i].iSystemDialogID)
{
PFUNCTION_ENTRYPOINT pEntryPoint=NULL;
HINSTANCE hInst=AfxGetInstanceHandle();
HMODULE hModule = LoadLibrary(SDArray[i].cDllName);
if (hModule)
{
pEntryPoint = (PFUNCTION_ENTRYPOINT) GetProcAddress(hModule, SDArray[i].cFuncName);
}
if (pEntryPoint)
{
pEntryPoint(hParent, hInst, SDArray[i].cCommand, SW_SHOW);
}
break;
}
}
}