безопасная работа с буфером обмена
От: michae1  
Дата: 31.01.11 16:38
Оценка:
Всем привет,

Появилась интересная задача — обеспечить безопасную работу с буфером обмена. Вкратце необходимо следующее: перед началом работы с буфером сохранить его содержимое, после работы вернуть данные обратно.

Стандартные форматы — не интересны, затык на custom-ных форматах, т.е. форматах зарегистрированных сторонними программами. Насколько я понял, данные могут представлять из себя com-объект реализующий интерфейс IDataObject или быть некоторой однородной структурой.

Для второго случая мне надо знать начало данных и размер, для первого суметь получить указатель на IDataObject + нужно понимать данные первого или второго типа лежат в буфере.

Проблемы:
1. Можно ли узнать размер данных помещенных в буфер обмена?

2. Как узнать, что в буфере лежит com-объект реализующий IDataObject?

2. Как из HANDLE возвращенного GetClipboardData получить указатель на IDataObject?

...
HANDLE hDataObject = GetClipboardData(format);
if( hDataObject != NULL )
{
LPVOID hData = GlobalLock(hDataObject);
if( hData != NULL )
{
... // ну и как понять, что скрывается под hData?  :???:


Возможно я копаю не туда или что-то путаю, буду рад дельному совету и полезным ссылкам
Re: безопасная работа с буфером обмена
От: Pavel Dvorkin Россия  
Дата: 31.01.11 17:06
Оценка:
Здравствуйте, michae1, Вы писали:

M>Всем привет,


M>Появилась интересная задача — обеспечить безопасную работу с буфером обмена. Вкратце необходимо следующее: перед началом работы с буфером сохранить его содержимое,


ИМХО безнадежно. Если некая программа зарегистрировала свой формат, то только она знает, как с ним работать.


M>Стандартные форматы — не интересны, затык на custom-ных форматах, т.е. форматах зарегистрированных сторонними программами. Насколько я понял, данные могут представлять из себя com-объект реализующий интерфейс IDataObject или быть некоторой однородной структурой.


Они чем угодно могут быть.
With best regards
Pavel Dvorkin
Re: безопасная работа с буфером обмена
От: Centaur Россия  
Дата: 31.01.11 17:07
Оценка: +1
Здравствуйте, michae1, Вы писали:

M>Появилась интересная задача — обеспечить безопасную работу с буфером обмена. Вкратце необходимо следующее: перед началом работы с буфером сохранить его содержимое, после работы вернуть данные обратно.


Начать надо с задачи. Если по задаче нельзя терять предыдущее содержимое буфера, то, скорее всего, буфер вообще нельзя трогать, потому что он может понадобиться пользователю посреди операции.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.