是否有可能在Windows中的另一个应用程序中embedded一个应用程序?

我在Visual C ++ 2008中编写了一个Windows应用程序,我想embeddedWindows自带的计算器(calc.exe)。 有谁知道这是否可能,如果是的话,你能告诉我怎样才能做到这一点?

是的,可以将calc嵌入到自己的应用程序中,但仍然可以在自己的进程空间中运行。 UAC也可能会有一些限制,但这取决于如何启动计算。 所有你需要做的就是改变主calc窗口的父窗体,并将其样式改为WS_CHILD。

void EmbedCalc(HWND hWnd) { HWND calcHwnd = FindWindow(L"CalcFrame", NULL); if(calcHwnd != NULL) { // Change the parent so the calc window belongs to our apps main window SetParent(calcHwnd, hWnd); // Update the style so the calc window is embedded in our main window SetWindowLong(calcHwnd, GWL_STYLE, GetWindowLong(calcHwnd, GWL_STYLE) | WS_CHILD); // We need to update the position as well since changing the parent does not // adjust it automatically. SetWindowPos(calcHwnd, NULL, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOZORDER); } } 

微软拥有支持嵌入的各种技术,最着名的是基于COM技术的OLE。 例如,这是如何在应用程序中嵌入Excel电子表格的。 但是,我相当确定calc没有实现任何需要的接口。

所以这只会让你觉得这个解决方法很糟糕,比如试图自己启动它,并且使用窗口层次结构来玩游戏,或者尝试将其展示给用户,然后通过剪贴板将结果复制出来。这在技术上是可行的一个好主意。 事实上,这可能比编写自己的计算器应用程序更困难…取决于你想让用户做什么。 如果你解释为什么你想这样做,有人可能会有一些更好的解决方案提出。