![](/img/trans.png)
[英]How to write a Perl, Python, or Ruby program to change the memory of another process on Windows?
[英]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 发送点击。
如果允许使用不同的工具,您应该查看AutoHotkey或AutoIt 。 这些工具就是为这类事情而生的,我一直热衷于为正确的工作使用正确的工具。
我相信 AutoHotkey 基于 AutoIt,这是我个人的喜好。 对于您要实现的目标,您只需要 2 个功能, MouseMove和MouseClick 。
我发现这在 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.