2009-05-06 1 views
3

이 코드는 문자열을 클립 보드로 보내야합니다. 그러나 나는 한 번 일하게했다. 이제 CTRL + V를 누르면 올바르게 나오지 않습니다.C/C++ Windows API 클립 보드에 텍스트 전송

그러나이 스 니펫을 사용하여 클립 보드 텍스트를 식별 할 때 필요한 내용을 보여줍니다.

#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();} 

답변

3

당신은 GetClipboardData에 의해 반환되는 클립 보드 데이터에 GlobalLock()를 호출하고, 문자열 데이터로 반환 된 포인터를 사용해야합니다.

GMEM_MOVABLE로 할당 된 개체의 경우 메모리에 대한 포인터가 핸들과 동일한 값인 것은 아닙니다.

관련 문제