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

使用EnumChildWindows确定IntPtr实例的位

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