IApplicationActivationManager :: ActivateApplication()语法的第二个参数“Arguments”

时间:2015-03-06 11:02:00

标签: c++ visual-c++ windows-store-apps microsoft-metro windows-mobile

我在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 ;;

1 个答案:

答案 0 :(得分:1)

要执行文件激活,请使用IApplicationActivationManager::ActivateForFile方法。

您可以使用SHCreateItemFromParsingName(路径是解析名称)从文件路径创建ShellItem,并可以从中创建ShellItemArray SHCreateShellItemArrayFromShellItem

照片应用程序不会在ActivateApplication的激活参数上监听文件名,如果有,则无法通过路径访问该文件。 ActivateForFile方法将传入的ShellItems转换为StorageFiles,它具有允许应用程序打开它们的权限。