如何以编程方式查询Windows控制面板?
问题描述:
我需要在C++ MFC中搜索整个Windows控制面板中的字符串(就像开始菜单或控制面板资源管理器中的Windows搜索一样),任何人都可以帮助我?如何以编程方式查询Windows控制面板?
我已经尝试到控制面板的虚拟文件夹内进行搜索,但没有工作...
编辑:现在的工作!但只有当compliled到适当plataform(x86或x64)(在x64 86这么想的工作SO)
void CSearchView::BuildControlPanelCache()
{
CComPtr<IShellFolder> pDesktop;
SHGetDesktopFolder(&pDesktop);
PIDLIST_ABSOLUTE path;
SHGetKnownFolderIDList(FOLDERID_ControlPanelFolder,0,NULL,&path);
CComPtr<IShellFolder> pFolder;
pDesktop->BindToObject(path,NULL,IID_IShellFolder,(void**)&pFolder);
ILFree(path);
CComPtr<IEnumIDList> pEnum;
if (pFolder->EnumObjects(NULL,SHCONTF_NONFOLDERS|SHCONTF_FOLDERS,&pEnum)!=S_OK) pEnum=NULL;
if (!pEnum) return;
PITEMID_CHILD pidl;
while (pEnum->Next(1,&pidl,NULL)==S_OK)
{
STRRET strDispName;
if(pFolder->GetDisplayNameOf(pidl, SHGDN_NORMAL, &strDispName) == S_OK)
{
CComPtr<IQueryInfo> pLink;
if (SUCCEEDED(pFolder->GetUIObjectOf(NULL,1,(PCITEMID_CHILD*) &pidl,IID_IQueryInfo,NULL,(void**)&pLink)))
{
TCHAR *pwszTip;
pLink->GetInfoTip(0, &pwszTip);
if (pwszTip)
{
SHFree(pwszTip);
}
//pLink->Release();
}
}
ILFree(pidl);
}
}
似乎这样的伎俩! Ty Guys!
答
尝试搜索%SYSTEM%\*.cpl
。在某些系统上,%CSIDL_CONTROLS%\*.cpl
。
我怎么会检索算法的小程序名称或说明?逐个加载所有.cpl以验证名称或描述是否匹配? – 2012-04-19 19:17:14
这是一种方法。根据你的目标,也许你可以'系统(“grep模式%SYSTEM%/ *。cpl”);'? – wallyk 2012-04-19 19:18:45
不是所有的.cpl文件都在%system%,人们应该在注册表中注册它们... – Anders 2012-05-16 21:26:49