为什么ShellExecuteEx没有返回进程句柄?

时间:2013-12-02 02:17:59

标签: c++ c windows qt

我正在尝试使用以下功能打开图像:

HANDLE openFile(char *path){ // path = "C:\Users\Foo Bar\Code\Test\test.jpg"
    CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);

    SHELLEXECUTEINFOW info;
    memset(&info, 0, sizeof(info));
    info.cbSize = sizeof(info);
    info.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_NOASYNC ;
    info.hwnd = NULL;
    info.lpVerb = L"open";
    info.lpFile = utf8_toWchar(path);
    info.lpParameters = NULL;
    info.lpDirectory = NULL;
    info.nShow = SW_SHOW;
    info.hInstApp = NULL;

    if (!ShellExecuteExW(&info)){
        System_printLastErrorString(); //never gets here
    }
    //free((void*)info.lpFile);
    CoUninitialize();

    return info.hProcess; //this is always NULL
}

问题在于info.hProcess总是NULL,尽管默认图像编辑程序未打开并稍后打开。

我该如何解决这个问题?

旁注:我不知道这是否相关,但调用程序是Qt应用程序。

1 个答案:

答案 0 :(得分:0)

我最后以CreateProcess为结果AssocQueryString。这给了我需要的手柄。