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

1

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

Детали:

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

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

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

  • 0
    Есть ли успехи в этом? Ни один из ответов не решит вашу проблему?
Теги:
winapi

5 ответов

8
Лучший ответ

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

  • 0
    это может даже нажать на содержание Flash?
  • 1
    Он может нажать на что угодно в браузере.
7

В 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);
  • 0
    о, я установил Strawberry Perl, но вышеописанное не может работать ... нужно ли устанавливать некоторые модули? В нем говорится: «Невозможно найти Win32 / GUI.pm в @INC (@INC содержит: C: / strawberry / perl / lib C: / strawberry / perl / site / lib.) В строке try2.pl 1.
  • 0
    Загрузите Win32 :: GUI с search.cpan.org/~robertmay/Win32-GUI-1.06/docs/GUI.pod Следуйте соответствующим инструкциям cpan.org/modules/INSTALL.html.
Показать ещё 2 комментария
6

Чтобы ответить на реальный вопрос, в 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, чтобы отправить клик на это конкретное окно.

  • 0
    +1 для Win32 :: GuiTest. Это отличный инструмент. Я написал бота (App :: SweeperBot, доступный в виде скомпилированного .exe от sweeperbot.org ), который использует его для игры в тральщик, поэтому мне больше не нужно играть в него самому. ;) Win32 :: GuiTest также предоставляет средства для захвата экрана, а Win32 :: GUIRobot (который построен сверху) предоставляет специальные процедуры для поиска изображений на экране.
  • 0
    @pjf Спасибо. Я помню, как читал вашу статью. Отличная идея, отличная реализация.
1

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

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

0

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню