2009-05-06 8 views
3

Ce code est censé envoyer une chaîne au presse-papiers. Cependant, je l'ai eu à travailler une fois. Maintenant, il ne vient pas correctement quand je CTRL + V. Mais lorsque j'utilise cet extrait pour identifier le texte du presse-papiers, il montre ce qu'il devrait être.API Windows C/C++ envoyant du texte au presse-papier

#include <windows.h> 
#include <iostream> 
BOOL SetClipboardText(LPCTSTR pszText) 
{ 
    BOOL ok = FALSE; 
    if(OpenClipboard(NULL)) { 
     // the text should be placed in "global" memory 
     HGLOBAL hMem = GlobalAlloc(GMEM_SHARE | GMEM_MOVEABLE, 
     (lstrlen(pszText)+1)*sizeof(pszText[0])); 
     LPTSTR ptxt = (LPTSTR)GlobalLock(hMem); 
     lstrcpy(ptxt, pszText); 
     GlobalUnlock(hMem); 
     // set data in clipboard; we are no longer responsible for hMem 
     ok = (BOOL)SetClipboardData(CF_TEXT, hMem); 

     CloseClipboard(); // relinquish it for other windows 
    } 
    return ok; 
} 

int main() 
{ 
    LPCTSTR test = "DOG"; 
    SetClipboardText(test); 
    return 0; 
} 


    //get clipboard text 
    #include <windows.h> 
#include <iostream> 
#include <stdio.h> 

using namespace std; 

int main() 
{ 
    HANDLE clip; 
    if (OpenClipboard(NULL)) 
    clip = GetClipboardData(CF_TEXT); 
    printf("%s",clip); 
//cout << (char*)clip; // HANDLE==void*, so cast it 
cin.get();} 

Répondre

3

Vous devez appeler GlobalLock() sur les données du presse-papiers renvoyés par GetClipboardData et utilisez le pointeur retourné comme les données de chaîne.

Pour les objets alloués avec GMEM_MOVABLE, il n'est pas garanti que le pointeur vers la mémoire ait la même valeur que le handle.

Questions connexes