Dilan Shaminda Ответов: 2

Для чего именно используется сообщение WM_paste?


Я нашел это утверждение о функции WM_PASTE в MSDN и я немного смущен этим

Цитата:
Приложение отправляет сообщение WM_PASTE в элемент управления редактированием или поле со списком, чтобы скопировать текущее содержимое буфера обмена в элемент управления редактированием в текущей позиции курсора. Данные вставляются только в том случае, если буфер обмена содержит данные в формате CF_TEXT.


Что означает "элемент управления редактированием" или "поле со списком"? Могу ли я использовать сообщение WM_Paste для обнаружения события вставки, происходящего в среде Windows?

Что я уже пробовал:

protected override void WndProc(ref Message m)
 {
             
    base.WndProc(ref m);
    if(m.Msg == WM_PASTE)
      {
         string message= "Paste";
      }

}


Но это сообщение не отображается, когда я вставляю (Ctrl + v, Edit > paste, Shell context menu paste) текст в приложение (пример: Блокнот). Я хочу знать, какова цель этого сообщения WM_Paste и как его обнаружить, когда я что-то вставляю.

Richard MacCutchan

Спасибо Йохену за то, что он заметил, что мы уже не раз объясняли вам это.

2 Ответов

Рейтинг:
8

Jochen Arndt

То WM_PASTE сообщение-это внутреннее сообщение приложения. Он может быть отправлен, например, в активное окно управления при выборе опции вставить из меню Правка приложения, контекстного меню окна управления или при использовании ускорителей Ctrl-V / Shift-Ins.

Помимо нескольких исполнений, сообщения обрабатываются на уровне приложения. Они отправляются в определенное окно, которое может перенаправить их в родительское окно или дочерние окна. Но такие сообщения прикладного уровня не пересылаются в окна других приложений.

Ваш пример кода улавливает сообщение в твой приложение. То есть не вызывается при вставке ни в какую другой приложение.

Все это было сказано в вашем предыдущем вопросе Как захватить событие вставки в windows?[^]:
Не существует общего и надежного метода для перехвата событий вставки вне вашего приложения.


Рейтинг:
15

Richard MacCutchan

Прочтите описание еще раз: “приложение отправляет ...”. это означает, что ваше приложение может отправить это сообщение элементу управления, чтобы сообщить ему о наличии данных в буфере обмена. Это сообщение не является общим уведомлением, которое вы можете захватить.