2012-04-19 3 views
1

C++ MFC에서 문자열을 찾기 위해 전체 Windows 제어판을 검색해야합니다 (예 : 시작 메뉴 또는 제어판 탐색기에서 Windows 검색). 아무도 도와 줄 수 없습니까?Windows 제어판을 프로그래밍 방식으로 쿼리하는 방법?

나는 ...

편집을 이미 제어판 가상 폴더 내에서 검색을 시도했지만 작동하지 않습니다 : 그것은 지금 작품! 하지만

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

트릭을 할 것 같다 (SO 64에 86 나던 작업) 적절한 plataform (86 또는 64)에 compliled 경우! 타이 얘들 아!

답변

0

%SYSTEM%\*.cpl을 시도해보십시오. 일부 시스템에서는 %CSIDL_CONTROLS%\*.cpl입니다.

+0

내가 애플릿의 이름이나 설명을 serach 얼마나? 모든 .cpl을 하나씩로드하여 이름이나 설명이 일치하는지 확인하십시오. –

+0

그건 한 가지 방법입니다. 당신의 목표에 따라, 아마 당신은'system ("grep pattern % SYSTEM %/*. cpl");'? – wallyk

+1

모든 .cpl 파일이 % system %에있는 것은 아니므로, 사람들은 요즘 레지스트리에 등록해야합니다 ... – Anders

0

당신은 모든 제어판 항목을 열거하고 this을 시도하고 당신이 찾고있는 하나를 검색 할 수 있습니다 this

+0

죄송합니다, 지정하는 것을 잊었습니다. 대상은 Vista/7입니다. –