使用EnumChildWindows确定IntPtr实例的位
本文关键字:实例 IntPtr EnumChildWindows 确定 使用 | 更新日期: 2023-09-27 18:17:48
我在这里发布了一个类似的问题,但决定重新发布,重点关注问题的一部分。
我从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位)。
你不需要做任何特别的事情,hwnd
不是一个指针,它是一个HANDLE,对于这种类型的64位Windows保证只有较低的32位是有效的,所以它们可以自由共享。