应用程序可以运行其他应用程序的代码吗?

时间:2015-04-24 09:03:53

标签: c++ winapi

嗨,

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

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

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

一切正常,我可以随时在桌面之间切换,但现在我被要求对所启动的进程的结构做一些事情,不知何故,使秒应用程序代码在第一个内部运行,而不创建新进程。由于这是我的第一篇文章,因此我无法上传流程树的代码段,但live.systernals中的 procexp 应用程序显示以下结构:

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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