• Lunes 16 de Diciembre de 2024, 04:36

Autor Tema:  portapapeles de windows  (Leído 862 veces)

takyo

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
portapapeles de windows
« en: Sábado 5 de Septiembre de 2009, 23:01 »
0
muy buenas ando bastante perdido con el portapapeles de windows
tengo la funcion getPortapapeles y setPortapapeles.

el get funciona correctisimo pero en cambio el set no me funciona del todo bien, me explico:
aqui intento copiar y pegar lo que tenemos en el portapapeles
Código: C++
  1. main()    {
  2.     char *buffer = new char[1024];
  3.  
  4.     buffer = getPortapapeles();
  5.     setPortapapeles(buffer);// no me funciona el set
  6. }
  7.  

en cambio si solo queremos pegar al portapapeles todo va correcto
Código: C++
  1. main()    {
  2.     char *buffer = new char[1024];
  3.  
  4. //    buffer = getPortapapeles();
  5.     strcpy(buffer,"esto si que funciona");
  6.     setPortapapeles(buffer);// inserta correctamente
  7. }
  8.  

aqui las dos funciones get & set que por separado funcionan a la perfeccion pero juntas dejan mucho que desear
Código: C++
  1. char * getPortapapeles()    {
  2.        char buffer[1024];
  3.     if ( OpenClipboard(NULL) )
  4.     {
  5.         HANDLE hData = GetClipboardData( CF_TEXT );
  6.         if (!hData) return 0;
  7.         char * buffer = (char*)GlobalLock( hData );
  8.  
  9.         GlobalUnlock( hData );
  10.         CloseClipboard();
  11.         return buffer;
  12.     }
  13. return 0;
  14. }
  15.  

Código: C++
  1. setPortapapeles(char *str)    {
  2.     if (OpenClipboard(NULL))
  3.     {
  4.         HGLOBAL hClipboardData;
  5.         char * pchData;
  6.  
  7.         EmptyClipboard();
  8.         hClipboardData = GlobalAlloc(GMEM_DDESHARE, strlen(str)+1);
  9.         pchData = (char*)GlobalLock(hClipboardData);
  10.         strcpy(pchData, str);
  11.         GlobalUnlock(hClipboardData);
  12.         SetClipboardData( CF_TEXT,hClipboardData); //CF_TEXT  CF_HDROP
  13.         CloseClipboard();
  14.     }
  15. }
  16.  

alguien es tan amable de decirme porque me fallan?
gracias!!!