我是Win32 C++编程的新手。现在,我想创建一个应用程序,能够托管一个metro(AppContainer)应用程序。看起来可以使用以下COM接口:
- IApplicationDesignModeSettings (MSDN链接)
- IApplicationActivationManager(用于启动metro应用)
我能够使用IApplicationActivationManager正常启动应用程序,但是要能够在窗口中托管应用程序,则需要在设计模式下启动应用程序。要在设计模式下启动应用程序,我需要设置IApplicationDesignModeSettings,它需要初始化IInitializeWithWindow (MSDN链接)。 IInitializeWithWindow的Initialize()方法需要“代理窗口”hwnd。这就是我的问题所在。我使用标准的CreateWindow()和空回调创建了一个窗口,并使用该窗口HWND作为IInitializeWithWindow->Initialize()参数。但是,该方法返回E_ACCESSDENIED错误而不是S_OK。为什么会发生这种情况?“代理窗口”是什么意思?可能的解决方案是什么?
IApplicationDesignModeSettings
只允许每个进程调用一次Initialize()
,所以您的应用程序中是否有其他东西已经在您之前调用了Initialize()
?或者您的应用程序需要以管理员身份运行,或者需要对代码进行签名,才能让IApplicationDesignModeSettings
允许您的应用程序托管Metro应用程序? - Remy Lebeau