使用Perl,Python或Ruby,如何编写程序以在预定时间“点击”屏幕?

使用Perl,Python或Ruby,我可以编写一个程序,可能是调用Win32 API,在预定的时间点击屏幕,就像每1小时一样?

细节:

这是为了实验 – 点击对Flash内容以及屏幕上的任何元素都有效吗? 如果程序可以记录点击需要在屏幕上显示的位置,或者至少在屏幕上绘制一个红点以显示点击的位置,那就太好了。

点击是针对窗口还是只是屏幕上的一般像素? 如果弹出一些病毒扫描程序覆盖点击发生的地方怎么办? (尽管如果程序首先点击窗口的空白区域,那么它可以首先将该窗口带到前台)。

顺便说一句,Grease Monkey或任何Firefox插件都可以用来做这个吗?

如果您尝试在网站中自动执行某项任务,您可能需要查看WWW::Selenium 。 它与Selenium Remote Control一起允许您远程控制Web浏览器。

在Python中有ctypes ,在Perl中有Win32 :: API

ctypes例子

 from ctypes import * windll.user32.MessageBoxA(None, "Hey MessageBox", "ctypes", 0); 

Win32 :: Api示例

 use Win32::GUI qw( WM_CLOSE ); my $tray = Win32::GUI::FindWindow("WindowISearchFor","WindowISearchFor"); Win32::GUI::SendMessage($tray,WM_CLOSE,0,0); 

要回答实际问题,在Perl中,您将使用Win32 :: GuiTest模块提供的SendMouse(和相关函数)。

 #!/usr/bin/perl use strict; use warnings; use Win32::GuiTest qw( MouseMoveAbsPix SendMouse ); MouseMoveAbsPix(640,400); SendMouse "{LEFTCLICK}"; __END__ 

更新:

如果弹出一些病毒扫描程序覆盖点击发生的地方怎么办?

在这种情况下,您将使用FindWindowLike查找窗口,使用MouseClick将单击发送到该特定窗口。

如果允许使用其他工具,则应该查看AutoHotkey或AutoIt 。 这些工具是为这类工具而制作的,我一直热衷于使用合适的工具来完成正确的工作。

AutoHotkey基于AutoIt我相信,这是我个人的偏好。 你只需要2个函数来实现你想要实现的function, MouseMove和MouseClick 。

我发现这在Java或C ++中更容易实现。 Java有一个Robot类 ,它允许你只传递x,y坐标并点击某处。 使用C ++,您可以使用带有WM_MOUSE_DOWN标志的mouse_event()SendMessage()来实现相同的function。 SendMessage更具技术性,但它允许您使用FindWindow()并将鼠标单击发送到特定窗口,即使它已被最小化。

使用像Python或Ruby这样的脚本语言,我猜你最终还是会加入其中一个Windows API函数。