初書き込みです。
早速ですが、本題です。
「ウィンドウハンドルからファイル名を取得」
こんなことをやろうと思っています。
そこで、GetWindowModuleFileName関数を利用してファイル名を取得しようと思ったのですが、この関数は動作環境が限られているみたいです。(当方も無理でした)
ということで、GetWindowModuleFileName以外の方法でファイル名を取得する方法があれば、アドバイスお願いします。
char filename[MAX_PATH+1];
HINSTANCE hInstance = (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE);
GetModuleFileName(hInstance, filename, MAX_PATH+1);
こんな感じでいかがでしょうか?
んー。。。なんだか上手くいきません。
以下のような感じに、フォアグラウンドウィンドウのファイルパスを取得したいのですが、なぜか自分自身のファイルパスを取得してしまいます。
//問題の部分を抜き出してます。
char filename[MAX_PATH+1];
HINSTANCE hInstance = (HINSTANCE)GetWindowLong(GetForegroundWindow(), GWL_HINSTANCE);
GetModuleFileName(hInstance, filename, MAX_PATH+1);
printf("%s",filename);
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
迅速な対応、ありがとうございます。
PSAPIを使えばよかったんですね。
ツイート | ![]() |