从32位调用到目标64位进程时,枚举windows lParam参数

本文关键字:枚举 windows lParam 参数 进程 调用 32位 目标 64位 | 更新日期: 2023-09-27 18:17:49

我正在编写一个自定义函数来枚举子窗口并返回窗口句柄列表。下面是按照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侧边栏)?

从32位调用到目标64位进程时,枚举windows lParam参数

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

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