programing

C에서 문자열을 클립보드에 복사하는 방법은 무엇입니까?

lastmoon 2023. 8. 10. 19:06
반응형

C에서 문자열을 클립보드에 복사하는 방법은 무엇입니까?

SetClipboardData기능이 필요합니다.HANDLE참조; 함수에 사용할 문자열을 변환하는 데 문제가 있습니다.

내 코드는 다음과 같습니다.

char* output = "Test";
HLOCAL hMem =  LocalAlloc( LHND,1024);
char* cptr = (char*) LocalLock(hMem);
memcpy( cptr, output, 500 );
SetClipboardData(CF_TEXT, hMem);
LocalUnlock( hMem );
LocalFree( hMem );
CloseClipboard();

제가 여기서 무엇을 잘못하고 있으며, 그것을 하는 적절한 방법은 무엇입니까?

감사해요.

SetClipboardData 기능에 대한 MSDN 설명서를 읽습니다.몇 단계를 놓쳐서 메모리를 너무 일찍 해제한 것 같습니다.먼저 OpenClipboard를 호출해야 SetClipboardData를 사용할 수 있습니다.두 번째로 시스템은 클립보드에 전달된 메모리의 소유권을 가지고 잠금을 해제해야 합니다.또한 메모리는 이동식이어야 합니다. 따라서 GlobalAlloc에서 사용되는 GEM_MOVEABLE 플래그가 필요합니다(LocalAlloc 대신).

const char* output = "Test";
const size_t len = strlen(output) + 1;
HGLOBAL hMem =  GlobalAlloc(GMEM_MOVEABLE, len);
memcpy(GlobalLock(hMem), output, len);
GlobalUnlock(hMem);
OpenClipboard(0);
EmptyClipboard();
SetClipboardData(CF_TEXT, hMem);
CloseClipboard();

Windows에서 이를 수행하기 위해 오픈 소스 명령줄 도구를 작성했습니다.

http://coffeeghost.net/2008/07/25/ccwdexe-copy-current-working-directory-command/

ccwd.exe는 현재 작업 디렉터리를 클립보드에 복사합니다.소스 레포에 몇 단계 깊이가 있고 경로를 복사해야 할 때 유용합니다.

완전한 출처는 다음과 같습니다.

#include "stdafx.h"
#include "windows.h"
#include "string.h"
#include <direct.h>

int main()
{
    LPWSTR cwdBuffer;

    // Get the current working directory:
    if( (cwdBuffer = _wgetcwd( NULL, 0 )) == NULL )
        return 1;

    DWORD len = wcslen(cwdBuffer);
    HGLOBAL hdst;
    LPWSTR dst;

    // Allocate string for cwd
    hdst = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, (len + 1) * sizeof(WCHAR));
    dst = (LPWSTR)GlobalLock(hdst);
    memcpy(dst, cwdBuffer, len * sizeof(WCHAR));
    dst[len] = 0;
    GlobalUnlock(hdst);

    // Set clipboard data
    if (!OpenClipboard(NULL)) return GetLastError();
    EmptyClipboard();
    if (!SetClipboardData(CF_UNICODETEXT, hdst)) return GetLastError();
    CloseClipboard();

    free(cwdBuffer);
    return 0;
}

클립보드 사용에 대한 Microsoft 설명서를 살펴 보십시오.이를 위해서는 WinAPI를 사용해야 하지만 Windows에서 사용하기 때문에 문제가 되지 않습니다.매우 높은 수준의 언어를 사용하지 않는 한 Windows API를 프로그래밍하는 것은 결코 간단하지 않습니다.

언급URL : https://stackoverflow.com/questions/1264137/how-to-copy-string-to-clipboard-in-c

반응형