我发布了一个类似的问题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位)。
答案 0 :(得分:2)
你不需要做任何特殊的事情,hwnd
不是指针是一个HANDLE,对于这种类型的64位Windows guarantees,只有低32位是重要的,所以它们可以自由共享。