goo

プロセス、モジュール取得メモ

◆一覧リスト
HSP Ver3.0
HSP Ver2.61
ブログ関連
その他
★人気blogランキング

「プロセスとモジュールを取得メモ」

実行中のプロセスを取得
さらにそのプロセスのモジュール表示

実行画面
サンプル ソースコード
//////////////////////////////////////////////////////////////
//定義
#define TITLENAME	"モジュール取得 サンプル"


//////////////////////////////////////////////////////////////
//関数の登録
#uselib "kernel32.dll"
	#func CreateToolhelp32Snapshot "CreateToolhelp32Snapshot" int,int
	#func Module32First "Module32First" int , sptr
	#func Module32Next "Module32Next" int , sptr
	#func Process32First "Process32First" int , sptr
	#func Process32Next "Process32Next" int , sptr
	#func CloseHandle "CloseHandle" int

#uselib "user32.dll"
	#func GetWindowLongA "GetWindowLongA" int,int
	#func SetWindowLongA "SetWindowLongA" int,int,int
	#func SetWindowPos  "SetWindowPos"   int,int,int,int,int,int,int
	#func MoveWindow    "MoveWindow"     int,int,int,int,int,int

//////////////////////////////////////////////////////////////
//変数
	dim er
	dim  lb1
	dim  lb2
	sdim lbdata , 1024
	sdim data   , 260
	sdim mbdata , 1024
	dim  hpsnap
	dim  hmsnap
	dim  p_entry, 74
	dim  p_id , 64
	dim  m_entry, 137

//////////////////////////////////////////////////////////////
//ウィンドウをサイズ変更可能にする
	screen 0 , ginfo_dispx , ginfo_dispy
	cls 1
	title TITLENAME
	width 300 , 300
	GetWindowLongA hwnd , -16
	SetWindowLongA hwnd , -16 , stat | 0x50000
	SetWindowPos hwnd,0,0,0,0,0,0x23

//////////////////////////////////////////////////////////////
//オブジェクト配置
	objsize 300 , 20
	pos 0 , 0 : button "プロセスの更新" , *p_reload
	objsize ginfo_winx , 110
	pos 0 , 20: listbox lb1 , 10 , lbdata

	pos 0 , 130: mesbox mbdata , ginfo_winx , ginfo_winy-130

//////////////////////////////////////////////////////////////
// スナップショット作成
//#func CreateToolhelp32Snapshot "CreateToolhelp32Snapshot" int,int
//	戻り値にスナップショットのハンドル
//
//	第一引数
//		「TH32CS_INHERIT:(0x80000000)」スナップショットのハンドルを継承
//		「TH32CS_SNAPALL:(0x0f)」以下4つをあわせたもの
//		「TH32CS_SNAPHEAPLIST:(0x01)」指定したプロセスのヒープリストを含む
//		「TH32CS_SNAPMODULE:(0x08)」指定したプロセスのモジュールリストを含む
//		「TH32CS_SNAPPROCESS(0x02)」プロセスリストを含む
//		「TH32CS_SNAPTHREAD(0x04)」スレッドリストを含む
//	第二引数
//		プロセス識別子を指定(TH32CS_SNAPMODULEを指定した時のみ)
//		0を指定すると現在のプロセスになる

/*	p_entry  & m_entry構造体
typedef struct tagPROCESSENTRY32
{
    DWORD   dwSize;
    DWORD   cntUsage;
    DWORD   th32ProcessID;          // this process
    ULONG_PTR th32DefaultHeapID;
    DWORD   th32ModuleID;           // associated exe
    DWORD   cntThreads;
    DWORD   th32ParentProcessID;    // this process's parent process
    LONG    pcPriClassBase;         // Base priority of process's threads
    DWORD   dwFlags;
    CHAR    szExeFile[MAX_PATH];    // Path
} PROCESSENTRY32;

typedef struct tagMODULEENTRY32
{
    DWORD   dwSize;
    DWORD   th32ModuleID;       // This module
    DWORD   th32ProcessID;      // owning process
    DWORD   GlblcntUsage;       // Global usage count on the module
    DWORD   ProccntUsage;       // Module usage count in th32ProcessID's context
    BYTE  * modBaseAddr;        // Base address of module in th32ProcessID's context
    DWORD   modBaseSize;        // Size in bytes of module starting at modBaseAddr
    HMODULE hModule;            // The hModule of this module in th32ProcessID's context
    char    szModule[MAX_MODULE_NAME32 + 1];
    char    szExePath[MAX_PATH];
} MODULEENTRY32;
*/

	//プロセスの取得
	gosub *get_process

//////////////////////////////////////////////////////////////
//メッセージ割り込み
	oncmd gosub *WM_SIZE , 0x0005
	oncmd gosub *WM_CLOSE , 0x0010

//////////////////////////////////////////////////////////////
//メインループ
*main
	if lb1 != lb2{
		gosub *get_module
		lb2 = lb1
	}
	wait 10
goto *main

//////////////////////////////////////////////////////////////
//モジュール取得
*p_reload
	gosub *get_process
goto *main

//////////////////////////////////////////////////////////////
//プロセスの取得
*get_process
	CreateToolhelp32Snapshot 0x0f , 0
	hpsnap = stat
	if hpsnap==-1 : dialog "CreateToolhelp32Snapshot error" : stop

	dim  p_id , 64
	lbdata="" : notesel lbdata
	p_entry(0) = 296
	Process32First hpsnap , varptr(p_entry)
	er = stat
	repeat -1
		if er == 0 : break
		getstr data , p_entry , 36 , '\0'
		noteadd data , -1
		p_id(cnt) = p_entry(2)
		Process32Next hpsnap , varptr(p_entry)
		er = stat
	loop
	objprm 1 , lbdata
	objprm 1 , 0
	CloseHandle hpsnap
return

//////////////////////////////////////////////////////////////
//モジュールの取得
*get_module
	CreateToolhelp32Snapshot 0x0f , p_id(lb1)
	hmsnap = stat
	if hmsnap==-1{
		title TITLENAME +" : error"
		objprm 2 , ""
		return
	}
	notesel lbdata : noteget data , lb1
	title TITLENAME+" : "+data
	mbdata = "" : notesel mbdata
	m_entry(0) = 548
	Module32First hmsnap , varptr(m_entry) : er = stat
	repeat -1
		if er == 0 : break
		getstr data , m_entry , 288 , '\0'
		noteadd data , -1
		Module32Next hmsnap , varptr(m_entry) : er = stat
	loop
	objprm 2 , mbdata
	CloseHandle hmsnap
return

//////////////////////////////////////////////////////////////
//ウィンドウサイズ変更
*WM_SIZE
	MoveWindow objinfo(0,2) , 0 , 0 , ginfo_winx , 20 , 1
	MoveWindow objinfo(1,2) , 0 , 20 , ginfo_winx , 110 , 1
	MoveWindow objinfo(2,2) , 0 , 130 , ginfo_winx , ginfo_winy-130 , 1
return

//////////////////////////////////////////////////////////////
//終了
*WM_CLOSE
	if hsnap!=0 : CloseHandle hpsnap
return
コメント ( 0 ) | Trackback ( 0 )
« ステータスバ... ウィンドウを透過 »
 
コメント
 
コメントはありません。
コメントを投稿する
 
名前
タイトル
URL
コメント
コメント利用規約に同意の上コメント投稿を行ってください。

数字4桁を入力し、投稿ボタンを押してください。