Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Вставьте текст из редактирования в любое окно, где находится указатель мыши.

Автор вопроса: YuriosОтветов: 1

Как я могу вставить текст из элемента управления Edit в любое окно, где находится указатель мыши, без использования буфера обмена и/или дескриптора окна.

Я использую Делфи 7.

  • Решение Дэвида отличное (+1), если вы ДЕЙСТВИТЕЛЬНО хотите отправить туда, где находится указатель мыши. Я подозреваю, что полезнее отправлять в окно с фокусом ввода, которое может быть таким же, или, если вы один из тех людей, которым нравится отталкивать курсор мыши в сторону, когда они печатают или читают, это может быть где-то совсем по другому. Chris Thornton 13.10.2011
  • +1 за то, что изо всех сил старались избежать (ab) использования буфера обмена. Chris Thornton 13.10.2011
  • Спасибо, но у меня все еще есть проблемы с кодом wource. Я знаю, что это просто, но мой уровень программирования совсем начальный. Yurios 13.10.2011

textdelphiinsert

Ответы

Ответ 1 · рейтинг 6 · David Heffernan

  1. Вызовите GetCursorPos, чтобы узнать, где находится курсор .
  2. Вызовите WindowFromPoint, чтобы найти окно под курсором .
  3. Отправьте сообщение EM_REPLACESEL, чтобы заменить выделение это окно. Если ничего не выделено, текст будет вставлен в каретку.

Примечание. Будьте готовы к тому, что это чаще приведет к неудаче, чем к успеху. Многие приложения не используют элементы оконного редактирования. Чтобы найти более надежное решение, обратитесь к автоматизации пользовательского интерфейса.


Вы просили какой-то код. Вот как это будет выглядеть:

var
  Pos: TPoint;
  Target: HWND;
...
if not GetCursorPos(Pos) then
  RaiseLastOSError;
Target := WindowFromPoint(Pos);
if Target<>0 then
  SendMessage(Target, EM_REPLACESEL, ord(True), LPARAM(PChar(Edit1.Text)));

Если окно под курсором не является окном редактирования, это, вероятно, будет безобидным.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы