【发布时间】:2011-06-13 17:05:22
【问题描述】:
我得到以下代码来通过句柄获取路径/文件名:
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern int GetWindowThreadProcessId(IntPtr handle, out uint processId);
public static string GetProcessPath(IntPtr hwnd)
{
uint pid = 0;
GetWindowThreadProcessId(hwnd, out pid);
Process proc = Process.GetProcessById((int)pid);
return proc.MainModule.FileName.ToString();
}
它在 32 位中完美运行,但在 64 位中出现错误 >“只有部分 ReadProcessMemory 或 WriteProcessMemory 请求已完成。” 项目编译为 x86(平台目标 x86)。
我该如何解决?
~谢谢罗恩
【问题讨论】:
-
嗯...错误在哪一行?
-
return proc.MainModule.FileName.ToString();
-
尝试以管理员身份运行您的程序。
-
@Darin Dimitrov,我已经以管理员身份运行它。这不是问题。 @Cody Gray,我不知道。我没有构建此功能,但即使我将其更改为 IntPtr 它也不起作用。 [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern IntPtr GetWindowThreadProcessId(IntPtr handle, out IntPtr processId);公共静态字符串 GetProcessPath(IntPtr hwnd) { IntPtr pid = IntPtr.Zero; GetWindowThreadProcessId(hwnd, out pid);进程 proc = Process.GetProcessById(pid.ToInt32());返回 proc.MainModule.FileName.ToString(); }
标签: c# .net path 64-bit filenames