如何以编程方式查询 Windows 控制面板

How to query Windows Control Panel Programmatically?

本文关键字:查询 Windows 控制面板 方式 编程      更新时间:2023-10-16
我需要在整个 Windows

控制面板中搜索字符串(就像从开始菜单或控制面板资源管理器搜索C++ Windows 搜索一样),有人可以帮助我吗?

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

编辑:它现在可以工作了! 但前提是符合正确的平台(x86 或 x64)(x86 剂量不适用于 x64 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);
    }
}

它似乎可以解决问题!伙计们!

尝试搜索%SYSTEM%*.cpl 。 在某些系统上,%CSIDL_CONTROLS%*.cpl .

您可以枚举所有控制面板项并搜索您要查找的项,请尝试此项和此项