2

我在这里发布了一个类似的问题,但决定重新发布,重点关注部分问题。

我在 32 位 WinForms 应用程序的 64 位 Windows 7 上使用 EnumWindows 和 EnumChildWindows 枚举窗口。这是声明:

public delegate int EnumWindowsCallback (System.IntPtr hWnd, System.IntPtr lParam);

[DllImport("user32.Dll")]
public static extern bool EnumWindows (EnumWindowsCallback lpEnumCallbackFunc, IntPtr lParam);

[DllImport("user32")]
public static extern bool EnumChildWindows (IntPtr hWnd, EnumWindowsCallback lpEnumCallbackFunc, IntPtr lParam);

[Process.GetProcesses()[i].MainWindowHandle]作为参数发送[EnumWindows]给枚举所有进程的所有子窗口。

[EnumChildWindows]被调用时,该[hWnd]参数可以是在 32 或 64 位进程中运行的窗口的句柄。由于我的应用程序是 32 位的,我怎么知道是调用[hWnd.ToInt32()]还是[hWnd.ToInt64()]. 我需要调用这两个函数之一来将一个 IntPtr 与另一个进行比较。

上下文:Windows 7(64 位)、VS 2010、WinForms(32 位)。

4

1 回答 1

2

您不需要做任何特殊的事情,ahwnd不是指针,它是句柄,对于这种类型的 64 位Windows 保证只有低 32 位是有效的,因此它们可以自由共享。

于 2013-06-11T11:27:01.977 回答