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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Простая Java программа поверх сложной. Без API, используя буфер Windows. 
:(
    Опции темы
Artemij
  Дата 25.7.2008, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Привет!

Насколько реально реализовать программу на Java, которая собирает информацию и автоматически заполняет соответствующие поля в сторонней программе? Некий простой интерфейс с подсказками поверх более сложного. Сторонняя программа не имеет API.

Примерный алгоритм:
1) Пользователь заполняет все поля в простом интерфейсе.
2) Информация записывается в TXT файл и одновременно копируется в Windows буфер.
3) Информация из буфера копируется в соответствующие поля в сторонней программе.

Желательно свести к минимуму участие пользователя в данном процессе, естественно кроме заполнения полей информацией.

Подскажите примерно план реализации?

СПАСИБО!
PM MAIL WWW Skype GTalk MSN   Вверх
Orange
Дата 25.7.2008, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 6.9.2004
Где: Russia, Moscow

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



Я так понимаю сторонняя программа написана не на Java?
Что ей мешает читать информацию из файла?

Это сообщение отредактировал(а) Orange - 25.7.2008, 12:18
--------------------
Пару дней назад я познакомился с мальчиком......
PM MAIL ICQ   Вверх
Artemij
Дата 25.7.2008, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Orange @ 25.7.2008,  12:18)
Я так понимаю сторонняя программа написана не на Java?
Что ей мешает читать информацию из файла?

Да, сторонняя программа написана не на Javaне имеет API и не читает информацию из файлов. Более того является клиентом, который собирает информацию и отправляет её на сервер в БД. Речь идёт о Windows Only.

Например, Skype. Допустим мне не нравиться интерфейс ввода сообщения, и я хочу написать свой на Java.

PM MAIL WWW Skype GTalk MSN   Вверх
Orange
Дата 25.7.2008, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 6.9.2004
Где: Russia, Moscow

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



Хм, даже не знаю что тут предложить.

Конкретно по вопросам:

2) Информация записывается в TXT файл и одновременно копируется в Windows буфер.
Код

  public void setBuffer( String aString ){
    StringSelection stringSelection = new StringSelection( aString );
    Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
    clipboard.setContents( stringSelection, this );
  }

public String getBuffer() {
    String result = "";
    Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
    Transferable contents = clipboard.getContents(null);
    boolean hasTransferableText =
      (contents != null) &&
      contents.isDataFlavorSupported(DataFlavor.stringFlavor)
    ;
    if ( hasTransferableText ) {
      try {
        result = (String)contents.getTransferData(DataFlavor.stringFlavor);
      }
      catch (UnsupportedFlavorException ex){
        System.out.println(ex);
        ex.printStackTrace();
      }
      catch (IOException ex) {
        System.out.println(ex);
        ex.printStackTrace();
      }
    }
    return result;
  }


3) Информация из буфера копируется в соответствующие поля в сторонней программе.
JNI
--------------------
Пару дней назад я познакомился с мальчиком......
PM MAIL ICQ   Вверх
AntonSaburov
Дата 25.7.2008, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Цитата(Artemij @  25.7.2008,  11:39 Найти цитируемый пост)
Примерный алгоритм:
1) Пользователь заполняет все поля в простом интерфейсе.
2) Информация записывается в TXT файл и одновременно копируется в Windows буфер.
3) Информация из буфера копируется в соответствующие поля в сторонней программе.

Программа, которая самостоятельно гадит буфер обмена должна быть уничтожена. За такие программы увольнять надо сразу smile
Я не шучу - это крайне неудачное решение. Может лучше тогда посылать Windows-сообщения нужным контролам в окошке программы ?
PM MAIL WWW ICQ   Вверх
Orange
Дата 25.7.2008, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 6.9.2004
Где: Russia, Moscow

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



Цитата

Программа, которая самостоятельно гадит буфер обмена должна быть уничтожена. За такие программы увольнять надо сразу.

А можно поподробнее об этом? Что тут такого сильно криминального?
--------------------
Пару дней назад я познакомился с мальчиком......
PM MAIL ICQ   Вверх
AntonSaburov
Дата 25.7.2008, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Цитата(Orange @  25.7.2008,  14:21 Найти цитируемый пост)
А можно поподробнее об этом? Что тут такого сильно криминального?

Пользователь запомнил какие-то данные  в буфере обмена - надо ему было. Потом решил запустить такую славную программу, нажал на кнопочку. У него все хорошо. А теперь он хочет вставить свои данные (которые, как он наивно полагает, все еще в буфере) - и получает полную фигню. Думаешь кто-то захочет пользоваться такой программой ?
Это крайне неудобный и неюзабельный подход. Я еще лет 15 назад в этом убедился - пользователь просто в шоке бывает.
PM MAIL WWW ICQ   Вверх
powerOn
Дата 25.7.2008, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Думаю что если программа делает копирование не в тихоря, на например по нажатию кнопки пользователем, то решение нормальное. Так же как и Ctrl+C нажать.
Т.е. заполнил поля нажал на кнопку, данные в буфер ушли, переключился на другую прогу, вставил данные из буфера. Все довольны, все под контролем пользователя. Или я что то упустил? smile


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

PM MAIL   Вверх
AntonSaburov
Дата 25.7.2008, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Ну разве что под контролем пользователя. Хотя я не люблю такое.
PM MAIL WWW ICQ   Вверх
w1nd
Дата 25.7.2008, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


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

Репутация: 20
Всего: 54



Цитата(AntonSaburov @  25.7.2008,  14:15 Найти цитируемый пост)
Может лучше тогда посылать Windows-сообщения нужным контролам в окошке программы?

СтОит делать именно так smile 


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
Artemij
  Дата 25.7.2008, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Orange @ 25.7.2008,  13:09)
Хм, даже не знаю что тут предложить.

Конкретно по вопросам:

2) Информация записывается в TXT файл и одновременно копируется в Windows буфер.
Код

  public void setBuffer( String aString ){
    StringSelection stringSelection = new StringSelection( aString );
    Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
    clipboard.setContents( stringSelection, this );
  }

public String getBuffer() {
    String result = "";
    Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
    Transferable contents = clipboard.getContents(null);
    boolean hasTransferableText =
      (contents != null) &&
      contents.isDataFlavorSupported(DataFlavor.stringFlavor)
    ;
    if ( hasTransferableText ) {
      try {
        result = (String)contents.getTransferData(DataFlavor.stringFlavor);
      }
      catch (UnsupportedFlavorException ex){
        System.out.println(ex);
        ex.printStackTrace();
      }
      catch (IOException ex) {
        System.out.println(ex);
        ex.printStackTrace();
      }
    }
    return result;
  }


3) Информация из буфера копируется в соответствующие поля в сторонней программе.
JNI

Спасибо за конкретное предложение!
PM MAIL WWW Skype GTalk MSN   Вверх
Artemij
Дата 25.7.2008, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(AntonSaburov @ 25.7.2008,  14:15)
Может лучше тогда посылать Windows-сообщения нужным контролам в окошке программы ?

А можно подробнее?

Примерный сценарий Java программы:

1) Пользователь заполняет все данные в простом интерфейсе ( Java программа ).
2) Данные проверяются, и, если нет ошибок, записываются в TXT файл и копируются в буфер.
3) Пользователь переключается ( открывает окно ) в стороннюю программу и нажимает Ctrl - V, например.
4) Информация из буфера ( или из TXT файла ) копируется в соответствующие поля сторонней программы.

Все рады.

Для меня сейчас самый БОЛЬШОЙ вопрос, как получить контроль над интерфейсом сторонней программы из вне (из Java программы)? Подскажите подробней как называется Java framework/package и где можно почитать на тему.

Почитал о JNI. Не очень понял,то ли это что мне надо или нет.  smile 

Ведь всё сходить к переключению между input field с помощью tab/enter/up/down/left/right. Тоесть полная имитация навигации по стороннему приложению пользователем.

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

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

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


 




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


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

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