Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Java-программа и Windows-приложение, можно ли их как-то синхронизировать? 
V
    Опции темы
check
Дата 4.11.2006, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 610
Регистрация: 3.4.2006

Репутация: 2
Всего: 23



Здравствуйте! Бьюсь над этой проблемой уже неделю.
Необходимо(ну или по-крайней мере желательно) в одной программулине под Windows автоматизировать последовательность действий, которая будет повторятся очень часто, и для большей дружественности пользователю хотелось бы его, пользователя, от лишней работы избавить. 
Все действия будут выполнятся с клавиатуры. 
Таким образом задача разделяется на две части. 
Первое - эмуляция клавиатуры. С этим я уже разобрался.
Второе - нужно синхронизировать Java-программу, которая эмулирует нужную последовательность действий, с программой, в которой эти действия должны быть выполнены. Вот это уже фокус посложнее, я по-крайней мере не знаю как это можно сделать. 
То есть выглядеть это должно так: обычным образом запускаем нашу программу и как только её окно активизируется, запускается Java-эмулятор и начинает "жать на кнопки", начиная с клавиши alt(чтобы забраться на меню). 
Только вот как сделать чтобы он запускался. 
Вообще вопрос скорее по форточкам, чем по Java. Я задал вопрос в соответствующем разделе, но там что-то безмолвствуют.
Так что если считаете, что вопрос к Java ну совсем не имеет отношения, можно ответить здесь.
PM MAIL   Вверх
powerOn
Дата 4.11.2006, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



Цитата(check @  4.11.2006,  14:27 Найти цитируемый пост)
Только вот как сделать чтобы он запускался. 

Никак. Ручками запускать. 

Или написать программу которая бы стартовала 2 процесса. 
Т.е. запускаете её, будто запускаете основную Windows программу, а она, на самом деле, запускает оригинальную программу, а потом java программу. При этом данный загрузчик можно написать на Java, благо возможность есть. 


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
check
Дата 4.11.2006, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 610
Регистрация: 3.4.2006

Репутация: 2
Всего: 23



А как вообще запустить стороннюю программу? Пол инета перерыл, но не нашёл.
Понял только, что нужно наследовать класс от класса Thread и переопределить метод run().  А что в методе run писать?
PM MAIL   Вверх
powerOn
Дата 4.11.2006, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



тут посмотри.


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
LSD
Дата 4.11.2006, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538





--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
check
Дата 4.11.2006, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 610
Регистрация: 3.4.2006

Репутация: 2
Всего: 23



Всё сделал, огромное спасибо за помощь!
Надо сказать, если ещё сделать sleep между событиями клавы, выглядит очень эффектно, прямо полтергейст какой-то!
Но этого я конечно делать не буду, зачем пугать людей.  smile 
Представте запускаете вы себе какой нибудь ексель, а у вас вдруг начинают сами собой меню выдвигаться, курсор бегает сам по себе.
Извиняюсь за оффтопик, конечно, перевозбудился...

P.S. Всё таки жаль, что нельзя стартовать с основной программы.
PM MAIL   Вверх
check
Дата 6.11.2006, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 610
Регистрация: 3.4.2006

Репутация: 2
Всего: 23



Только почему-то Enter не нажимается.

Код

import java.awt.*;

class KeyEmulator {
  

  public void pressKey(int key) {
    try {
      Robot rb=new Robot();
      rb.keyPress(key);
      rb.keyRelease(key);
    }
    catch (AWTException ex) {};
  }
}

public class Key extends Thread {

  public static void main(String[] args) {
      //массив десятичных кодов клавиш
      int keys[] = {18,40,40,40,40,38,38,38,39,40,40,40,40,38,38,38,38,39,40,13}; 
      try 
       {
         KeyEmulator em = new KeyEmulator();
         for (int i=0; i < keys.length; i++) {
           em.pressKey(keys[i]);
           sleep(200); //это просто для прикола
         }
       }
       catch(Exception ex) {}
    
  }
}


Десятичный код клавиши Enter, если не ошибаюсь 13. 
События от других клавиш проходят нормально.
PM MAIL   Вверх
LSD
Дата 6.11.2006, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Используй константы из KeyEvent: KeyEvent.VK_ENTER, KeyEvent.VK_UP и т.д.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
check
Дата 6.11.2006, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 610
Регистрация: 3.4.2006

Репутация: 2
Всего: 23



Спасибо, всё нажимается.
Десятичный код Enter видимо не срабатывал просто потому что число такое  smile 
PM MAIL   Вверх
check
Дата 14.1.2007, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 610
Регистрация: 3.4.2006

Репутация: 2
Всего: 23



Неожиданное продолжение темы  smile 

По независящим от меня причинам последовательность действий, 
которую должен выполнить мой "эмулятор пользователя" изменилась.

Появилась необходимость получить фокус ввода или попросту говоря поставить курсор
в поле при помощи мыши.  Ни Tab, ни какие другие клавиши не позволяют этого сделать.

Для того чтобы эмулировать щелчок мышью в поле нужно сначала переместить "мышь" 
в нужную позицию 
Код

mouseMove(int x, int y)

Вопрос в том как получить координаты x и y.   Я знаю, что в Java есть методы позволяющие получить координаты мыши в момент возникновения события, но события ловятся только если
они произошли в окне Java-приложения, а в данном случае это не так. 

Как получить координаты поля, в которое мне нужно поставить курсор?


 
PM MAIL   Вверх
LSD
Дата 15.1.2007, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(check @  14.1.2007,  00:03 Найти цитируемый пост)
Как получить координаты поля, в которое мне нужно поставить курсор?

Текущее положение мыши можно получить:
Код
MouseInfo.getPointerInfo().getLocation()

не знаю правда поможет ли.

А вообще только OCR smile


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
unkis
Дата 15.1.2007, 13:15 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 802
Регистрация: 8.9.2004

Репутация: нет
Всего: 1



извините может это немного не в  тему, но существуют же программы для тестов приложения, они как-то отлавливают какие-то windows message, и тем самым могут влиять на приложения.

Я всего этого не знаю а просто где-то слышал.
Но если это так, то может можно тоже отловить эти mesage?


--------------------
www.unkis.com
PM MAIL WWW   Вверх
Metal_Heart
Дата 15.1.2007, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а почему бы и нет?
**


Профиль
Группа: Участник
Сообщений: 728
Регистрация: 31.3.2005
Где: Москва

Репутация: 4
Всего: 12



unkis, да, я тоже это краем глаза видел, даже кнопки нажимал виртуально  smile 
check, ты лучше к Сишникам сходи, они тебя научат как с виндовой формой обращаться  smile 


--------------------
 не стыдно учиться, а стыдно не учиться 
PM ICQ   Вверх
Alexandr87
Дата 15.1.2007, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


дыкий псых
***


Профиль
Группа: Завсегдатай
Сообщений: 1459
Регистрация: 27.11.2004
Где: Алматы, Казахстан

Репутация: 9
Всего: 39



Вощем, вам нужно в раздел c-winapi.

Есть ли смысл делать это на Java? По-любой для фокуса с определением координат контрола нужно испольозовать winapi функции, следоавтельно писать библиотеку и jni к ней, может стоит всеж обойтись средствами winpi.
PM Jabber   Вверх
check
Дата 15.1.2007, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 610
Регистрация: 3.4.2006

Репутация: 2
Всего: 23



Цитата(Alexandr87 @  15.1.2007,  15:41 Найти цитируемый пост)
Есть ли смысл делать это на Java? 

Я делаю это на Java, потому что на PHP этого точно не сделать  smile 

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.3464 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.