-1

鼠标按钮单击我正在尝试在特定坐标处创建自动鼠标单击事件。

此源代码将鼠标指针移动到坐标区域,但没有单击。

请帮我解决这个问题或提出任何新的想法来自动化鼠标点击事件。

注意:我使用的是 QT 3.0.3

 void mMouseClickFunction() 
  { 

   QWidget *d = QApplication::desktop()->screen(); 
   int w=d->width(); // returns desktop width 
   int h=d->height(); 
   printf("w=%d\nh=%d\n",w,h); 
   int x,y; 
   printf("Enter the points...\n"); 
   scanf("%d%d",&x,&y); 
   QApplication::desktop()->cursor().setPos(x,y); 
   QPoint pt(x,y); 
    std::cout << pt.x() << " " << pt.y() << std::endl; 
   QMouseEvent *e = new QMouseEvent(QEvent::MouseButtonPress, pt,Qt::LeftButton, 0); 
   QApplication::sendEvent(d, e); 
   std::cout << "in contentsMousePressEvent"<< e->x() << " " << e->y() << std::endl; 
   QMouseEvent *p = new QMouseEvent(QEvent::MouseButtonRelease, pt,Qt::LeftButton, 0); 
   QApplication::sendEvent(d, p); 
   std::cout << "in contentsMouseReleaseEvent"<< p->x() << " " << p->y() << std::endl; 
} 
4

1 回答 1

0

QApplication::sendEvent向 QApplication 内部发送事件,而不是系统范围的事件。您可能需要特定于系统才能发送这样的事件。这是windows的函数调用:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms646310(v=vs.85).aspx

但是即使使用这种调用,您也将被限制在某些窗口中,除非您的 UIAccess 为 true,并且您的程序是位于硬盘驱动器右侧的已签名应用程序。

编辑:这是一个页面,其中包含一些在 Linux 中发送输入的示例:

http://www.linuxquestions.org/questions/programming-9/simulating-a-mouse-click-594576/

希望有帮助。

于 2013-04-01T18:49:07.863 回答