検索エンジンから来る方はプログラミングには興味なく、「ハードウエアの安全な取り外し」ウインドウが表示できなくて困っているようですので以下のソフトを用意しました。
「ShowEjectDeviceWindow.exe」
このソフトをダウンロード後、実行すると、「ハードウエアの安全な取り外し」ウインドウが表示されます。Windows Vistaでも利用可能です。
![]()
「ハードウエアの安全な取り外し」ウインドウを表示するlコマンドとして
rundll32 shell32.dll,Control_RunDLL hotplug.dll
がよく知られている。プログラムの中からこれを呼んでもいいのだが、ここでは直接hotplug.dll内の関数にアクセスして表示している。直接利用すると親ウインドウを設定できるというメリットがある。
![]()
hotplug.dll内の「HotPlugDeviceTree」という関数を利用している。この関数の第一引数は親ウインドウのハンドル指定、第二引数は不明で0を指定、第三引数はTRUEを指定する。もしも第三引数にFALSEを指定すると...図のようにデバイスが一覧された画面が開く。ただしこの方法はWindows Vistaでは利用できない。Vistaでは「HotPlugDeviceTree」という関数が実装されなくなったためだ。
ちなみにデバイスを取り外す正攻法は「CM_Request_Device_Eject_Ex」を利用する方法だ。
//
//「ハードウエアの安全な取り外し」ウインドウを開く
//
//対応OSは不明
//
bool ShowHotPlugDeviceTree(HWND hParentWnd=NULL)
{
HMODULE hDLL;
//戻り値は2が返る。第2、第3引数は(0,TRUE)にする
int (CALLBACK* pfnHotPlugDeviceTree)(HWND,DWORD,BOOL);
hDLL = ::LoadLibrary(_T("hotplug.dll"));
if(hDLL == NULL)
return false;
(*(FARPROC*)&pfnHotPlugDeviceTree) = ::GetProcAddress(hDLL,"HotPlugDeviceTree");
if(pfnHotPlugDeviceTree)
pfnHotPlugDeviceTree(hParentWnd,0,TRUE);
::FreeLibrary(hDLL);
return true;
}
void Test(void)
{
ShowHotPlugDeviceTree();
}
