「ハードウエアの安全な取り外し」ウインドウを表示する

検索エンジンから来る方はプログラミングには興味なく、「ハードウエアの安全な取り外し」ウインドウが表示できなくて困っているようですので以下のソフトを用意しました。
ShowEjectDeviceWindow.exe
このソフトをダウンロード後、実行すると、「ハードウエアの安全な取り外し」ウインドウが表示されます。Windows Vistaでも利用可能です。

test57_02.gif
「ハードウエアの安全な取り外し」ウインドウを表示するlコマンドとして

rundll32 shell32.dll,Control_RunDLL hotplug.dll

がよく知られている。プログラムの中からこれを呼んでもいいのだが、ここでは直接hotplug.dll内の関数にアクセスして表示している。直接利用すると親ウインドウを設定できるというメリットがある。


test57_01.gif
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();
}

プロジェクトファイルをダウンロード


カテゴリー「システム情報」 のエントリー