用Windows提供的Shell類,用戶可以在C++中查詢和執行鼠標右鍵的彈出菜單。如下面的例子通過模擬鼠標右鍵操作來達到將notepad.exe pin到taskbar的目的。注意其中的項名是帶快捷鍵符的。
[cpp]
#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <cstdlib>
#include <cassert>
#include <cstring>
#include <windows.h>
#include <iostream>
#include <string>
#include <shellapi.h>
#include <Shobjidl.h>
#include <shlobj.h>
#import <Shell32.dll>
using namespace std;
int InvokeItemInPopupMenu(const char * path, const char * file_name, const char * item_name)
{
CoInitialize(NULL);
Shell32::IShellDispatchPtr ptrShell;
ptrShell.CreateInstance(__uuidof(Shell32::Shell));
_variant_t var((short)Shell32::ssfRECENT);
Shell32::FolderPtr ptrFolder = ptrShell->NameSpace(path);
Shell32::FolderItemPtr ptrItem = ptrFolder->ParseName(file_name);
Shell32::FolderItemVerbsPtr t_verbs = ptrItem->Verbs();
for (long i = 0; i < t_verbs->Count; ++i) {
Shell32::FolderItemVerbPtr t_verb = t_verbs->Item(i);
cout << t_verb->Name << endl;
if (!strcmp(t_verb->Name, item_name)) {
t_verb->DoIt();
Sleep(100);
}
}
ptrItem.Release();
ptrFolder.Release();
ptrShell.Release();
CoUninitialize();
return 0;
}
int main()
{
InvokeItemInPopupMenu("C:\\Windows", "notepad.exe", "Pin to Tas&kbar");
return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <cstdlib>
#include <cassert>
#include <cstring>
#include <windows.h>
#include <iostream>
#include <string>
#include <shellapi.h>
#include <Shobjidl.h>
#include <shlobj.h>
#import <Shell32.dll>
using namespace std;
int InvokeItemInPopupMenu(const char * path, const char * file_name, const char * item_name)
{
CoInitialize(NULL);
Shell32::IShellDispatchPtr ptrShell;
ptrShell.CreateInstance(__uuidof(Shell32::Shell));
_variant_t var((short)Shell32::ssfRECENT);
Shell32::FolderPtr ptrFolder = ptrShell->NameSpace(path);
Shell32::FolderItemPtr ptrItem = ptrFolder->ParseName(file_name);
Shell32::FolderItemVerbsPtr t_verbs = ptrItem->Verbs();
for (long i = 0; i < t_verbs->Count; ++i) {
Shell32::FolderItemVerbPtr t_verb = t_verbs->Item(i);
cout << t_verb->Name << endl;
if (!strcmp(t_verb->Name, item_name)) {
t_verb->DoIt();
Sleep(100);
}
}
ptrItem.Release();
ptrFolder.Release();
ptrShell.Release();
CoUninitialize();
return 0;
}
int main()
{
InvokeItemInPopupMenu("C:\\Windows", "notepad.exe", "Pin to Tas&kbar");
return 0;
}