怎样获取指定进程的模块句柄啊?

runerback 2015-08-15 10:12:55
C#代码

private static void SetHook(PROCESS_INFORMATION pInfo)
{
WinAPI.HookProc hook = myHookProc;
Process p = Process.GetProcessById(pInfo.dwProcessId);
IntPtr modelhandle = WinAPI.GetModuleHandle(p.MainModule.ModuleName);
curHook = WinAPI.SetWindowsHookEx(HookType.WH_CALLWNDPROC, myHookProc, modelhandle, (uint)pInfo.dwThreadId);
int error = Marshal.GetLastWin32Error();
if (error != 0)
{
throw new Win32Exception(error);
}
}

private static IntPtr myHookProc(int code, IntPtr wParam, IntPtr lParam)
{
Keys key = (Keys)wParam.ToInt32();
Console.WriteLine(key);
return WinAPI.CallNextHookEx(IntPtr.Zero, code, wParam, lParam);
}

获取到的modelhandle 一直是0然后报错 “没有模块句柄无法设置非本机的挂接”

求解。 只求原理代码无所谓大概能看懂就行。。
...全文
2334 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
cs99101553 2017-06-10
  • 打赏
  • 举报
回复
这是因为 GetModuleHandleA 返回的是32位的handle 0x7fe00000000 以上的handle 是读不出来的,(64位) 不过,我也不知道,用什么方法解决
runerback 2015-08-17
  • 打赏
  • 举报
回复
引用 3 楼 ksrsoft 的回复:
好吧,我来接分吧
好人啊
缘中人 2015-08-17
  • 打赏
  • 举报
回复
好吧,我来接分吧
runerback 2015-08-16
  • 打赏
  • 举报
回复
来人接分,我要结贴啦
runerback 2015-08-15
  • 打赏
  • 举报
回复
看了下进程所有Model:

var mhlist = p.Modules.Cast<ProcessModule>().Select(model => new { Name = model.ModuleName, Handle = WinAPI.GetModuleHandle(model.ModuleName) }).ToList();
foreach (var m in mhlist)
{
Console.WriteLine("Name: {0} Handle: {1}",m.Name,m.Handle);
}

得到:

为什么主程序的是 0 啊

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧