1

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 Guys!

4

2 に答える 2

0

すべてのコントロール パネル項目を列挙し、探しているものを検索できます。これこれを試してください。

于 2012-04-20T04:50:06.973 に答える
0

検索してみてください%SYSTEM%\*.cpl。一部のシステムでは、%CSIDL_CONTROLS%\*.cpl.

于 2012-04-19T18:13:54.717 に答える