//获取系统进程列表
Process[] PList = Process.GetProcesses();
foreach (Process theProcess in PList)
{
//比如现在想HOOK到QQ的退出消息
if (theProcess.ProcessName == "QQ")
{
//ghook是C#编写的DLL类.ThreadID为DLL类中的一个属性.
ghook.ThreadID = (int)theProcess.Id;
ghook.SetHook();
}
}//DLL类中的SetHook()
SetHook()
{
//SetWindowsHookEx()老是返回0,这个HOOK只想监控指定进程的退出消息.所以我传ThreadID过来..但是导致HOOK不成功...如果把SetWindowsHookEx()改为全局HOOK的话,SetWindowsHookEx()就能成功.GetModuleHandle("GlobalHookDLL.dll")这函数运行正确...存在的问题就在这个ThreadID.我传过来的是否不对.应该传什么呢?
_nextHookPtr = SetWindowsHookEx((int)HookType.CBT, myhookProc, GetModuleHandle("GlobalHookDLL.dll"), ThreadID);最后请教一点,监控指定窗体进程的退出消息是否可用CBT这种类型的钩子..因为我看到CBT可处理HCBT_DESTROYWND事件.
}
Process[] PList = Process.GetProcesses();
foreach (Process theProcess in PList)
{
//比如现在想HOOK到QQ的退出消息
if (theProcess.ProcessName == "QQ")
{
//ghook是C#编写的DLL类.ThreadID为DLL类中的一个属性.
ghook.ThreadID = (int)theProcess.Id;
ghook.SetHook();
}
}//DLL类中的SetHook()
SetHook()
{
//SetWindowsHookEx()老是返回0,这个HOOK只想监控指定进程的退出消息.所以我传ThreadID过来..但是导致HOOK不成功...如果把SetWindowsHookEx()改为全局HOOK的话,SetWindowsHookEx()就能成功.GetModuleHandle("GlobalHookDLL.dll")这函数运行正确...存在的问题就在这个ThreadID.我传过来的是否不对.应该传什么呢?
_nextHookPtr = SetWindowsHookEx((int)HookType.CBT, myhookProc, GetModuleHandle("GlobalHookDLL.dll"), ThreadID);最后请教一点,监控指定窗体进程的退出消息是否可用CBT这种类型的钩子..因为我看到CBT可处理HCBT_DESTROYWND事件.
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货