使用EnumChildWindows确定IntPtr实例的位数

时间:2013-06-11 10:48:30

标签: c# .net winapi 32bit-64bit intptr

我发布了一个类似的问题here,但决定重新发布重点问题的一部分。

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

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位)。

1 个答案:

答案 0 :(得分:2)

你不需要做任何特殊的事情,hwnd不是指针是一个HANDLE,对于这种类型的64位Windows guarantees,只有低32位是重要的,所以它们可以自由共享。