Cod*_*345 1 c++ windows winapi shellexecute windows-8.1
我ShellExecuteW在Windows8.1上调用标准调用来打开PPS(powerpoint slide)文件.
这在Windows 7上运行正常.在Windows 8.1上.它报告"没有与打开文件相关的程序".当然,文件关联已设置,如果文件已保存并从资源管理器中运行(双击),则打开就可以了.我还尝试更改关联并关联另一个程序,然后关联回PPS查看器,没有任何改进.它只对W8.1不起作用,但同样的调用适用于早期的Windows.
任何人都可以告诉我这里可能有什么问题吗?
用于打开文件的代码非常简单,我发现它没有错误:
HINSTANCE hinst = ShellExecuteW(NULL, L"open", L"C:\\path\\to\\file.pps", NULL, NULL, SW_SHOWNORMAL);
// Check if result is error
if ((int)hinst <= 32)
    {
    wchar_t buf[512] = { 0 };
    FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), buf, 512, NULL);
    MSGBOX(buf);
    }
我使用免费的PPS查看器,如下所示:http: //www.microsoft.com/en-us/download/details.aspx?id = 13
我发现类似的东西指出这可能是Win8.1中的一个错误.谁能证实这一点?或者揭示一个解决方法?
我自己找到了解决方案.
W8.1的问题是动词open没有注册到应用程序,所以它使用了不同的默认动词.因此,如果ShellExecute呼叫被替换为:
HINSTANCE hinst = ShellExecuteW(NULL, NULL, L"C:\\path\\to\\file.pps", NULL, NULL, SW_SHOWNORMAL);
然后系统会查找可能会或可能不会open(通常是)的默认动词,因此,如果不明确地使用此动词,则会将此决定留给系统.