我想检查一个特定的文件是否可以通过ShellExecute成功“打开”,因此我试图使用AssocQueryString来发现它。如何通过ShellExecute查找文档是否可以打开?
例子:
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?”对话。
显然我想隐藏最终用户的* p *,但是简单地将返回的字符串与常量进行比较看起来像是一种丑陋,蛮力和脆弱的方式。
此外,黑客注册表完全禁用此对话框不是一个好主意。
什么是更好的选择?
谢谢 - 完美的作品,如果没有注册申请,就会“正常”失败。踢自己找不到这个... – Roddy 2009-08-12 14:35:57
太棒了,很高兴它解决了你的问题:-) – fhe 2009-08-12 15:00:56
由于Samba性能问题,不得不重新审视这个问题。发布了我现在在下面使用的答案。 – Roddy 2011-07-01 16:38:02