能力值:
( LV9,RANK:610 )
|
-
-
2 楼
根据进程名字吧,DllMain里GetModuleFileName一下然后做个判断。至于什么是符合你条件的程序,你自己还没有个判断标准吗?
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
我的意思想表达
在消息回调函数怎么判断这个消息来自于哪个程序
比如a.exe b.exe c.exe
当这三个都被关联进来的时候,在回调函数里如何判断这消息来自于a b c中的哪个程序
|
能力值:
( LV9,RANK:610 )
|
-
-
4 楼
你加载的时候向判断一下不就行了?不是目标程序就拒绝加载,就不会有后面的事了。另外,回调函数执行时依然是在目标进程空间,所以用GetModuleFile判断进程名还是可行的
|
能力值:
( LV9,RANK:610 )
|
-
-
5 楼
钩子是全局的,但钩子回调函数执行时必定还是在某一具体的进程中的嘛
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
回调函数在一个DLL中
当回调函数执行的时候该DLL会被映射到相应的进程空间
|
能力值:
( LV3,RANK:30 )
|
-
-
7 楼
得到某应用程序的句柄
然后传给DLL,挂钩
给你个例子
DLL
function InstallHook(SWindow: LongWORD; memo: tmemo): Boolean; stdcall;
var
ThreadID : LongWORD;
begin
Result := False;
DLLData^.Hook := 0;
ThreadID := GetWindowThreadProcessId(SWindow, nil);
//给指定窗口挂上钩子
DLLData^.Hook := SetWindowsHookEx(WH_GETMESSAGE, @HookProc, Hinstance, ThreadID);
if DLLData^.Hook > 0 then
Result := True //是否成功HOOK
else
exit;
end;
EXE
FindWindow(nil, '');
InstallHook(xxxx,xxxx);
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
在回调函数里GetCurrentProcessId()得到当前进程ID,再获取系统进程快照,比对一下不就可以获取当前进程的进程名了。
|
能力值:
( LV9,RANK:850 )
|
-
-
9 楼
GetModuleHandle判断主程序模块
GetModuleHandle("a.exe"); //返回非0,则在a程序中
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
晕!当前DLL 只是对自己所在的 EXE 进行相应的消息处理啊!难不成 在a.exe 中的 dll 还要处理 b.exe的消息吧!那样可要用到进程间通信或者其他的了哦!呵呵
|
能力值:
( LV3,RANK:30 )
|
-
-
11 楼
参考判断父类进程,楼主要学会变通啊!
|
|
|