【问题标题】:How to query Windows Control Panel Programmatically?如何以编程方式查询 Windows 控制面板?
【发布时间】:2012-05-01 07:20:49
【问题描述】:

我需要在 C++ MFC 中搜索整个 Windows 控制面板中的字符串(就像从开始菜单或控制面板资源管理器中搜索 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);
    }
}

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

【问题讨论】:

    标签: c++ windows search mfc controlpanel


    【解决方案1】:

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

    【讨论】:

    • 对不起,我忘了指定。目标 SO 是 Vista/7
    【解决方案2】:

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

    【讨论】:

    • 如何搜索小程序名称或描述?一个个加载所有.cpl,验证名称或描述是否匹配?
    • 这是一种方式。根据您的目标,也许您可​​以system("grep pattern %SYSTEM%/*.cpl");?
    • 并非所有 .cpl 文件都在 %system% 中,这些天人们应该在注册表中注册它们...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    • 2011-02-02
    • 1970-01-01
    • 2013-07-19
    • 1970-01-01
    • 2011-10-19
    • 1970-01-01
    相关资源
    最近更新 更多