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);
}
}
トリックを行うようです!タイガイズ!
私はアプレットの名前や説明のためにserachだろうか?すべての.cplを1つずつロードして、名前または説明が一致するかどうかを確認します。一つの方法だ –
。あなたの目的に応じて、おそらく 'system(" grep pattern%SYSTEM%/ *。cpl ");'? – wallyk
すべての.cplファイルが%system%にあるわけではありませんが、最近ではレジストリに登録されるはずです... – Anders