查看完整版本: [-- 怎样摸拟一个鼠标事件, 让鼠标能自动打开桌面上的回收站? --]

QTCN开发网 -> Qt基础编程 -> 怎样摸拟一个鼠标事件, 让鼠标能自动打开桌面上的回收站? [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

y1363386323 2018-02-09 20:54

怎样摸拟一个鼠标事件, 让鼠标能自动打开桌面上的回收站?

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

never_forget 2018-02-10 09:30
是要打开固定位置的程序还是要打开指定的程序?如果是指定的程序你可以试试直接通过程序名字打开,Qt 提供相关的函数!

kimtaikee 2018-02-11 11:11
对于Windows系统你得调用Win32 API
  1. #include <windows.h>
    void MainWindow::sendWinEvent(const QPoint &pos)
    {
    #ifdef Q_OS_WIN
        INPUT ip;

        // Set up a generic mouse press event.
        ip.type = INPUT_MOUSE;
        ip.mi.dx = pos.x();
        ip.mi.dy = pos.y();
        ip.mi.mouseData = 0;
        ip.mi.time = 0;
        ip.mi.dwExtraInfo = 0;

        // First click
        ip.mi.dwFlags = (MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN);
        SendInput(1, &ip, sizeof(INPUT));

    //    Sleep(10);

        ip.mi.dwFlags = (MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTUP);
        SendInput(1, &ip, sizeof(INPUT));

        Sleep(50);

        // Second click
        ip.mi.dwFlags = (MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN);
        SendInput(1, &ip, sizeof(INPUT));

    //    Sleep(10);

        ip.mi.dwFlags = (MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTUP);
        SendInput(1, &ip, sizeof(INPUT));
    #endif
    }

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 2018-02-27 09:52
回收站也是个进程,应该启动它的进程吧


查看完整版本: [-- 怎样摸拟一个鼠标事件, 让鼠标能自动打开桌面上的回收站? --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled