我在这里发布了一个类似的问题,但决定重新发布,重点关注部分问题。
我在 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 位)。