가끔 트레이에 장치제거 관련 아이콘이 종종 사라져서 실행 프로그램으로 하나 만들어보았네요..^^
Window XP에서만 테스트 해봄
어느 사이트에서 몇가지 자료를 모아서 한가지만 적용해 보았습니다.
어쩌면 이곳에서 자료를 보았을수도 있구요...^^
#define NUM_SYSTEM_DIALOGS 18
#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, "Shell32.dll", "SHFormatDrive", ""},
{SD_INTERNET_OPTIONS, "Shell32.dll", "Control_RunDLLA", "inetcpl.cpl,,0"},
{SD_ADD_REMOVE_PROGRAMS, "Shell32.dll", "Control_RunDLLA", "appwiz.cpl"},
{SD_DATE_TIME, "Shell32.dll", "Control_RunDLLA", "timedate.cpl"},
{SD_DISPLAY, "Shell32.dll", "Control_RunDLLA", "desk.cpl"},
{SD_MODEM, "Shell32.dll", "Control_RunDLLA", "modem.cpl"},
{SD_MULTIMEDIA, "Shell32.dll", "Control_RunDLLA", "mmsys.cpl,,0"},
{SD_MOUSE, "Shell32.dll", "Control_RunDLLA", "main.cpl @0"},
{SD_NETWORK, "Shell32.dll", "Control_RunDLLA", "netcpl.cpl"},
{SD_PASSWORD, "Shell32.dll", "Control_RunDLLA", "password.cpl"},
{SD_SYSTEM, "Shell32.dll", "Control_RunDLLA", "sysdm.cpl,,0"},
{SD_REGIONAL_SETTINGS, "Shell32.dll", "Control_RunDLLA", "intl.cpl,,0"},
{SD_SOUNDS, "Shell32.dll", "Control_RunDLLA", "mmsys.cpl @1"},
{SD_GAME_CONTROLLERS, "Shell32.dll", "Control_RunDLLA", "joy.cpl"},
{SD_KEYBOARD, "Shell32.dll", "Control_RunDLLA", "main.cpl @1"},
{SD_DEVICE_MANAGER, "DevMgr.dll", "DeviceManager_ExecuteA", " " /*set device ID here*/},
{SD_EJECT_DEVICE, "Shell32.dll", "Control_RunDLLA", "hotplug.dll"}, //Shell32.dll->Rundll32.exe
{SD_LOCKWORKSTATE, "USER32.dll", "LockWorkStation", ""}
};
#else //UNICODE
{
{SD_FORMAT, "Shell32.dll", "SHFormatDrive", ""},
{SD_INTERNET_OPTIONS, "Shell32.dll", "Control_RunDLLW", "inetcpl.cpl,,0"},
{SD_ADD_REMOVE_PROGRAMS, "Shell32.dll", "Control_RunDLLW", "appwiz.cpl"},
{SD_DATE_TIME, "Shell32.dll", "Control_RunDLLW", "timedate.cpl"},
{SD_DISPLAY, "Shell32.dll", "Control_RunDLLW", "desk.cpl"},
{SD_MODEM, "Shell32.dll", "Control_RunDLLW", "modem.cpl"},
{SD_MULTIMEDIA, "Shell32.dll", "Control_RunDLLW", "mmsys.cpl,,0"},
{SD_MOUSE, "Shell32.dll", "Control_RunDLLW", "main.cpl @0"},
{SD_NETWORK, "Shell32.dll", "Control_RunDLLW", "netcpl.cpl"},
{SD_PASSWORD, "Shell32.dll", "Control_RunDLLW", "password.cpl"},
{SD_SYSTEM, "Shell32.dll", "Control_RunDLLW", "sysdm.cpl,,0"},
{SD_REGIONAL_SETTINGS, "Shell32.dll", "Control_RunDLLW", "intl.cpl,,0"},
{SD_SOUNDS, "Shell32.dll", "Control_RunDLLW", "mmsys.cpl @1"},
{SD_GAME_CONTROLLERS, "Shell32.dll", "Control_RunDLLW", "joy.cpl"},
{SD_KEYBOARD, "Shell32.dll", "Control_RunDLLW", "main.cpl @1"},
{SD_DEVICE_MANAGER, "DevMgr.dll", "DeviceManager_ExecuteA", " " /*set device ID here*/},
{SD_EJECT_DEVICE, "Shell32.dll", "Control_RunDLLW", "hotplug.dll"},
{SD_LOCKWORKSTATE, "USER32.dll", "LockWorkStation", ""},
};
#endif
//-------------------------------------------------------------------------------
//① 설 명 :
//② 인 수 :
//③ 리 턴 :
//-------------------------------------------------------------------------------
void TSystemCall::DoModal(int iDialogID, HWND hParent)
{
for (int i=0; i<NUM_SYSTEM_DIALOGS; i++)
{
if (iDialogID==SDArray[i].iSystemDialogID)
{
PFUNCTION_ENTRYPOINT pEntryPoint=NULL;
HMODULE hModule = LoadLibrary(SDArray[i].cDllName);
if (hModule)
{
pEntryPoint = (PFUNCTION_ENTRYPOINT) GetProcAddress(hModule, SDArray[i].cFuncName);
}
if (pEntryPoint)
{
pEntryPoint(hParent, 0, SDArray[i].cCommand, SW_SHOW);
}
break;
}
}
}
|