マイ コンピュータという文字列からITEMIDLISTを取得したい

[戻る]
弐羽 2009/12/17(木) 12:16:36
VC2008を使っています。

COMについて勉強しているところなのですが、
ParseDisplayName()に"マイ コンピュータ"という文字列を渡しても
エラーになってしまい、ITEMIDLISTが取得できません。

SHGetSpecialFolderLocation()にCSIDL_DRIVESを渡すことで
マイ コンピュータのITEMIDLISTは取得できるのですが、
"マイ コンピュータ"という文字列からITEMIDLISTを取得したいです。

aetos 2009/12/17(木) 13:07:45
1.OSはなんですか?
2.どうやって得た IShellFolder の ParseDisplayName を呼んでいますか?
3.デスクトップ上に "マイ コンピュータ" はありますか?

弐羽 2009/12/17(木) 13:20:37
aetosさん、返事ありがとうございます。

1.XPです
2.SHGetDesktopFolder()で取得したIShellFolderです
3.あります

よろしくお願いします。

aetos 2009/12/17(木) 16:46:29
うーん…無理っぽいですね。

IShellFolder::ParseDisplayName に渡すことができる文字列は、 
IShellFolder::GetDisplayNameOf に SHGDN_FORPARSING を渡して得ることができるもの
に限られると思われます。
マイ コンピュータの場合は
::{20D04FE0-3AEA-1069-A2D8-08002B30309D}
でしょうか(この文字列をアドレスバーに打ち込むとマイ コンピュータが開きます)。

そもそも、マイ コンピュータの名前は変えられますし、名前が重複していてもかまいま
せん(デスクトップ上に「ごみ箱」がある状態で、マイ コンピュータの名前を「ごみ
箱」にすることはできます)から、名前だけではオブジェクトを一意に識別できないの
でしょうね。

弐羽 2009/12/17(木) 21:20:19
[[解決]]
aetosさん、ありがとうございました。

> 名前だけではオブジェクトを一意に識別できないのでしょうね。

そうみたいですね。

アドレスバーに「ご」と入れると、
「ごみ箱」が候補に出てきます。

「マイ コンピュータ」を「ごみ」に変えて、
アドレスバーに「ご」と入れると、
「ごみ」と「ごみ箱」が出てきます。

「マイ コンピュータ」を「ごみ箱」に変えて、
アドレスバーに「ご」と入れると、
「ごみ箱」だけになり、選択すると
マイ コンピュータのフォルダーが開きます。

他の方法を考えることにします。

ありがとうございました。

古いスレッドには追加発言できません。