私はKNOWNFOLDERID
を持っており、C:.... \ folderのような対応するパスを知りたいと思います。Delphiの既知のフォルダGUIDからフォルダパスを取得する方法
KNOWNFOLDERID
はここにあります。 http://msdn.microsoft.com/en-us/library/bb762584%28VS.85%29.aspx
私は使用が(私はすべてのKNOWNFOLDERIDとパスを持つ配列を作成する必要はありません)API を獲得したいとdは。
おかげ
私はKNOWNFOLDERID
を持っており、C:.... \ folderのような対応するパスを知りたいと思います。Delphiの既知のフォルダGUIDからフォルダパスを取得する方法
KNOWNFOLDERID
はここにあります。 http://msdn.microsoft.com/en-us/library/bb762584%28VS.85%29.aspx
私は使用が(私はすべてのKNOWNFOLDERIDとパスを持つ配列を作成する必要はありません)API を獲得したいとdは。
おかげ
SHGetKnownFolderPath
API関数を呼び出すだけです。
この関数はVistaで追加されたため、Delphi 7に同梱されているライブラリユニットでは宣言されません。したがって、自分で宣言する必要があります。
type
KNOWNFOLDERID = TGuid;
function SHGetKnownFolderPath(
const rfid: KNOWNFOLDERID;
dwFlags: DWORD;
hToken: THandle;
out ppszPath: PWideChar
): HResult; stdcall; external 'Shell32.dll';
この機能はVistaで追加されたため、XPで呼び出すと失敗する可能性があります。ですから、Vistaの既知のフォルダAPIではなく、CSIDL関数を使用してこれを処理することをお勧めします。
パスがすべてのシステムで同じであるという保証がないのであなたが知られているフォルダIDとパスの配列を構築することはできません。既知のフォルダの既定のパスはありますが、既定のパスであり変更することができます。多くの企業環境では、たとえば、ユーザーのドキュメントフォルダを簡単にバックアップできるネットワーク共有に移動するなどの目的でこれを実行します。
いずれにせよ、あなたが提供されるリンク内のリンクは、あなたが必要なすべての情報が含まれています
SHGetKnownFolderPathは知られているフォルダのパスを返します勝利のAPI関数です。 CoTaskMemFreeを呼び出すことによって返されたUnicodeのcharポインタを解放する必要があることに注意してください。
COMオブジェクトの操作を優先する場合は、代わりにIKNOWNFOLDERを使用できます。
GUIDは文字列として与えられます。 Stringtoguidを使用して文字列をGUIDに変換してから、SHGetKnownFolderPathを呼び出すことはできますか? – user382591
これを実行できますか? –