본문으로 바로가기

Clipboard 에 문자열 넣고,붙여넣기

category 개발언어/c++ 2016. 7. 16. 22:35

// 클립보드에 문자열을 넣는다.

BOOL ClipboardCopy( char * CopyData )
{
HGLOBAL hMem;
TCHAR * pszbuffer = NULL;

// 클립보드를 오픈한다.
if ( ::OpenClipboard( NULL ) == FALSE )
{
TRACE(_T("Open the Clipboard is False!!"));
return FALSE;
}

int nLen = _tcslen( CopyData ) + 2 ;
// 메모리 할당.
hMem = ::GlobalAlloc( GMEM_MOVEABLE | GMEM_ZEROINIT, nLen );
if ( hMem == NULL )
{
TRACE(_T("Mem Alloc is Faild!!"));
::CloseClipboard();
return FALSE;
}

// 메모리 복사
pszbuffer = (TCHAR *)::GlobalLock( hMem );
// _stprintf_s( pszbuffer, nLen, _T("%s"), CopyData );

_stprintf( pszbuffer, _T("%s"), CopyData);

::EmptyClipboard();
::SetClipboardData( CF_TEXT, hMem );
::GlobalUnlock( hMem );
::CloseClipboard();
return TRUE;
}

// 클립보드에 문자를 다른데 붙여넣기 한다.

BOOL ClipboardPaste( char * PasteData )
{
if ( _tcslen( PasteData ) > 0 )
{
if ( ClipboardCopy( PasteData ))
{

// Ctrl + V 키를 눌러준다.
keybd_event( VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0);
keybd_event( 0x56, MapVirtualKey(0x56, 0), 0, 0);
Sleep(100);
keybd_event( 0x56, MapVirtualKey( 0x56, 0), KEYEVENTF_KEYUP, 0);
keybd_event( VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0);
Sleep(100);
keybd_event( VK_TAB, MapVirtualKey( VK_TAB, 0), 0, 0 );
Sleep(50);
keybd_event( VK_TAB, MapVirtualKey( VK_TAB, 0), KEYEVENTF_KEYUP, 0 );
}
else return FALSE;
}
else return FALSE;

return TRUE;
}

// 클립보드에 문자를 가져온다.

BOOL CkmS::ClipboardData(TCHAR *pData)
{
if ( ::IsClipboardFormatAvailable(CF_TEXT)) // 믄자형이 클립보드에 있으면
{
if ( ::OpenClipboard(NULL))
{
HANDLE hData = ::GetClipboardData(CF_TEXT); // 데이터 가져오기
LPCTSTR _data = (LPCTSTR)::GlobalLock( hData );
if ( !hData )
{
::GlobalUnlock( hData );
::CloseClipboard();
return FALSE;
}
_tcscpy( pData, _data);
::EmptyClipboard();
::CloseClipboard();
return TRUE;
}
}
return FALSE;
}