期盼死亡的小丑 发表于 2015-5-12 13:35:10

基于Visua C++2010 与 Windows 7 SDK开发windows7 Shell应用(1)-搜索文件夹

  windows7 shell 就是windows7操作系统的的控制台
  对于熟悉了命令行的人而言,用键盘调用程序比鼠标更快更省力
您可以用"Shell:"命令调用一切可以用资源管理器打开的项目甚至是一次完成.需要很多步骤才能完成的任务.
我们在程序里面如何调用呢,我们来使用为了windows7而生的VS2010,基于C++开发一个shell应用,
  基于VS2010+windows7调试通过,
  详情请见代码注释
  #define STRICT_TYPED_ITEMIDS#include #include #include #include #include #include // 显示界面设置清单挑选正确版本的Comctl32.dll#pragma comment(linker, "/"/manifestdependency:type='Win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'/"")// 创建一个实例的ICondition的接口,设置搜索的条件HRESULT GetCondition(ICondition **ppCondition){*ppCondition = NULL;// 创造条件接口。该接口可以帮助创造搜索文件夹的条件。IConditionFactory2 *pConditionFactory;HRESULT hr = CoCreateInstance(CLSID_ConditionFactory, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pConditionFactory));if (SUCCEEDED(hr)){ICondition *pConditionKind;hr = pConditionFactory->CreateStringLeaf(PKEY_Kind, COP_EQUAL, L"Document", NULL, CONDITION_CREATION_DEFAULT, IID_PPV_ARGS(&pConditionKind));if (SUCCEEDED(hr)){ICondition *pConditionSize;hr = pConditionFactory->CreateIntegerLeaf(PKEY_Size, COP_GREATERTHAN, 10240, CONDITION_CREATION_DEFAULT, IID_PPV_ARGS(&pConditionSize));if (SUCCEEDED(hr)){// 仅当所有条件满足的时候,开始检索文件夹ICondition *rgConditions[] = {pConditionKind, pConditionSize};hr = pConditionFactory->CreateCompoundFromArray(CT_AND_CONDITION, rgConditions, ARRAYSIZE(rgConditions), CONDITION_CREATION_DEFAULT, IID_PPV_ARGS(ppCondition));pConditionSize->Release();}pConditionKind->Release();}pConditionFactory->Release();}return hr;}//开辟了共同文件对话框到IShellItem和等待用户选择的结果文件。//然后显示在消息框中所选项目的名称。HRESULT OpenCommonFileDialogTo(IShellItem *pShellItemSearch){// 打开文件对话框IFileDialog* pFileDialog;HRESULT hr = CoCreateInstance(CLSID_FileOpenDialog, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pFileDialog));if (SUCCEEDED(hr)){// S设置为我们想显示的文件夹hr = pFileDialog->SetFolder(pShellItemSearch);if (SUCCEEDED(hr)){// 显示文件对话框hr = pFileDialog->Show(NULL);if (SUCCEEDED(hr)){// 获取被选择的文件IShellItem *pShellItemSelected;hr = pFileDialog->GetResult(&pShellItemSelected);if (SUCCEEDED(hr)){// 获取文件名称PWSTR pszName;hr = pShellItemSelected->GetDisplayName(SIGDN_NORMALDISPLAY, &pszName);if (SUCCEEDED(hr)){//显示它返回给用户WCHAR szMsg;StringCchPrintf(szMsg, ARRAYSIZE(szMsg), L"You Chose '%s'/r", pszName);MessageBox(NULL, szMsg, L"Search Folder Sample", MB_OK);CoTaskMemFree(pszName);}pShellItemSelected->Release();}}}pFileDialog->Release();}return hr;}/ /创建一个数组对象壳项目可访问使用IObjectCollection/ /或IShellItemArray。 IObjectCollection让项目被添加或从集合中删除。/ /对于代码需要运行在windows7上使用SHCreateShellItemArrayFromIDLists()HRESULT CreateShellItemArray(REFIID riid, void **ppv){*ppv = NULL;IShellLibrary *pLibrary;HRESULT hr = CoCreateInstance(CLSID_ShellLibrary, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pLibrary));if (SUCCEEDED(hr)){hr = pLibrary->GetFolders(LFF_ALLITEMS, riid, ppv);pLibrary->Release();}return hr;}/ /这助手创建的范围对象,它是检索的项目集合/ /定义在搜索的运作情况。HRESULT CreateScope(IShellItemArray **ppsia){*ppsia = NULL;IObjectCollection *pObjects;HRESULT hr = CreateShellItemArray(IID_PPV_ARGS(&pObjects));if (SUCCEEDED(hr)){IShellItem *psi;if (SUCCEEDED(SHCreateItemInKnownFolder(FOLDERID_DocumentsLibrary, 0, NULL, IID_PPV_ARGS(&psi)))){pObjects->AddObject(psi);psi->Release();}//其他项目可以添加到pObjects类似上面的代码。hr = pObjects->QueryInterface(ppsia);pObjects->Release();}return hr;}//这个程序是一个如何使用ISearchFolderItemFactory接口创建搜索文件夹的示例。//它创建了一个搜索,然后打开了共同文件对话框的显示搜索结果。int wmain(){//文件对话框拖放功能需要OLEHRESULT hr = OleInitialize(NULL);if (SUCCEEDED(hr)){ISearchFolderItemFactory *pSearchFolderItemFactory;hr = CoCreateInstance(CLSID_SearchFolderItemFactory, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pSearchFolderItemFactory));if (SUCCEEDED(hr)){IShellItemArray *psiaScope;hr = CreateScope(&psiaScope);if (SUCCEEDED(hr)){hr = pSearchFolderItemFactory->SetScope(psiaScope);if (SUCCEEDED(hr)){//设置的搜索显示名称hr = pSearchFolderItemFactory->SetDisplayName(L"Sample Query");if (SUCCEEDED(hr)){ICondition* pCondition;hr = GetCondition(&pCondition);if (SUCCEEDED(hr)){// 设置检索条件hr = pSearchFolderItemFactory->SetCondition(pCondition);if (SUCCEEDED(hr)){// 搜索IShellItem。这是一个虚拟桌面。IShellItem* pShellItemSearch;hr = pSearchFolderItemFactory->GetShellItem(IID_PPV_ARGS(&pShellItemSearch));if (SUCCEEDED(hr)){OpenCommonFileDialogTo(pShellItemSearch);pShellItemSearch->Release();}}pCondition->Release();}}}psiaScope->Release();}pSearchFolderItemFactory->Release();}OleUninitialize();}return 0;}
  
  附带常用Windows7 shell命令行,大家可以举一反三
  shell:Libraries
  shell:MusicLibrary
  shell:VideosLibrary
  shell:OtherUsersFolder
  shell:Device Metadata Store
  shell:PublicSuggestedLocations
  shell:DocumentsLibrary
  shell:User Pinned
  shell:UsersLibrariesFolder
  shell:PicturesLibrary
  shell:ImplicitAppShortcuts
  shell:Ringtones
  shell:CommonRingtones
  Windows Vista & 7
  shell:Common Programs
  shell:GameTasks
  shell:UserProfiles
  shell:MyComputerFolder
  shell:SyncSetupFolder
  shell:DpapiKeys
  shell:SamplePlaylists
  shell:Favorites
  shell:My Video
  shell:SearchHomeFolder
  shell:System
  shell:CommonVideo
  shell:SyncResultsFolder
  shell:LocalizedResourcesDir
  shell:Cookies
  shell:Original Images
  shell:CommonMusic
  shell:My Pictures
  shell:Cache
  shell:Downloads
  shell:CommonDownloads
  shell:AppData
  shell:SyncCenterFolder
  shell:My Music
  shell:ConflictFolder
  shell:SavedGames
  shell:InternetFolder
  shell:Quick Launch
  shell:SystemCertificates
  shell:Contacts
  shell:TreePropertiesFolder
  shell:Profile
  shell:Start Menu
  shell:Common AppData
  shell:PhotoAlbums
  shell:ConnectionsFolder
  shell:Administrative Tools
  shell:PrintersFolder
  shell:Default Gadgets
  shell:ProgramFilesX86
  shell:Searches
  shell:Common Startup
  shell:ControlPanelFolder
  shell:SampleVideos
  shell:SendTo
  shell:ResourceDir
  shell:ProgramFiles
  shell:CredentialManager
  shell:PrintHood
  shell:MAPIFolder
  shell:CD Burning
  shell:AppUpdatesFolder
  shell:Common Start Menu
  shell:LocalAppDataLow
  shell:Templates
  shell:Gadgets
  shell:Programs
  shell:Recent
  shell:SampleMusic
  shell:Desktop
  shell:CommonPictures
  shell:RecycleBinFolder
  shell:CryptoKeys
  shell:Common Templates
  shell:Startup
  shell:Links
  shell:OEM Links
  shell:SamplePictures
  shell:Common Desktop
  shell:NetHood
  shell:Games
  shell:Common Administrative Tools
  shell:NetworkPlacesFolder
  shell:SystemX86
  shell:History
  shell:AddNewProgramsFolder
  shell:Playlists
  shell:ProgramFilesCommonX86
  shell:PublicGameTasks
  shell:ChangeRemoveProgramsFolder
  shell:Public
  shell:Common Documents
  shell:CSCFolder
  shell:Local AppData
  shell:Windows
  shell:UsersFilesFolder
  shell:ProgramFilesCommon
  shell:Fonts
  shell:Personal
  Windows 7 Shortcuts
  Wireless Networks pop-up
  rundll32.exe van.dll,RunVAN
  Advanced Restore
  sdclt.exe /restorewizardadmin
  Restore Files
  sdclt.exe /restorewizard
  Backup Location & Settings
  sdclt.exe /configure
  Add Network Location (wizard)
  rundll32.exe shwebsvc.dll,AddNetPlaceRunDll
  Indexing Options
  control.exe srchadmin.dll
  Notification Cache
  rundll32.exe shell32.dll,Options_RunDLL 5
  Aero (Transparency) Off
  Rundll32.exe DwmApi #104
  Aero (Transparency) On
  Rundll32.exe DwmApi #102
  Welcome Center
  rundll32.exe oobefldr.dll,ShowWelcomeCenter
  Add/Remove Programs
  RunDll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,0
  Content Advisor
  RunDll32.exe msrating.dll,RatingSetupUI
  Control Panel
  RunDll32.exe shell32.dll,Control_RunDLL
  Date and Time Properties
  RunDll32.exe shell32.dll,Control_RunDLL timedate.cpl
  Display Settings
  RunDll32.exe shell32.dll,Control_RunDLL access.cpl,,3
  Device Manager
  RunDll32.exe devmgr.dll DeviceManager_Execute
  Folder Options - File Types
  RunDll32.exe shell32.dll,Control_Options 2
  Folder Options - General
  RunDll32.exe shell32.dll,Options_RunDLL 0
  Folder Options - Search
  RunDll32.exe shell32.dll,Options_RunDLL 2
  Folder Options - View
  RunDll32.exe shell32.dll,Options_RunDLL 7
  Forgotten Password Wizard
  RunDll32.exe keymgr.dll,PRShowSaveWizardExW
  Hibernate
  RunDll32.exe powrprof.dll,SetSuspendState
  Keyboard Properties
  RunDll32.exe shell32.dll,Control_RunDLL main.cpl @1
  Lock Screen
  RunDll32.exe user32.dll,LockWorkStation
  Mouse Properties
  RunDll32.exe shell32.dll,Control_RunDLL main.cpl @0
  Map Network Drive
  RunDll32.exe shell32.dll,SHHelpShortcuts_RunDLL Connect
  Network Connections
  RunDll32.exe shell32.dll,Control_RunDLL ncpa.cpl
  Power Options
  RunDll32.exe Shell32.dll,Control_RunDLL powercfg.cpl
  Regional Settings
  RunDll32.exe shell32.dll,Control_RunDLL intl.cpl,,3
  Stored Usernames and Passwords
  RunDll32.exe keymgr.dll,KRShowKeyMgr
  System Properties: Advanced
  RunDll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,4
  System Properties: Automatic Updates
  RunDll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,5
  Taskbar Properties
  RunDll32.exe shell32.dll,Options_RunDLL 1
  User Accounts
  RunDll32.exe shell32.dll,Control_RunDLL nusrmgr.cpl
  Windows Security Center
  RunDll32.exe shell32.dll,Control_RunDLL wscui.cpl
  Windows - About
  RunDll32.exe SHELL32.DLL,ShellAboutW
  Unplug/Eject Hardware
  RunDll32.exe shell32.dll,Control_RunDLL hotplug.dll
  Windows Firewall
  RunDll32.exe shell32.dll,Control_RunDLL firewall.cpl
  Wireless Network Setup
  RunDll32.exe shell32.dll,Control_RunDLL NetSetup.cpl,@0,WNSW
  Open Control Panel (All Items)
  explorer.exe shell:::{21ec2020-3aea-1069-a2dd-08002b30309d}
  Manage Wireless Networks
  explorer.exe shell:::{1fa9085f-25a2-489b-85d4-86326eedcd87}
  Sound Control Playback Tab
  rundll32.exe shell32.dll,Control_RunDLLmmsys.cpl
  Sound Control Sounds Tab
  rundll32.exe shell32.dll,Control_RunDLLmmsys.cpl,,2
  Sound Control Recording Tab
  rundll32.exe shell32.dll,Control_RunDLLmmsys.cpl,,1
  Add/Remove Programs
  rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl
  Add/Remove Windows Components
  rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,2
  Set Program Access and Computer Defaults
  rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,3
  People Near Me
  rundll32.exe shell32.dll,Control_RunDLL collab.cpl
  People Near Me Sign In Tab
  rundll32.exe shell32.dll,Control_RunDLL collab.cpl,,1
  Screan Resolution
  rundll32.exe shell32.dll,Control_RunDLL desk.cpl
  Personalization
  rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,2
  Screen Saver
  rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,1
  Windows Firewall
  rundll32.exe shell32.dll,Control_RunDLL firewall.cpl
  Device Manager
  rundll32.exe shell32.dll,Control_RunDLL hdwwiz.cpl
  Power Options
  rundll32.exe shell32.dll,Control_RunDLL powercfg.cpl
  Power Options Change Plan Settings
  rundll32.exe shell32.dll,Control_RunDLL powercfg.cpl,,1
  System Properties
  rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl
  System Properties Hardware Tab
  rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,2
  System Properties Advanced Tab
  rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,3
  System Properties System Protection Tab
  rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,4
  System Properties Remote Tab
  rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,5
  Pen and Touch Tablet PC Settings
  rundll32.exe shell32.dll,Control_RunDLL tabletpc.cpl
  Pen and Touch Tablet PC Settings Flicks Tab
  rundll32.exe shell32.dll,Control_RunDLL tabletpc.cpl,,1
  Pen and Touch Tablet PC Settings Handwriting Tab
  rundll32.exe shell32.dll,Control_RunDLL tabletpc.cpl,,2
  Phone and Modem Options
  rundll32.exe shell32.dll,Control_RunDLL telephon.cpl
  Phone and Modem Options Modems Tab
  rundll32.exe shell32.dll,Control_RunDLL telephon.cpl,,1
  Phone and Modems Options Advanced Tab
  rundll32.exe shell32.dll,Control_RunDLL telephon.cpl,,2
  Date and Time
  rundll32.exe shell32.dll,Control_RunDLL timedate.cpl
  Date and Time Additional Clocks
  rundll32.exe shell32.dll,Control_RunDLL timedate.cpl,,1
  Action Center
  rundll32.exe shell32.dll,Control_RunDLL wscui.cpl
  Unplug/Eject Hardware
  RunDll32.exe shell32.dll,Control_RunDLL hotplug.dll
  Internet Explorer Specific Commands
  Delete Temporary Internet Files:
  RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8
  Delete Cookies:
  RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 2
  Delete History:
  RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 1
  Delete Form Data:
  RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 16
  Delete Passwords:
  RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 32
  Delete All:
  RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 255
  Delete All + files and settings stored by Add-ons:
  RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 4351
  
  本文作者专著《Visual C++2010开发权威指南》即将推出,敬请关注,Visual C++2010最近技术,Windows7开发最新技术!
  
  欢迎技术交流!
页: [1]
查看完整版本: 基于Visua C++2010 与 Windows 7 SDK开发windows7 Shell应用(1)-搜索文件夹