32位应用程序内的64位Windows上下文菜单(如何遍历所有者绘制的菜单?)

时间:2011-06-17 11:14:25

标签: c++ winapi mfc

我想在32位应用程序中嵌入Windows 64位上下文菜单(类似于TotalCommander中的X64子菜单)。为此,我需要在32位侧模拟64位菜单内容。我的想法是在64位辅助进程内遍历64位菜单,并在32位端重新生成这样的内容(我也尝试直接从64位帮助程序显示这样的菜单,但是Windows很惊讶地有两个上下文菜单,每个菜单来自不同的过程,并没有正确地绘制第二个菜单)。如果您有其他想法,请告诉我。

我有一个问题:一些所有者绘制的菜单显示的项目多于GetMenuItemCount()返回的内容(通常GetMenuItemCount()在这种情况下返回1)。

有趣的是,我可以使用项目ID(从TrackPopupMenuEx()返回)为所有者绘制的菜单项使用GetMenuItemInfo(),因此这样的菜单可以为每个特定项目生成适当的信息。但不幸的是,我不能使用ID来迭代菜单项(项目ID是无序的)。

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

不确定TotalCommand是如何做到的。但我发现了这个:

  • 启动TOTALCMD.EXE(32位进程)
  • 看到它在TaskManager中运行(让它在右侧/左侧运行,并监视进程/进程计数。
  • 现在启动菜单,流程仍然相同。
  • 将鼠标悬停在 X64 菜单上,您会发现需要时间。这次当您在TaskManager中看到另一个名为 TCMDX64.EXE 的进程刚刚启动时,这是一个64位进程。
  • 我的理解是,这个衍生进程获取菜单并发送回TotalCommander 32位应用程序。