EnumWindows lParam参数从32位调用到目标64位进程

时间:2013-06-10 15:08:42

标签: c# .net winapi pinvoke

我正在编写一个自定义函数来枚举子窗口并返回一个窗口句柄列表。这是根据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,IntPtr.ToInt32将始终工作,因为我自己的应用程序是32位但目标进程是64位(Windows边栏)?

1 个答案:

答案 0 :(得分:1)

必须使用IntPtr作为lParam值,但始终保证足够大Int32

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