Используя Perl, Python или Ruby, как написать программу, которая «щелкает» по экрану в назначенное время? - PullRequest
1 голос
/ 17 июня 2009

Используя Perl, Python или Ruby, могу ли я написать программу, возможно, вызывающую Win32 API, для "нажатия" на экране в запланированное время, например, каждые 1 час?

Подробности:

Это для экспериментов. Может ли нажатие быть эффективным для содержимого Flash, а также для любого элемента на экране? Может быть хорошо, если программа может записать, где на экране должен произойти щелчок, или, по крайней мере, нарисовать красную точку на экране, чтобы показать, где она щелкает.

Может ли щелчок быть направлен к окну или это всего лишь обычный пиксель на экране? Что, если какая-нибудь антивирусная программа выскакивает на место, где должен произойти щелчок? (хотя, если программа сначала нажимает на пустое пространство окна, она может сначала вывести это окно на передний план).

Кстати, можно ли для этого использовать Grease Monkey или любое дополнение Firefox?

Ответы [ 5 ]

8 голосов
/ 17 июня 2009

Если вы пытаетесь автоматизировать какую-либо задачу на веб-сайте, вы можете посмотреть на WWW::Selenium. Вместе с Selenium Remote Control он позволяет удаленно управлять веб-браузером.

7 голосов
/ 17 июня 2009

В 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);
6 голосов
/ 18 июня 2009

Чтобы ответить на реальный вопрос, в Perl вы должны использовать SendMouse (и связанные с ним функции), предоставляемые модулем Win32 :: GuiTest .

#!/usr/bin/perl

use strict;
use warnings;

use Win32::GuiTest qw( MouseMoveAbsPix SendMouse );

MouseMoveAbsPix(640,400);
SendMouse "{LEFTCLICK}";

__END__

UPDATE:

Что, если какая-нибудь антивирусная программа выскакивает на место где должен произойти щелчок?

В этом случае вы должны использовать FindWindowLike, чтобы найти окно, и MouseClick, чтобы отправить клик в это конкретное окно.

1 голос
/ 18 июня 2009

Если использование другого инструмента разрешено, вы должны взглянуть на AutoHotkey или AutoIt . Эти инструменты были созданы для такого рода вещей, и я всегда стремился использовать правильные инструменты для правильной работы.

AutoHotkey основан на AutoIt, я считаю, и это мое личное предпочтение. Для того, чего вы пытаетесь достичь, вам действительно нужны только 2 функции: MouseMove и MouseClick .

0 голосов
/ 17 июня 2009

Я считаю, что это легче сделать в Java или C ++. В Java есть класс роботов , который позволяет просто передавать координаты x, y и щелкать где-нибудь. Используя C ++, вы можете достичь той же функциональности, используя mouse_event() или SendMessage() с флагом WM_MOUSE_DOWN. SendMessage более техничен, но он позволяет вам использовать FindWindow() и отправлять щелчки мышью в определенное окно, даже если оно свернуто.

Используя язык сценариев, такой как Python или Ruby, я бы предположил, что вы все равно в конечном итоге подключитесь к одной из этих функций Windows API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...