• 3274阅读
  • 3回复

[提问]怎样摸拟一个鼠标事件, 让鼠标能自动打开桌面上的回收站? [复制链接]

上一主题 下一主题
离线y1363386323
 

只看楼主 倒序阅读 楼主  发表于: 2018-02-09

如上图所示, 我想摸拟一个鼠标事件, 让鼠标能自动打开桌面上的回收站, 请问代码该怎样写?
下面是我写的代码, 可是不起作用
QMouseEvent myPressEvent(QEvent:: QEvent::MouseButtonDblClick,QPoint(0,0),Qt::LeftButton,Qt::NoButton,Qt::NoModifier);
qApp->sendEvent(QApplication::desktop(),&myPressEvent);
离线never_forget

只看该作者 1楼 发表于: 2018-02-10
是要打开固定位置的程序还是要打开指定的程序?如果是指定的程序你可以试试直接通过程序名字打开,Qt 提供相关的函数!
离线kimtaikee

只看该作者 2楼 发表于: 2018-02-11
对于Windows系统你得调用Win32 API
  1. #include <windows.h>
  2. void MainWindow::sendWinEvent(const QPoint &pos)
  3. {
  4. #ifdef Q_OS_WIN
  5.     INPUT ip;
  6.     // Set up a generic mouse press event.
  7.     ip.type = INPUT_MOUSE;
  8.     ip.mi.dx = pos.x();
  9.     ip.mi.dy = pos.y();
  10.     ip.mi.mouseData = 0;
  11.     ip.mi.time = 0;
  12.     ip.mi.dwExtraInfo = 0;
  13.     // First click
  14.     ip.mi.dwFlags = (MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN);
  15.     SendInput(1, &ip, sizeof(INPUT));
  16. //    Sleep(10);
  17.     ip.mi.dwFlags = (MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTUP);
  18.     SendInput(1, &ip, sizeof(INPUT));
  19.     Sleep(50);
  20.     // Second click
  21.     ip.mi.dwFlags = (MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN);
  22.     SendInput(1, &ip, sizeof(INPUT));
  23. //    Sleep(10);
  24.     ip.mi.dwFlags = (MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTUP);
  25.     SendInput(1, &ip, sizeof(INPUT));
  26. #endif
  27. }

LIBS += user32.lib

REF:
1. https://stackoverflow.com/questions/5789843/how-i-can-simulate-a-double-mouse-click-on-window-i-khow-handle-on-x-y-coord
2. https://social.msdn.microsoft.com/Forums/en-US/c1112e9e-1a96-477f-8c71-e0e24e4f892f/simulate-doubleclick?forum=csharplanguage
3. https://msdn.microsoft.com/en-us/library/ms646273(v=VS.85).aspx

离线fearlazy

只看该作者 3楼 发表于: 2018-02-27
回收站也是个进程,应该启动它的进程吧
个人博客: www.fearlazy.com 

学习使我快乐!
快速回复
限100 字节
 
上一个 下一个