В прошлой статье мы настроили наш проект и отключили лишние библиотеки. В этой статье мы прочитаем буфер обмена. Создадим указатель VOID с любым названием, для простоты я назову его BUFER. VOID BUFER() { } C VOID BUFER() { } Он не будет принимать никаких аргументов. Можно начать писать код. Объявим HWND и переменную типа char для хранения буфера. HWND hwnd = GetDesktopWindow(); char* Bufer; C HWND hwnd = GetDesktopWindow(); char* Bufer; Откроем буфер обмена. if (OpenClipboard(hwnd)) { } C if (OpenClipboard(hwnd)) { } Далее пишем функцию извлечения теста из буфера. Должен получится такой код: if (OpenClipboard(hwnd))//открываем буфер обмена { if(IsClipboardFormatAvailable(CF_TEXT)) { HANDLE hData = GetClipboardData(CF_TEXT);//извлекаем текст из буфера fromClipboard = (char*)GlobalLock(hData);//блокируем память и получаем содержимое буфера GlobalUnlock(hData);//разблокируем память CloseClipboard();//закрываем буфер обмена WriteLine(Bufer); //эту функцию писали в прошлой статье } C if (OpenClipboard(hwnd))//открываем буфер обмена { if(IsClipboardFormatAvailable(CF_TEXT)) { HANDLE hData = GetClipboardData(CF_TEXT);//извлекаем текст из буфера fromClipboard = (char*)GlobalLock(hData);//блокируем память и получаем содержимое буфера GlobalUnlock(hData);//разблокируем память CloseClipboard();//закрываем буфер обмена WriteLine(Bufer); //эту функцию писали в прошлой статье } Готово! На основе этой информации можно сделать простой клиппер, возможно я напишу об этом статью. VOID BUFER() { HWND hwnd = GetDesktopWindow(); char* Bufer; if (OpenClipboard(hwnd)) { if (IsClipboardFormatAvailable(CF_TEXT)) { HANDLE hData = GetClipboardData(CF_TEXT); Bufer = (char*)GlobalLock(hData); GlobalUnlock(hData); CloseClipboard(); WriteLine(Bufer); } } } C VOID BUFER() { HWND hwnd = GetDesktopWindow(); char* Bufer; if (OpenClipboard(hwnd)) { if (IsClipboardFormatAvailable(CF_TEXT)) { HANDLE hData = GetClipboardData(CF_TEXT); Bufer = (char*)GlobalLock(hData); GlobalUnlock(hData); CloseClipboard(); WriteLine(Bufer); } } }
Можно попробовать потыкать функции из хидера ole2.h , ради развлечения. Она также предоставляет функции для работы с буфером обмена, однако придется для начала понять виндовые COM-объекты (Т.к OleInitialize инициализирует COM либу). Ну и я заметил, что кое-какие функции использовали некоторые фичи из крестов, которых нет в сишке, так что придется колдовать не только над рантаймом сишечки, но и над STL. https://docs.microsoft.com/en-us/windows/win32/com/component-object-model--com--portal https://docs.microsoft.com/ru-ru/windows/win32/api/ole2/ https://docs.microsoft.com/ru-ru/windows/win32/api/ole2/nf-ole2-olegetclipboard