一个应用程序可以运行另一个应用程序的代码吗?

Can an application run the code of another application?

嗨,

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

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

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

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

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

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

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

但是恕我直言,最简洁的方法是将 SecondApp 分成两部分:一个包含实际完成工作的代码的 DLL 和一个 EXE,它是一个从 DLL 调用例程的简单前端。

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