1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| #include <windows.h>
#include <stdio.h>
//#include <Objbase.h>
#include "Presse_Papier.h"
void BailOut(char *msg)
{
fprintf(stderr, "Exiting: %s\n", msg);
exit(1);
}
const char* Lire_du_PressePapier()
{
HANDLE h;
if (!OpenClipboard(NULL)) BailOut("Presse-Papier impossible à ouvrir");
h = GetClipboardData(CF_TEXT);
CloseClipboard();
return (char *) h;
}
char* Lire2_du_PressePapier()
{
//HGLOBAL h;
HANDLE h;
char const *p;
char* ret;
if (!OpenClipboard(NULL)) BailOut("Presse-Papier impossible à ouvrir");
h = GetClipboardData(CF_TEXT);
if(h == NULL) { CloseClipboard(); return NULL; }
p = GlobalLock(h);
//ret = CoTaskMemAlloc(strlen(p)+1);
ret = GlobalAlloc(GPTR, strlen(p)+1);
if(ret == NULL) BailOut("Plus de mémoire pour Buffer de lecture du Press-papier!");
strcpy(ret, p);
GlobalUnlock(h);
CloseClipboard();
return ret;
}
void Liberer_Chaine_PressePapier(char *p)
{
//CoTaskMemFree(p);
GlobalFree(p);
}
void Ecrire_dans_PressePapier(const char* w)
{
const size_t len = strlen(w) + 1;
HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE, len);
memcpy(GlobalLock(hMem), w, len);
GlobalUnlock(hMem);
OpenClipboard(0);
EmptyClipboard();
SetClipboardData(CF_TEXT, hMem);
CloseClipboard();
} |
Partager