[C/C++] Windows下模拟鼠标右键操作
用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;
}
补充:软件开发 , C++ ,