2009-06-25 17 views
1

ShGetFolderPathを使用して、ユーザープロファイルフォルダのパスを確認しようとしています。CSIDL_PROFILESの#defineを見つけることができないのはなぜですか?

CSIDL_PROFILES(0x003e)

バージョン6.0:ドキュメントはCSIDL_PROFILESは、このフォルダを定義すると述べています。ユーザープロファイルフォルダを含むファイルシステムディレクトリ。一般的なパスはC:\ Documents and Settingsです。

Visual Studio 2005 SP1を使用していますが、プラットフォームSDKのインクルードファイルに定数CSIDL_PROFILESの定義がありません。 Platform SDKの新しいバージョンが必要ですか?

私はシンボルの代わりにID 0x3eを使っていくつかの実験を行いました。しかし、0x3eはCSIDL_ *引数を受け入れるシェル関数の有効な引数ではないようです(無効な引数エラーが返されます)。

CSIDL_PROFILESは有効な引数ではなく、このシンボルに言及すると、件名のMSDNページの少なくとも一部が間違っていると思います。私は、Win32/MSDNのドキュメントで何年も働いていて、私は似たような状況を覚えていないと言わざるを得ない。

+0

CSIDL_PROFILESを参照しているMSDNページへのリンクはありますか?私は1つを見つけることができませんでした... – Roddy

+0

@Roddy、私はmsdn.comでそれを見つけることができません、私がVS2005と出荷されるローカルMSDNヘルプにあった参照を参照してください。 ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.WIN32COM.v10.en/shellcc/platform/shell/reference/enums/csidl.htm – jmatthias

答えて

0

MSDN documentation for CSIDLsに記載されていないため、新しいバージョンのPSDKがお役に立てない可能性があります。

#define CSIDL_PROFILES 0x003E 

...しかし、それは完全にMSによって文書化されていない表示されているという事実を考慮すると、それは私がお勧めしたいものではないのです。

あなたは明らかにそれを自分で行うことができます。

+1

あるバージョンのMSDNページ(VS2005に同梱されているもの)。彼らがそれを取り除いたかのようです。 IDを直接使用しようとしましたが、0x3eを使用すると、シェル関数が無効な引数コードを返すため、動作しないように見えます。 – jmatthias

0

誰かが無益だと気づいたときにこれが削除されたと言えます。とにかくそれをやることができますか?各ユーザーのプロファイルが実際にこのディレクトリの下に存在するかどうかを判断する必要があります。しかし、あなたは通常これをユーザごとにチェックしているので、デフォルトを必要とするのは、新しいユーザプロファイルを作成するときだけです。とにかくそれはWindowsの内部コードです。

+0

私の場合、それは役に立つだろう。私は実際には、すべてのユーザープロファイルフォルダを繰り返し、各 'SendTo'フォルダにファイルをコピーする必要があったので、このフォルダの場所を知る必要がありました。このコードは、管理者権限で実行されているインストール中に実行されたことに注意してください。最後に、私は現在のユーザープロファイルフォルダを読み、親フォルダを特定しなければなりませんでした。 – jmatthias

+1

いいえ、それは本当に間違った理由の良い例です。適切な解決策は、すべてのユーザーに対して繰り返し実行し、各ユーザーのプロファイルフォルダを取得することです。コンピュータにローミングプロファイルとローミングプロファイルが混在していると、ソリューションが失敗します。 – MSalters

0

GetProfilesDirectory()を使用する必要がありますが、本当に必要なのは別のユーザーのCSIDLです。トークンを使用してSHGetFolderPathを呼び出す必要があります。 (トークンを持っていない場合は、a hacky workaroundを使用する必要があります)

関連する問題