Rod*_*ddy 4 c++ winapi shellexecute
我想检查一个特定的文件是否可以通过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);
Run Code Online (Sandbox Code Playgroud)
现在,这几乎可行.如果有注册的应用程序,我会得到字符串.
但是,有一个问题:在Vista上,即使没有注册的应用程序,它返回应用程序c:\ Windows\System32\shell32.dll是关联的,这是带来100%无用的东西"Windows无法打开这个文件:使用Web服务找到正确的程序?" 对话.
显然我想要隐藏最终用户的cr*p,但简单地将返回的字符串与常量进行比较似乎是一种丑陋,暴力和脆弱的方式.
此外,黑客入侵注册表以完全禁用此对话框不是一个好主意.
什么是更好的选择?