Всем привет,
Появилась интересная задача — обеспечить безопасную работу с буфером обмена. Вкратце необходимо следующее: перед началом работы с буфером сохранить его содержимое, после работы вернуть данные обратно.
Стандартные форматы — не интересны, затык на 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? :???:
Возможно я копаю не туда или что-то путаю, буду рад дельному совету и полезным ссылкам