Чтение строки из выбранного текста из любого программного обеспечения в Windows / MacOS - PullRequest
1 голос
/ 16 апреля 2020

Первым делом первым. Я вроде как новичок во всем этом стеке, поэтому прошу прощения за мое форматирование.

Вы все слышали о punto-switcher, верно? Если нет, то это программное обеспечение, которое работает в фоновом режиме и активируется только тогда, когда обнаруживает, что вы печатаете на предпочитаемом вами языке, но с другой раскладкой клавиатуры, и мгновенно меняет его.

У меня много вопросов проще ... Я хочу, чтобы моя программа считывала текст, который я выделю курсором в любом программном обеспечении (если оно доступно для выбора) (я предоставлю фотографию для лучшего понимания), используя привязку клавиш на клавиатуре ... Для пример '`' или клавиша Caps Lock.

Пример выделенного текста в MS Word:

Example of a selected text in MS Word

Также вот фрагмент кода для вашего лучшего понимания моей идеи. (Написано в java)

public string function_that_reads_a_selected_string_from_cursor(){
variable_type bind = caps_lock
String read_string
//algorithm code
return read_string;
}

public static void main(String[] args){
String input = null;
input = function_that_reads_a_selected_string_from_cursor();
}

Есть идеи?

PS Программа должна читать ее ТОЛЬКО при нажатии клавиши привязки.

1 Ответ

0 голосов
/ 16 апреля 2020

Я не думаю, что Java сможет сделать это, не прибегая к собственным функциям ОС, учитывая, что ваша программа не будет фокусироваться на вводе во время захвата выбранного текста. Поэтому вам нужно прибегнуть к JNI (Java Native Interface) или JNA (Java Native Access), и вызванная общая библиотека будет зависеть от ОС.

При использовании JNI после написания библиотеки на C / C ++ для захвата выделенного текста ваш код Java будет выглядеть следующим образом (обратите внимание на ключевое слово native):

public native String function_that_reads_a_selected_string_from_cursor(int key_code);

public static void main(String[] args){
  int bind = VK_CAPITAL; // OS-dependent.
  String input = null;
  input = function_that_reads_a_selected_string_from_cursor(bind);
}

Здесь - руководство по использованию JNI.

Редактирование: Что касается захвата выделенного текста, я бы попробовал:

  1. Установите хук на клавишу bind, чтобы ваша функция вызывалась при нажатии клавиши
  2. Используйте OS API, чтобы скопировать выбранный текст в буфер обмена, а затем оттуда в вашу программу.
...