Lost in the matrix

C/C++/C#/Java, Multithreading

#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

int copy_to_clipboard(char const *str)
{
HGLOBAL clipbuffer;
char *buffer;

// On ouvre le presse-papier
if (!OpenClipboard(NULL))
return (0);
// on vide le presse-papier
EmptyClipboard();
// on alloue la mémoire nécéssaire
clipbuffer = GlobalAlloc(GMEM_DDESHARE, strlen(str) + 1);
// on lock le buffer pour avoir un accès exclusif sur le presse-papier
if ((buffer = (char *)GlobalLock(clipbuffer)) == NULL)
{
GlobalUnlock(clipbuffer);
CloseClipboard();
return (0);
}
// On copie notre texte dans le presse-papier
strcpy(buffer, str);
// On déverouille le presse-papier
GlobalUnlock(clipbuffer);
// On met à jour le presse-papier
SetClipboardData(CF_TEXT, clipbuffer);
// On ferme le presse-papier
CloseClipboard();
return (1);
}

char *get_clipboard()
{
char *buffer;
HANDLE hData;

// On ouvre le presse-papier
if (!OpenClipboard(NULL))
return (NULL);
// On recupère le "handle" du presse-papier en mode texte
if ((hData = GetClipboardData(CF_TEXT)) == NULL)
return (NULL);
// On récupère via le "handle" le presse-papier
if ((buffer = (char *)GlobalLock(hData)) == NULL)
return (NULL);
// On déverouille le presse-papier
GlobalUnlock(hData);
// On ferme le presse-papier
CloseClipboard();
return (buffer);
}

int main(int argc, char **argv)
{
copy_to_clipboard("ma chaine");
printf("%s\n", get_clipboard());
getchar();
return (EXIT_SUCCESS);
}

0 commentaires:

Enregistrer un commentaire