Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何以编程方式查询Windows控制面板? 我需要在整个Windows控制面板中搜索一个字符串(就像从C++开始的菜单或控制面板浏览器中的Windows搜索),有人能帮助我吗?_C++_Windows_Search_Mfc_Controlpanel - Fatal编程技术网

如何以编程方式查询Windows控制面板? 我需要在整个Windows控制面板中搜索一个字符串(就像从C++开始的菜单或控制面板浏览器中的Windows搜索),有人能帮助我吗?

如何以编程方式查询Windows控制面板? 我需要在整个Windows控制面板中搜索一个字符串(就像从C++开始的菜单或控制面板浏览器中的Windows搜索),有人能帮助我吗?,c++,windows,search,mfc,controlpanel,C++,Windows,Search,Mfc,Controlpanel,我已尝试在“控制面板”虚拟文件夹中搜索,但不起作用 编辑:现在可以了!但只有在符合适当的平台形式(x86或x64)的情况下(x86不适用于x64,所以) void CSearchView::BuildControlPanelCache() { CComPtr pDesktop; SHGetDesktopFolder(&pDesktop); PIDLIST_绝对路径; SHGetKnownFolderIDList(文件夹ID\u控制面板文件夹,0,NULL,路径(&path)); 首席财务官; p

我已尝试在“控制面板”虚拟文件夹中搜索,但不起作用

编辑:现在可以了!但只有在符合适当的平台形式(x86或x64)的情况下(x86不适用于x64,所以)

void CSearchView::BuildControlPanelCache()
{
CComPtr pDesktop;
SHGetDesktopFolder(&pDesktop);
PIDLIST_绝对路径;
SHGetKnownFolderIDList(文件夹ID\u控制面板文件夹,0,NULL,路径(&path));
首席财务官;
pDesktop->BindToObject(路径,NULL,IID_-IShellFolder,(void**)和pFolder);
ILFree(路径);
铅笔;
如果(pFolder->EnumObjects(NULL,SHCONTF_非文件夹| SHCONTF_文件夹,&pEnum)!=S_确定)pEnum=NULL;
如果(!pEnum)返回;
PITEMID_CHILD pidl;
而(pEnum->Next(1,&pidl,NULL)==S_OK)
{
STRRET strDispName;
如果(pFolder->GetDisplayNameOf(pidl、SHGDN_NORMAL和STDispName)==S_OK)
{ 
CComPtr pLink;
if(成功(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);
}
}

这似乎起了作用!伙计们

尝试搜索
%SYSTEM%\*.cpl
。在某些系统上,
%CSIDL\u控制%\*.cpl

您可以枚举所有控制面板项目,并搜索您要查找的项目,然后重试

如何查找小程序名称或说明?逐个加载all.cpl以验证名称或描述是否匹配?这是一种方法。根据您的目标,也许您可以
system(“grep模式%system%/*.cpl”)?不是所有的.cpl文件都在%system%中,人们现在应该在注册表中注册它们……对不起,我忘记指定了。Vista/7的目标也是如此
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);
    }
}