Некоторое время назад я написал простое приложение, которое окружает выделенный текст в любом поле ввода в любом приложении некоторыми символами Unicode, когда пользователь нажимает некоторую горячую клавишу.По сути, логика приложения следующая:
- Зарегистрировать глобальную горячую клавишу.
- Горячая клавиша сработала, теперь установите монитор буфера обмена и вызовите копию буфера обмена, чтобы увидеть, был ли выбран какой-либо текст.
- Если буфер обмена изменился и теперь содержит текст, окружите указанный текст символами, а затем вызовите вставку буфера обмена, поэтому поле ввода будет обновлено с измененным текстом.
Проблема в том, что я не могу получитьКопировать / вставить функциональность из других приложений надежным способом.То, что я пытался датировать:
- Если я отправляю WM_COPY / WM_PASTE, это чаще игнорируется, чем нет, в зависимости от приложения.
- Если я использую SendInput, keybd_event или любой другойМешать с клавиатуры, чтобы нажимать / отжимать обычные горячие клавиши буфера обмена, он часто будет манипулировать нажатыми пользователем клавишами: копирование / вставка использует управление или сдвиг, которые также довольно популярны для всех общих горячих клавиш во всех приложениях, включая мое приложение.
- Если я использую Journal Hook для непосредственного ввода сообщений клавиатуры в системную очередь ввода, иногда это будет работать нормально, а иногда возникают странные сбои.Кроме того, другие приложения могут использовать JournalHook для себя, и это плохо испортит мое приложение.Не говоря уже о том, что политики безопасности по умолчанию затрудняют использование журнала.
- Я пытался получить / установить текст в полях ввода с помощью автоматизации пользовательского интерфейса Windows вместо магии буфера обмена, но это редко работает.
Итак, если вы знаете другие способы заставить другие приложения надежно использовать функции копирования / вставки или даже можете разработать совершенно другой подход, я был бы очень признателен, если бы вы сказали мне:)