windows7 shell就是windows7操作系统的的控制台
对于熟悉了命令行的人而言,用键盘调用程序比鼠标更快更省力
您可以用"Shell:"命令调用一切可以用资源管理器打开的项目甚至是一次完成.需要很多步骤才能完成的任务.
我们在程序里面如何调用呢,我们来使用为了windows7而生的VS2010,基于C++开发一个shell应用,
基于VS2010+windows7调试通过,
详情请见代码注释
view plaincopy to clipboardprint?
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
#define STRICT_TYPED_ITEMIDS
#include <windows.h>
#include <structuredquery.h>
#include <strsafe.h>
#include <shlobj.h>
#include <propkey.h>
#include <propvarutil.h>
//显示界面设置清单挑选正确版本的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[128];
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()
{
//文件对话框拖放功能需要OLE
HRESULT 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;
}
#define STRICT_TYPED_ITEMIDS
#include <windows.h>
#include <structuredquery.h>
#include <strsafe.h>
#include <shlobj.h>
#include <propkey.h>
#include <propvarutil.h>
//显示界面设置清单挑选正确版本的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[128];
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()
{
//文件对话框拖放功能需要OLE
HRESULT 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