2007年7月26日木曜日

実行ファイルパス取得(WIN32)

これも紹介しとこ。
WinMainからやと実行ファイルパスを取得する方法が
よくわからんかって調べたのでメモ。
※gccでコンパイルして試しました。

まずは main 関数と同じように引数で渡ってこないかを考え
CmdLine の中身を調べて見たが・・・
CmdLine の中にはコマンドライン引数しか入っていなかったのでこれはだめ。

で、MSDNを探して見つけた。
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpdllpro/html/_win32_getmodulefilename.asp
GetModuleFileName 関数
これで実行ファイルの絶対パスが取得できる。

__argv というグローバル変数もあるみたいで
これやと実行ファイル名が取得できた。

以下に使い方を示す。
--------
#include <stdio.h>
#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR CmdLine,
int CmdShow)
{
char buff[256] = {0};
printf("CmdLine = [%s]\n", CmdLine);
// この関数で buff に実行ファイルの絶対パスを取得できる。
GetModuleFileName(hInstance, buff, 256);
printf("[%s]\n",buff);

printf("[%s]\n",__argv[0]);
return 0;
}
--------

実行ファイルパスは取得できると何かと便利ですよね。
バックアップファイルの保存だの。
設定ファイルの読み込みだの。
使い方いろいろ!
変わった使い方してる人いないかな~?

.

0 件のコメント:

ラベル