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

解決


yaj  2005-04-22 16:56:43  No: 57156

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

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

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


NowNow  2005-04-22 17:56:14  No: 57157

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

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


yaj  2005-04-23 04:59:42  No: 57158

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

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

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

printf("%s",filename);


YuO  2005-04-23 07:11:19  No: 57159

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-24 01:30:11  No: 57160

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加