web-dev-qa-db-ja.com

C ++を使用してWindowsでシステムフォルダパス(C:\ WindowsC:\ ProgramFiles)を取得する方法は?

私はc ++ MFCでプログラミングしています。

「C:\ windows」「c:\ programfiles」フォルダパスを取得したい。

ユーザーがc:\ windows0などの他のフォルダーにウィンドウをセットアップする場合があります。

ウィンドウの絶対パスとプログラムファイルのパスを取得するためのAPIはありますか?

どうもありがとう!

11
sxingfeng

Win32APIの使用>

Windowsフォルダーの場合:

TCHAR windir[MAX_PATH];
GetWindowsDirectory(windir, MAX_PATH);

プログラムファイルの場合:

TCHAR pf[MAX_PATH];
SHGetSpecialFolderPath(
    0,
    pf, 
    CSIDL_PROGRAM_FILES, 
    FALSE ); 

どこ MAX_PATHはWindowsヘッダーから取得され、バッファーが最長(UNC以外)のパスに対して十分な長さであることを保証します。

また、SHGetSpecialFolderPathを使用すると、3番目のパラメーターをこの list のいずれかに置き換えるだけで、Windowsフォルダーを含む他の「特別な」フォルダーを取得できることに注意してください。

22
Anzurio
12
Daniel A. White

Vista +では、 SHGetKnownFolderPathSHGetFolderPathSHGetSpecialFolderPathの代わりになりますが、古い関数との下位互換性が必要な場合は、古い関数を引き続き使用できます。 Windowsのバージョン。

3
Adrian McCarthy

これらのほとんどはSHGetFolderPathから取得されますが、GetSystemDirectory()はC:\ Windows\System32の絶対位置を返します。 GetWindowsDirectory()は使用しないでください。それはもうあなたが望むことをしません。

1
Joshua

getenv ( "%ProgramFiles%")および getenv ( "%WinDir%")を呼び出します。

0
Sameer