2012-04-19 35 views
1

我需要在C++ MFC中搜索整個Windows控制面板中的字符串(就像開始菜單或控制面板資源管理器中的Windows搜索一樣),任何人都可以幫助我?如何以編程方式查詢Windows控制面板?

我已經嘗試到控制面板的虛擬文件夾內進行搜索,但沒有工作...

編輯:現在的工作!但只有當compliled到適當plataform(x86或x64)(在x64 86這麼想的工作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!

回答

0

嘗試搜索%SYSTEM%\*.cpl。在某些系統上,%CSIDL_CONTROLS%\*.cpl

+0

我怎麼會檢索算法的小程序名稱或說明?逐個加載所有.cpl以驗證名稱或描述是否匹配? – 2012-04-19 19:17:14

+0

這是一種方法。根據你的目標,也許你可以'系統(「grep模式%SYSTEM%/ *。cpl」);'? – wallyk 2012-04-19 19:18:45

+1

不是所有的.cpl文件都在%system%,人們應該在註冊表中註冊它們... – Anders 2012-05-16 21:26:49

0

您可以枚舉所有的控制面板項目和搜索您正在尋找嘗試this和一個this

+0

對不起,我忘了指定。目標SO是Vista/7 – 2012-04-20 16:27:33