2012-04-19 7 views
1

C++のMFCで、文字列(スタートメニューやコントロールパネルのエクスプローラからのWindows検索のように)をWindowsのコントロールパネル全体で検索する必要があります。どのようにWindowsのコントロールパネルプログラムを照会するには?

私は...

EDITをすでにコントロールパネル仮想フォルダ内を検索しようとしましたが、動作しません:それが動作するようになりました!しかし、(SOのx64上のx86 dosen't作業)適切な厚底(x86またはx64)にcompliled場合にのみ

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); 
    } 
} 

トリックを行うようです!タイガイズ!

答えて

0

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

+0

私はアプレットの名前や説明のためにserachだろうか?すべての.cplを1つずつロードして、名前または説明が一致するかどうかを確認します。一つの方法だ –

+0

。あなたの目的に応じて、おそらく 'system(" grep pattern%SYSTEM%/ *。cpl ");'? – wallyk

+1

すべての.cplファイルが%system%にあるわけではありませんが、最近ではレジストリに登録されるはずです... – Anders

0

あなたはすべてのコントロールパネル項目を列挙し、thisを試してみて、ためにあなたが探している1を検索することができますthis

+0

申し訳ありませんが、指定するのを忘れてしまいました。ターゲットSOはVista/7です –

関連する問題