当前位置:编程学习 > C/C++ >>

[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++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,