マイドキュメントやデスクトップ等の重要ではあるものの、環境によりパスが異なるフォルダやファイルは、
HSP3から登場したdirinfo関数に、CSIDL(ClasSIDList)に0x10000を合算させた値を渡せば、
たとえ環境依存する特殊なフォルダであってもきちんとしたパスを知ることが可能です。
但し、マイコンピュータやコントロールパネル等の仮想フォルダはパスとして取得することが出来ません。
こういう場合に使えるのが、特殊なフォルダを示す識別子「CLSID(CLasSID)」で、
CLSIDはCSIDLのような数値ではなく文字列定数なので、全てが動くわけではありませんが、
「exec "explorer.exe ::{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}"」と書けば動きます。
「exec "::{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}", 16」でもXP環境では動作を確認しましたが、
98SE環境だと動作しないという報告を以前にいただいたことがあります。
マイネットワーク
::{208D2C60-3AEA-1069-A2D7-08002B30309D}
マイコンピュータ
::{20D04FE0-3AEA-1069-A2D8-08002B30309D}
コントロールパネル
::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{21EC2020-3AEA-1069-A2DD-08002B30309D}
プリンタとFAX
::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{2227A280-3AEA-1069-A2DE-08002B30309D}
タスク
::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{21EC2020-3AEA-1069-A2DD-08002B30309D}\::{D6277990-4C6A-11CF-8D87-00AA0060F5BF}
フォント
::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{21EC2020-3AEA-1069-A2DD-08002B30309D}\::{D20EA4E1-3957-11d2-A40B-0C5020524152}
管理ツール
::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{21EC2020-3AEA-1069-A2DD-08002B30309D}\::{D20EA4E1-3957-11d2-A40B-0C5020524153}
マイドキュメント
::{450D8FBA-AD25-11D0-98A8-0800361B1103}
ごみ箱
::{645FF040-5081-101B-9F08-00AA002F954E}
インターネット
::{871C5380-42A0-1069-A2EA-08002B30309D}
上記をよく見ると、例えばコントロールパネルのCLSIDはマイコンピュータのCLSIDの後ろに
フォルダ区切りである「¥」を挟んで同形式「::{XXX-XXX}」のコードが付いています。
タスクやフォント、管理ツールはコントロールパネルのコードの後ろに別のコードがくっついています。
タスク等はコントロールパネル内にある機能なのでフォルダの構造と一緒ですよね。
管理ツール内にあるイベントビューアやサービスは管理ツールコードの後ろに何かが付くのでしょう、多分。
CLSIDはレジストリエディタの「HKEY_CLASSES_ROOT¥CLSID¥」内で
大量に確認できますので有用なものが幾つあるかはわかりませんがいろいろ探ってみては?
|