ファイル名を取得するには

解決


yaj  2005-04-22 07:56:43  No: 57156  IP: 192.*.*.*

初書き込みです。
早速ですが、本題です。
「ウィンドウハンドルからファイル名を取得」
こんなことをやろうと思っています。

そこで、GetWindowModuleFileName関数を利用してファイル名を取得しようと思ったのですが、この関数は動作環境が限られているみたいです。(当方も無理でした)

ということで、GetWindowModuleFileName以外の方法でファイル名を取得する方法があれば、アドバイスお願いします。

編集 削除
NowNow  2005-04-22 08:56:14  No: 57157  IP: 192.*.*.*

char filename[MAX_PATH+1];
HINSTANCE hInstance = (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE);
GetModuleFileName(hInstance, filename, MAX_PATH+1);

こんな感じでいかがでしょうか?

編集 削除
yaj  2005-04-22 19:59:42  No: 57158  IP: 192.*.*.*

んー。。。なんだか上手くいきません。

以下のような感じに、フォアグラウンドウィンドウのファイルパスを取得したいのですが、なぜか自分自身のファイルパスを取得してしまいます。

//問題の部分を抜き出してます。
char filename[MAX_PATH+1];
HINSTANCE hInstance = (HINSTANCE)GetWindowLong(GetForegroundWindow(), GWL_HINSTANCE);
GetModuleFileName(hInstance, filename, MAX_PATH+1);

printf("%s",filename);

編集 削除
YuO  2005-04-22 22:11:19  No: 57159  IP: 192.*.*.*

GetWindowThreadProcessIdでProcess IDを取得して,
そのPIDを元にTool Help APIやPSAPIを利用してファイル名を取得する事になります。
http://support.microsoft.com/default.aspx?scid=kb;ja;175030


ちなみに,HINSTANCEはプロセス内で一意なのであって,
システム内で一意なわけではありません。

さらに,GetModuleFileNameは自プロセス内のモジュールのファイル名を得るものです。
これはMSDNにきっちり書いてあります。
http://msdn.microsoft.com/library/en-us/dllproc/base/getmodulefilename.asp

編集 削除
yaj  2005-04-23 16:30:11  No: 57160  IP: 192.*.*.*

迅速な対応、ありがとうございます。
PSAPIを使えばよかったんですね。

編集 削除