【问题标题】:Can an application run the code of another application?一个应用程序可以运行另一个应用程序的代码吗?
【发布时间】:2015-04-24 09:03:53
【问题描述】:

嗨,

我对 C++ 和 WinAPI 比较陌生。到目前为止,我已经设法创建了一个应用程序,它使用 CreateProcess 函数和 STARTUPINFO 结构来创建一个新桌面,在该新桌面内启动一个新 explorer.exe 进程并切换到它。

接下来,因为我希望能够在这两个桌面之间随时切换,只需按下一个键(在我的例子中是 LCTRL),我制作了另一个使用 SetWindowsHookEx 的应用程序em> 函数为键盘创建一个全局挂钩。

因为钩子仅在调用 destkop 中处于活动状态,在第一个应用程序中,使用 CreateProcess,在创建 explorer.exe 进程并切换到新桌面之前,我已经启动了第二个应用程序的可执行文件两次:一次当前桌面和新桌面一次。

一切正常,我可以随时在桌面之间切换,但现在我被要求对启动的进程结构做一些事情,以某种方式让秒应用程序代码在里面运行第一个,无需创建新流程。因为这是我的第一篇文章,我无法上传进程树的 sn-p,但来自 live.systernalsprocexp 应用程序显示以下结构:

---FirstApp.exe:
-------------SecondApp.exe(原桌面)
-------------explorer.exe(新桌面)
-------------SecondApp.exe(新桌面)

所以基本上,我的问题是:我可以让挂钩键盘的应用程序的代码与 FirstApp 在同一个线程中运行吗?这个实现,一个启动这三个进程的应用程序,以及第二个连接键盘的应用程序,是我的想法(我没有被要求这样做,我只是被要求创建一个新桌面并在它们之间切换),所以我也愿意为更好地解决这个问题提出建议。

【问题讨论】:

  • 两个进程之间需要使用某种形式的IPC进行通信。
  • 谢谢,我会读一些关于进程间通信的文章

标签: c++ winapi


【解决方案1】:

这是可能的,因为 Windows 上的 DLL 和 EXE 之间几乎没有区别,所以我认为您可以尝试从 SecondApp 导出例程,然后使用 LoadLibrary 将它们导入 FirstApp。

但恕我直言,做到这一点的干净方法是将SecondApp 分成两部分:一个包含实际执行该工作的代码的 DLL 和一个 EXE,它是从 DLL 调用的简单前端例程。

这样,从 FirstApp 调用 DLL 的例程将很简单(并且可以跨不同版本的 Windows 和 SDK 移植)。

【讨论】:

  • 感谢您的建议,我会尝试将键盘挂钩移动到 dll 中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多