Russian Qt Forum
Ноябрь 23, 2024, 17:17 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Имитация ctrl+v в системе  (Прочитано 3767 раз)
alexorleon
Гость
« : Июнь 16, 2016, 09:10 »

День добрый.

Подскажите, как программно вызвать комбинацию клавиш "ctrl+v"?
В трее крутится программа и читает com порт. При возникновении события, она копирует сообщение в буфер:

Код:
QClipboard *clipboard = QApplication::clipboard();
clipboard->setText("BLA_BLA_BLA");

Теперь надо вставить этот текст где стоит курсор. Это может быть и открытый блокнот и адресная строка браузера и т.д.
Или может есть другие решения? Все, что находил, работает непосредственно внутри самой программы.
« Последнее редактирование: Июнь 16, 2016, 12:34 от alexorleon » Записан
Bepec
Гость
« Ответ #1 : Июнь 16, 2016, 11:48 »

Платформозависимо вызвать Ctrl + V. При этом снимая фокус с окна программы своей если он есть Улыбающийся
Записан
alexorleon
Гость
« Ответ #2 : Июнь 16, 2016, 12:01 »

Платформозависимо вызвать Ctrl + V. При этом снимая фокус с окна программы своей если он есть Улыбающийся
Вот уже пол дня пытаюсь нагуглить. Но попадается противоположное решение (регистрация клавиш, т.е. реагирование программы на пользовательский ввод)  Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Июнь 16, 2016, 12:13 »

Теперь надо вставить этот текст где стоит курсор. Это может быть и открытый блокнот и адресная строка браузера и т.д.
Или может есть другие решения?
Нативными средствами - почему нет? WinAPI - см GetFocus и SendMessage. На OSX хужее - придется рыться в AppleTalk. Это достижимо, но толку - послать "кому-то", кто неизвестно что сделает. Смысл?
Записан
alexorleon
Гость
« Ответ #4 : Июнь 16, 2016, 12:33 »

У меня возникли сложности с АПИ под линукс. Толком ничего не нашел. Но для себя нашел вот такое решение.

Ставим Xdotool.
http://xmodulo.com/simulate-key-press-mouse-movement-linux.html

Код:
QClipboard *clipboard = QApplication::clipboard();
clipboard->setText("BLA_BLA_BLA");

QByteArray key("xdotool key Ctrl+V");
QProcess command;
command.start(key);
command.waitForFinished(3000);

Есть исходники, можно будет покопаться, поизучать.

Под убунтой точно работает. Всем спасибо за помощь!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.083 секунд. Запросов: 23.