MFC/MFC 코드기록

클립보드에서 문자열 가져오기. (문자열 복사 paste/ctrl + v)

lwj789 2023. 2. 20. 09:50
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
int CopyTextFromClipboard(CString *ap_string)
{
    unsigned int priority_list = CF_TEXT;
    HANDLE h_clipboard_data;
    char *p_clipboard_data;
    int format_info = ::GetPriorityClipboardFormat(&priority_list, 1), len = 0;
 
    if (format_info == CF_TEXT) {  // 클립보드에 저장된 정보가 텍스트 인경우에만 처리한다.
        // 클립보드에 있는 비트맵 정보를 얻기 위해서 클립보드를 연다.
        if (::OpenClipboard(m_hWnd)) {  // 클립보드를 연다.
            // 클립보드에 저장된 정보의 핸들을 얻는다.
            h_clipboard_data = ::GetClipboardData(format_info);
            if (h_clipboard_data != NULL) {  // 정보를 정상적으로 얻었다면
                // 클립보드에 저장된 문자열를 복사하기 위해 클립보드 핸들을 사용하여 
                // 문자열이 저장된 메모리의 주소를 얻는다.
                p_clipboard_data = (char *)::GlobalLock(h_clipboard_data);
                // 클립보드에 저장된 문자열의 길이를 얻는다.
                len = strlen(p_clipboard_data);
                *ap_string = p_clipboard_data;
                // 클립보드에 저장된 데이터 핸들을 다른 프로세스가 사용할 수 있도록 반환한다.
                ::GlobalUnlock(h_clipboard_data);
            }
            ::CloseClipboard();  // 클립보드를 닫는다.
        }
    }
    return len;  // 복사한 데이터의 크기를 반환한다.
}
cs