You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
2.4 KiB
124 lines
2.4 KiB
/* File: D:\WACKER\tdll\clipbrd.c (Created: 24-Jan-1994)
|
|
*
|
|
* Copyright 1994 by Hilgraeve Inc. -- Monroe, MI
|
|
* All rights reserved
|
|
*
|
|
* $Revision: 2 $
|
|
* $Date: 5/09/01 4:42p $
|
|
*/
|
|
|
|
#include <windows.h>
|
|
#pragma hdrstop
|
|
|
|
#include "stdtyp.h"
|
|
#include "assert.h"
|
|
#include "session.h"
|
|
#include "tdll.h"
|
|
#include "cloop.h"
|
|
#include "htchar.h"
|
|
#include "mc.h"
|
|
|
|
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
|
* FUNCTION:
|
|
* CopyBufferToClipBoard
|
|
*
|
|
* DESCRIPTION:
|
|
* Function to copy text to clipboard
|
|
*
|
|
* ARGUMENTS:
|
|
* HWND hwnd - window that will own clipboard.
|
|
* DWORD dwCnt - size of buffer
|
|
* void *pvBuf - pointer to buffer
|
|
*
|
|
* RETURNS:
|
|
* BOOL
|
|
*
|
|
*/
|
|
BOOL CopyBufferToClipBoard(const HWND hwnd, const DWORD dwCnt, const void *pvBuf)
|
|
{
|
|
HGLOBAL hMem;
|
|
void *pvMem;
|
|
TCHAR *pszTemp;
|
|
|
|
if (pvBuf == 0 || dwCnt == 0)
|
|
{
|
|
assert(FALSE);
|
|
return FALSE;
|
|
}
|
|
|
|
if (!OpenClipboard(hwnd))
|
|
return FALSE;
|
|
|
|
hMem = GlobalAlloc(GMEM_DDESHARE | GMEM_MOVEABLE, dwCnt + 1);
|
|
|
|
if (hMem == 0)
|
|
{
|
|
assert(FALSE);
|
|
return FALSE;
|
|
}
|
|
|
|
pvMem = GlobalLock(hMem);
|
|
if (dwCnt)
|
|
MemCopy(pvMem, pvBuf, dwCnt);
|
|
pszTemp = pvMem;
|
|
*(pszTemp + dwCnt) = 0;
|
|
GlobalUnlock(hMem);
|
|
|
|
EmptyClipboard();
|
|
SetClipboardData(CF_TEXT, hMem);
|
|
CloseClipboard();
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
|
* FUNCTION:
|
|
* PasteFromClipboardToHost
|
|
*
|
|
* DESCRIPTION:
|
|
* This function copies text from the clipboard to host.
|
|
*
|
|
* ARGUMENTS:
|
|
* HWND hwnd - window handle
|
|
* HSESSION hSession - the session handle
|
|
*
|
|
* RETURNS:
|
|
* BOOL
|
|
*
|
|
*/
|
|
BOOL PasteFromClipboardToHost(const HWND hwnd, const HSESSION hSession)
|
|
{
|
|
HANDLE hMem;
|
|
LPTSTR lptStr;
|
|
|
|
// Clipboard had to have been opened first...
|
|
//
|
|
if (!OpenClipboard(hwnd))
|
|
return FALSE;
|
|
|
|
// Check to see if the clipboard format is available.
|
|
//
|
|
if (IsClipboardFormatAvailable(CF_TEXT) == FALSE)
|
|
return FALSE;
|
|
|
|
// Do we need to enumerate clipboard formats?
|
|
|
|
if ((hMem = GetClipboardData(CF_TEXT)))
|
|
{
|
|
// hMem is owned by the clipboard, so we must not free it
|
|
// or leave it locked!
|
|
//
|
|
if ((lptStr = GlobalLock(hMem)))
|
|
{
|
|
CLoopSend(sessQueryCLoopHdl(hSession),
|
|
lptStr,
|
|
(size_t)(StrCharGetByteCount(lptStr)),
|
|
0);
|
|
|
|
GlobalUnlock(hMem);
|
|
}
|
|
}
|
|
|
|
CloseClipboard();
|
|
return TRUE;
|
|
}
|