HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
1112
HSP初心者ウインドウハンドルからファイルネームを取得する方法2解決


HSP初心者

リンク

2009/11/12(Thu) 10:37:57|NO.28829

アクティブウインドウのハンドルから、そのウインドウの実行ファイルネームを
取得するソースを書いてるのですが、どうもうまくいきません・・orz

現在出来上がってるソースで実行すると一度目のループで取得したファイルネームは
無事取得するのですが二回目以降のファイルネームを取得できません・・。


#uselib "user32.dll" #func global GetForegroundWindow "GetForegroundWindow" #func global GetWindowThreadProcessId "GetWindowThreadProcessId" sptr,sptr #uselib "kernel32.dll" #cfunc OpenProcess "OpenProcess" sptr,sptr,sptr #func CloseHandle "CloseHandle" sptr #func global GetModuleFileName "GetModuleFileNameA" sptr,sptr,sptr #uselib "psapi.dll" #func global EnumProcessModules "EnumProcessModules" sptr,sptr,sptr,sptr #func global GetModuleFileNameEx "GetModuleFileNameExA" sptr,sptr,sptr,sptr dim hnd repeat sdim fname,256 GetForegroundWindow //アクティブウインドウのハンドルを取得 hnd=stat GetWindowThreadProcessId hnd, varptr(proid) //プロセスIDの取得 hpro = OpenProcess (0x400 | 0x0010 | 0x0001, 0, proid)//プロセスのオープン EnumProcessModules hpro, varptr(Hmo), 4, varptr(Msize)//モジュールハンドルを取得 GetModuleFileName Hmo,varptr(fname),Msize//モジュールハンドルからファイルネームを取得 CloseHandle hpro color 1 : boxf : color 0,255 pos 10,10 mes "ウインドウハンドル ="+hnd mes "プロセスID ="+proid mes "プロセスハンドル = "+hpro mes "モジュールハンドルを受け取るポインター = "+Hmo mes "モジュールハンドルを格納するために必要なバイト数 = "+Msize mes ""+fname wait 200 loop

と、お粗末なソースですが実行して、モジュールのポインターの値が変わらないとこが原因
だと思うのですが、6時間ぐぐって答えを見つけることができませんでした・・
(T_T) ウルウル

どうか先輩方の知恵を貸していただけないでしょうか。
よろしくお願いします。



この記事に返信する


名無し

リンク

2009/11/12(Thu) 18:16:21|NO.28840

GetModuleFileNameExを定義までしてるのに何故使わないのかふしぎだ。
モジュールハンドルはそのプロセス内でのみ使える値なので、GetModuleFileNameは他プロセスには使えないのです。



HSP初心者

リンク

2009/11/12(Thu) 22:01:23|NO.28850

あ〜〜〜〜すみません・・・orz
http://sumishiro.blogspot.com/2009/09/blog-post_30.html
のブログを参考にやってたのですが、はじめどうしても、GetModuleFileNameEx が
うまく実行できなかったので、あれこれやってるうちにGetModuleFileNameEx の存在を
忘れてしまいました・・・orz
GetModuleFileNameEx でやってみます。
ありがとうございました。



ONION software Copyright 1997-2021(c) All rights reserved.