繁体   English   中英

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

[英]Using Perl, Python, or Ruby, how to write a program to "click" on the screen at scheduled time?

使用 Perl、Python 或 Ruby,我可以编写一个程序,可能调用 Win32 API,以在预定时间(例如每 1 小时)“单击”屏幕吗?

细节:

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

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

顺便问一下,Grease Monkey 或任何 Firefox 插件也可以用来做这个吗?

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

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

例子

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查找 window,并使用MouseClick向特定的 window 发送点击。

如果允许使用不同的工具,您应该查看AutoHotkeyAutoIt 这些工具就是为这类事情而生的,我一直热衷于为正确的工作使用正确的工具。

我相信 AutoHotkey 基于 AutoIt,这是我个人的喜好。 对于您要实现的目标,您只需要 2 个功能, MouseMoveMouseClick

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

使用像 Python 或 Ruby 这样的脚本语言,我猜你最终会挂钩到这些 Windows API 函数之一。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM