[PR]

特殊フォルダを開く

戻る

 ごみ箱、タスクスケジューラなどの特殊フォルダを開く2つの方法について説明します。
 一つは関数 ShellExecuteEx() を利用する方法で、もう一つは CLSID パスを利用する方法です。

関数 ShellExecuteEx() を利用する方法

 関数 ShellExecuteEx() では、実行するファイルやフォルダの指定にアイテムIDリストを使用することができます。
 特殊フォルダのアイテムIDリストは、関数 SHGetSpecialFolderLocation() で取得することができます。

例:

// マイコンピュータを開く例です。
// 関数 SHGetSpecialFolderLocation() の第2引数に CSIDL_DRIVES を指定して、
// マイコンピュータのアイテムIDリスト取得しています。
int main( void )
{
	IMalloc          *pMalloc;        //
	ITEMIDLIST       *pidlMyComputer; // マイコンピュータのアイテムIDリスト
	SHELLEXECUTEINFO  sei;            //

	if ( NOERROR == SHGetMalloc( &pMalloc ) )
	{
		if ( NOERROR == SHGetSpecialFolderLocation( HWND_DESKTOP, CSIDL_DRIVES, &pidlMyComputer ) )
		{
			memset( &sei, 0, sizeof( sei ) );
			sei.cbSize       = sizeof( sei );
			sei.fMask        = SEE_MASK_IDLIST;
			sei.hwnd         = HWND_DESKTOP;
			sei.lpIDList     = pidlMyComputer;
			sei.lpVerb       = "open";
			sei.nShow        = SW_SHOWNORMAL;
			sei.lpFile       = NULL;
			sei.lpParameters = NULL;
			sei.lpDirectory  = NULL;
			ShellExecuteEx( &sei );

			pMalloc->Free( pidlMyComputer );
		}
		pMalloc->Release();
	}
	return 0;
}//main

CLSID パスを利用する方法

 explorer.exe に CLSID パスを渡すことによって、特殊フォルダを開くことができます。
 以下に、CLSID パスを利用して Web フォルダを開く例と、特殊フォルダと CLSID パスの対応例を示します。

例:

// Web フォルダを開く例です。
// 関数 ShellExecute() の第4引数が Web フォルダの CLSID パス
// "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\::{BDEADF00-C265-11d0-BCED-00A0C90AB50F}"
// です。
int main( void )
{
	ShellExecute
		(
			HWND_DESKTOP,
			"open",
			"explorer.exe",
			"::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\::{BDEADF00-C265-11d0-BCED-00A0C90AB50F}",
			NULL,
			SW_SHOWNORMAL
		);
	return 0;
}//main
フォルダCLSID パス
マイコンピュータ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}
ネットワークコンピュータ::{208D2C60-3AEA-1069-A2D7-08002B30309D}
ごみ箱::{645FF040-5081-101B-9F08-00AA002F954E}
インターネット::{871C5380-42A0-1069-A2EA-08002B30309D}
マイドキュメント::{450D8FBA-AD25-11D0-98A8-0800361B1103}
コントロールパネル::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\::{21EC2020-3AEA-1069-A2DD-08002B30309D}
プリンタ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\::{2227A280-3AEA-1069-A2DE-08002B30309D}
Web フォルダ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\::{BDEADF00-C265-11d0-BCED-00A0C90AB50F}
ダイアルアップネットワーク::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\::{992CFFA0-F557-101A-88EC-00DD010CCC48}
タスク::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\::{D6277990-4C6A-11CF-8D87-00AA0060F5BF}

関連

特殊フォルダ(システム、デスクトップなど)のパスを取得する
メールアドレス や URL を指定して実行する
フォルダをエクスプローラで開く
関数 CoCreateInstance() を使用したコードでコンパイルエラーがでる
インターフェイス(IMalloc, IShellLink など)を使用したコードでコンパイルエラーがでる



Google
ご意見・ご感想をお聞かせ下さい。匿名で送信できます。

 * 返信が必要な場合には postmaster@katsura-kotonoha.sakura.ne.jp へ直接メールしてください。

水無瀬 優 postmaster@katsura-kotonoha.sakura.ne.jp
IDGは全世界85カ国でIT関連雑誌を発行する出版社です。