是否可以在Windows中的另一个应用程序中嵌入一个应用程序?

时间:2013-05-18 17:18:20

标签: windows winapi

我正在使用Visual C ++ 2008编写Windows应用程序,我想在其中嵌入Windows附带的计算器(calc.exe)。有谁知道这是否可能,如果是的话,你可以给我一些关于如何实现这一目标的提示吗?

2 个答案:

答案 0 :(得分:5)

是的,可以将calc嵌入到您自己的应用程序中,但它仍然会在它自己的进程空间中运行。 UAC可能还会施加一些限制,但这取决于计算方法的推出方式。您需要做的就是更改主计算窗口的父级,并将其样式更改为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);
    }
}

答案 1 :(得分:3)

Microsoft拥有各种支持嵌入的技术,最着名的是基于COM技术的OLE。例如,您可以在应用程序中嵌入Excel电子表格。但是,我很确定calc没有实现任何所需的接口。

所以这只会给你带来hacky解决方案,例如尝试自己启动它并使用窗口层次结构玩游戏,或尝试将其呈现给用户,然后通过剪贴板等将结果复制出来。这在技术上是可行的,但不是一个好主意。事实上,它可能比编写自己的计算器应用程序更困难...取决于您希望用户做什么。如果你解释为什么要这样做,有人可能会有一些更好的解决方案。