タイムラインに「SelectDirectoryでルートをデスクトップからコンピュータに変更したい」ってのが流れてきたので調べた事のメモ。 SelectDirectoryは内部でSHBrowseForFolderを呼んでる。 SHBrowseForFolderのルートの指定は、BROWSEINFO構造体のpidlRootに値を指定します。このpidlRootがNilの場合はデスクトップがルートとして表示されます。 SelectDirectory関数の内部でどういう処理になっているかと言うと引数Rootに値が渡された場合DesktopのIShellFolderインターフェースを取得して、そのParseDisplayNameメソッドに引数Rootを渡してITEMIDLISTを取得しています。 ParseDisplayNameのヘルプによると、引数pszDisplayNameに「::{GUID}」