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


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
0724
Rollフルパスを取得6未解決


Roll

リンク

2006/7/24(Mon) 23:33:30|NO.1546

実行されているファイルのフルパスを取得する方法はありますか?



この記事に返信する


ふ〜みん

リンク

2006/7/25(Tue) 02:08:10|NO.1547

dir_exeで検索してみてください



Roll

リンク

2006/7/30(Sun) 17:53:42|NO.1641

自分自身ではなく、他のファイルのフルパスです。
例えばメモ帳が開いていたら、そのフルパス
c:\windows\notepad.exe
(環境によっては必ずしもフルパスがこれとは限らないですが)
を取得したい、ということです。
説明不足ですみません。



Shark++

リンク

2006/7/30(Sun) 18:02:46|NO.1642

ウインドウを所有しているプロセスのフルパスを取得したかったのかもしれないけど
とりあえず、全ての実行中のプロセスのフルパスを取得
Win2000以降専用

#include "kernel32.as" ; win 2000 or later #uselib "psapi.dll" #func global EnumProcessModules "EnumProcessModules" int, sptr, int, sptr #func global GetModuleFileNameEx "GetModuleFileNameExA" int, int, sptr, int #module #define TH32CS_SNAPPROCESS $2 #define PROCESS_VM_READ $10 #define PROCESS_QUERY_INFORMATION $400 #deffunc get_all_exe_file_name var result_s result_s = "" CreateToolhelp32Snapshot TH32CS_SNAPPROCESS, 0 hSnap = stat if -1 = stat : return dim pe, 4*9+260 sdim fname,256 pe.0 = 4*9+260 hProcess = 0 hMod = 0 nNeed =0 Process32First hSnap, varptr(pe) repeat if 0 = stat : break s = "" OpenProcess PROCESS_QUERY_INFORMATION|PROCESS_VM_READ, 0, pe.2 hProcess = stat if hProcess { EnumProcessModules hProcess, varptr(hMod), 4, varptr(nNeed) if stat { GetModuleFileNameEx hProcess, hMod, varptr(fname), 255 result_s += fname + "\n" } CloseHandle hProcess } Process32Next hSnap, varptr(pe) loop CloseHandle hSnap return #global get_all_exe_file_name s objsize ginfo_winx, ginfo_winy pos 0,0 mesbox s stop



Shark++

リンク

2006/7/30(Sun) 18:18:54|NO.1643

ウインドウを所有しているプロセスのフルパスを取得する

#include "kernel32.as" #include "user32.as" ; win 2000 or later #uselib "psapi.dll" #func global EnumProcessModules "EnumProcessModules" int, sptr, int, sptr #func global GetModuleFileNameEx "GetModuleFileNameExA" int, int, sptr, int #module #define PROCESS_VM_READ $10 #define PROCESS_QUERY_INFORMATION $400 #deffunc get_exe_file_name_from_hwnd int hTargetWnd sdim fname,256 hProcess = 0 hMod = 0 nNeed = 0 processID = 0 GetWindowThreadProcessId hTargetWnd, varptr(processID) OpenProcess PROCESS_QUERY_INFORMATION|PROCESS_VM_READ, 0, processID hProcess = stat if hProcess { EnumProcessModules hProcess, varptr(hMod), 4, varptr(nNeed) if stat { GetModuleFileNameEx hProcess, hMod, varptr(fname), 255 } CloseHandle hProcess } return fname #global sdim s, 260 width 320, 240 objsize ginfo_winx, ginfo_winy pos 0,0 mesbox s, ginfo_winx, ginfo_winy, 0 hTargetWnd = 0 *main wait 5 WindowFromPoint ginfo_mx, ginfo_my if hTargetWnd = stat : goto *main hTargetWnd = stat get_exe_file_name_from_hwnd hTargetWnd s = refstr objprm 0, s ; title ""+strf("%08X",hTargetWnd) + strf(":%08X",processID) goto *main stop



Irisawa

リンク

2006/7/30(Sun) 21:29:01|NO.1648

余談ですが、メモ帳は%windir%\notepad.exeなので環境変数をExpandEnvironmentStringsや
GetEnvironmentVariableなどを使用して展開すればいいのでは?

http://www.winapi-database.com/Program/Process/



Roll

リンク

2006/7/31(Mon) 13:29:48|NO.1661

なんかすごい複雑な手順でないと取得できないみたいですね。
見慣れない命令ばかりです。
スクリプトを実行してみたらエラーが発生して、
その原因は「WindowFromPoint」という命令が存在しないということみたいなので、
最新版のHSPをダウンロードしてもう一度試してみます。

>ExpandEnvironmentStringsやGetEnvironmentVariableなどを使用して
たしかにメモ帳ならその方法もできそうな気もします。



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