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
'programing' 카테고리의 다른 글
인쇄란(f"...) (0) | 2023.08.10 |
---|---|
ASP.Net Core 1.0 RC2 : web.config에서 RUCHER_PATH와 RUCHER_ARGS가 언급된 것은 무엇입니까? (0) | 2023.08.10 |
php의 시간대 변환 (0) | 2023.08.10 |
입력/쓰기를 중지한 후 입력 텍스트에서 이벤트를 트리거하는 방법은 무엇입니까? (0) | 2023.08.10 |
최대 절전 모드, ID, 오라클, 시퀀스 (0) | 2023.08.10 |