Как узнать окно-владельца буфера обмена
Как узнать окно-владельца буфера обмена
Если какое-то приложение открыло буфер обмена при помощи функции OpenClipboard, то до момента вызова функции CloseClipboard буфер обмена будет недоступен для других приложений. Обычно такого не происходит, работа с буфером сводится к последовательному открытию, получению или записи данных и закрытию, но от случайных сбоев никто не застрахован. Если ваше приложение также активно работает с буфером обмена, то будет полезным уметь обрабатывать такие ситуации и уведомлять пользователя, что в какой-то сторонней программе что-то пошло не так.
Для получения информации об окне, которое владеет буфером обмена, используются две функции: GetClipboardOwner и GetOpenClipboardWindow. Несмотря на схожие задачи, они отличаются по логике работы.
GetClipboardOwner возвращает хэндл окна, которое открыло буфер обмена и вызывало функцию EmptyClipboard. До момента изменения буфера обмена функция возвращает пустое значение. Но после очистки содержимого буфера обмена, результат функции сохраняется как при открытом буфере обмена, так и после его закрытия.
А вот функция GetOpenClipboardWindow возвращает хэндл именно того окна, который был указан при вызове функции OpenClipboard. Результат функции сохраняется до закрытия буфера обмена. Тут нужно учитывать, что если буфер обмена открыт, но не ассоциирован ни с одним существующим окном, то функция вернет NULL.
Ну а зная хэндл окна и обладая соответствующими полномочиями, можно получить данные о процессе, который открыл это окно, и выполнить с ним необходимые действия.
В приложении примеры программ с исходными текстами, одна из которых выполняет операции с буфером обмена по нажатию соответствующих кнопок, а вторая пытается получить заголовок окна-владельца буфера обмена.
Просмотров: 352 | Комментариев: 0
Метки: Assembler
Комментарии
Отзывы посетителей сайта о статье
Комментариeв нет
Добавить комментарий
Заполните форму для добавления комментария