我在MSDN ActivateApplication API使用IApplicationActivationManager :: ActivateApplication()
编写一个控制台应用程序EXE(VC ++),它启动了一个" Photos metro app&显示PNG图像"。这是代码片段。它正在激活"照片地铁应用程序"但无法使用"照片应用"。
显示图像CoInitializeEx(NULL, COINIT_MULTITHREADED);
LPCWSTR appId = L"Microsoft.Windows.Photos_8wekyb3d8bbwe!App";
LPCWSTR imageArg = L" C:\\data\\Users\\Public\\Pictures\\image123.png";
IApplicationActivationManager* paam = NULL;
HRESULT hr = E_FAIL;
__try
{
hr = CoCreateInstance(CLSID_ApplicationActivationManager, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&paam));
if (FAILED(hr))
{
cout << "Error creating CoCreateINstance & HR is" <<hr<< endl;
return 0;
}
DWORD pid = 0;
hr = paam->ActivateApplication(appId, imageArg, AO_NONE, &pid);
if (FAILED(hr))
{
cout << "Error in ActivateApplication call & HR is " <<hr<< endl;
return 0;
}
cout << hex << hr;
if (hr == 0)
wprintf(L"Activated %s with pid %d\r\n", appId, pid);
}
__finally
{
if (paam) paam->Release();
}
CoUninitialize();
我确定错误发生在&#34; ActivateApplication()&#34;的第二个参数中。功能,我给出的论点。我尝试了不同的方式来提供如下参数:
LPCWSTR imageArg = L&#34; C:\数据\用户\公共\图片\ image123.png&#34 ;; OR
LPCWSTR imageArg = L&#34; - C:\数据\用户\公共\图片\ image123.png&#34 ;;
LPCWSTR imageArg = L&#34; C:\ data \ Users \ Public \ Pictures \ image123.png&#34 ;;
答案 0 :(得分:1)
要执行文件激活,请使用IApplicationActivationManager::ActivateForFile方法。
您可以使用SHCreateItemFromParsingName(路径是解析名称)从文件路径创建ShellItem,并可以从中创建ShellItemArray SHCreateShellItemArrayFromShellItem
照片应用程序不会在ActivateApplication的激活参数上监听文件名,如果有,则无法通过路径访问该文件。 ActivateForFile方法将传入的ShellItems转换为StorageFiles,它具有允许应用程序打开它们的权限。