1

我正在编写一个自定义函数来枚举子窗口并返回窗口句柄列表。这是根据 P/Invoke 的函数声明。

[System.Runtime.InteropServices.DllImport("user32.Dll")]
public static extern bool EnumWindows (EnumWindowsCallback lpEnumCallbackFunc, int lParam);

[System.Runtime.InteropServices.DllImport("user32")]
public static extern bool EnumChildWindows (IntPtr hWnd, EnumWindowsCallback lpEnumCallbackFunc, int lParam);

问题是我需要能够在一种情况下传递 Int32 值,在另一种情况下传递 IntPtr。

  • 如果我将参数更改为 IntPtr,我可以将一个 int 转换为它并稍后可靠地将其转换回 Int32 吗?
  • 如果我将参数保留为 Int32,由于我自己的应用程序是 32 位但目标进程是 64 位(Windows 边栏),因此 IntPtr.ToInt32 是否总是有效?
4

1 回答 1

1

必须使用IntPtrforlParam值,但始终保证它对于Int32.

由于放入的值lParam在您的控制之下(而不是其他窗口的),您可以保证您将在 IntPtr 中放入一个值,您可以再次读出该值。

于 2013-06-10T15:16:57.290 回答