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


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
0823
初心者ですGetModuleBaseNameについて教えてください5解決


初心者です

リンク

2011/8/23(Tue) 13:29:23|NO.40817

#include "user32.as"
#uselib "kernel32.dll"
#cfunc OpenProcess "OpenProcess" int, int, int
#func CloseHandle "CloseHandle" int

#uselib "psapi.dll"
#func EnumProcesses "EnumProcesses" int, int, int
#func EnumProcessModules "EnumProcessModules" int, int, int, int
#func GetModuleBaseName "GetModuleBaseNameA" int, int, int, int

dim pid, 256
dim modules, 256
sdim pname
sdim txt, 3200

width 300,280

EnumProcesses varptr(pid), 1024, varptr(size)
repeat size/4

hProcess = OpenProcess(0x0400 | 0x0008 | 0x0010 , 0, pid(cnt))
if hProcess {
EnumProcessModules hProcess, varptr(modules), 1024, varptr(size)
if stat {
GetModuleBaseName hProcess, 0, varptr(pname), 64
if (pname == "NOTEPAD.EXE") {
txt += ""+pid(cnt)+" - "+pname+"\n"

}
CloseHandle hProcess
}

}
loop
mesbox txt, 640, 480


メモ帳を起動してたらリストにメモ帳のプロセスは表示されるのですが、
NOTEPAD.EXEに使用されてるほかのDLL「モジュール」を取得するにはどうしたらいいでしょうか?
CreateToolhelp32SnapshotとModule32Firstなどはできるだけ使いたくないです。
宜しくお願いします。



この記事に返信する


Cookies

リンク

2011/8/23(Tue) 15:15:06|NO.40818

いっときますが、私はモジュール等々についてはとても断片的な知識しかありません。
まったく的外れな回答だったらすいません。


そういえばモジュール表示のサンプルがAdvanced Windowsサンプルにあったなーと思い調べましたところ、
04-ProcessInfoが該当するようでした。

>CreateToolhelp32SnapshotとModule32Firstなどはできるだけ使いたくないです。
一応「CreateToolhelp」という文字は見つかりませんでした。
使っているのは「Toolhelp32ReadProcessMemory」って関数ですね。
「Toolhelp32」ってある時点で似ているようですけども。
Toolhelp32ReadProcessMemory - MSDN: http://msdn.microsoft.com/ja-jp/library/cc429050.aspx

なお、サンプルは
上:http://ec.nikkeibp.co.jp/nsp/dl/05924/index.shtml
下:http://ec.nikkeibp.co.jp/nsp/dl/05931/index.shtml
のどちらかからDLできるはずです。




ところで:
こんだけのスクリプト書いてハンネは「初心者です」ですか。



who

リンク

2011/8/23(Tue) 19:19:09|NO.40821

ほんとうに初心者だったらただのコピペかなんかですかね。



Him

リンク

2011/8/23(Tue) 22:07:29|NO.40825

すでにモジュール数は分かっているのでGetModuleBaseNameで取得すればいいだけかと、、

#include "user32.as" #uselib "kernel32.dll" #cfunc OpenProcess "OpenProcess" int, int, int #func CloseHandle "CloseHandle" int #uselib "psapi.dll" #func EnumProcesses "EnumProcesses" int, int, int #func EnumProcessModules "EnumProcessModules" int, int, int, int #func GetModuleBaseName "GetModuleBaseNameA" int, int, int, int dim pid, 256 dim modules, 256 sdim pname sdim txt, 3200 EnumProcesses varptr(pid), 1024, varptr(size) repeat size/4 hProcess = OpenProcess(0x0400 | 0x0008 | 0x0010 , 0, pid(cnt)) if hProcess { EnumProcessModules hProcess, varptr(modules), 1024, varptr(size) if stat { GetModuleBaseName hProcess, modules(0), varptr(pname), 64 CharUpper varptr(pname) if (pname == "NOTEPAD.EXE") { txt += ""+pid(cnt)+" - "+pname+"\n" repeat size / 4 - 1, 1 GetModuleBaseName hProcess, modules(cnt), varptr(pname), 64 txt += pname+"\n" loop CloseHandle hProcess break } } CloseHandle hProcess } loop mesbox txt, 640, 480



初心者です

リンク

2011/8/24(Wed) 06:36:42|NO.40827

みなさんありがとうございました。
参考にさせてもらいます。
解決しましたので、閉めさせていただきます。



初心者です

リンク

2011/8/24(Wed) 06:38:59|NO.40828

解決したらチェック入れるの忘れてました。



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