【发布时间】:2009-08-12 09:15:10
【问题描述】:
我想检查特定文件是否可以通过 ShellExecute 成功“打开”,所以我尝试使用 AssocQueryString 来发现这一点。
例子:
DWORD size = 1024;
TCHAR buff[1024]; // fixed size as dirty hack for testing
int err = AssocQueryString(0, ASSOCSTR_EXECUTABLE, ".mxf", NULL ,buff , &size);
openAction->Enabled = ((err == S_OK) || (err == S_FALSE)) && (size > 0);
现在,这几乎可以工作了。如果有注册的应用程序,我会得到字符串。
但是,有一个问题:在Vista上,即使没有注册的应用程序,它返回的应用程序c:\Windows\System32\shell32.dll是关联的,这就是导致100%无用的东西“ Windows 无法打开此文件:Use the Web service to find the correct program?"对话。
显然,我想对最终用户隐藏 cr*p 的部分,但简单地将返回的字符串与常量进行比较似乎是一种丑陋、暴力和脆弱的做法。
此外,入侵注册表以完全禁用此对话框也不是一个好主意。
什么是更好的选择?
【问题讨论】:
标签: c++ winapi shellexecute