VBoxClipboard.cpp revision 2724514e7078eb3d64e6ee9a2a0e3ec0d7141ca0
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * VBoxClipboard - Shared clipboard
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * Copyright (C) 2006-2010 Sun Microsystems, Inc.
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * available from http://www.virtualbox.org. This file is free software;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * you can redistribute it and/or modify it under the terms of the GNU
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * General Public License (GPL) as published by the Free Software
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * Clara, CA 95054 USA or visit http://www.sun.com if you need
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * additional information or have any questions.
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync// bool fOperational;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync// uint32_t u32LastSentFormat;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync// uint64_t u64LastSentCRC64;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncstatic char gachWindowClassName[] = "VBoxSharedClipboardClass";
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncstatic int vboxClipboardChanged(VBOXCLIPBOARDCONTEXT *pCtx)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync /* Query list of available formats and report to host. */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync while ((format = EnumClipboardFormats (format)) != 0)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync Log(("vboxClipboardChanged: format = 0x%08X\n", format));
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync u32Formats |= VBOX_SHARED_CLIPBOARD_FMT_UNICODETEXT;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int cActual = GetClipboardFormatName(format, szFormatName, sizeof(szFormatName)/sizeof (TCHAR));
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync rc = VbglR3ClipboardReportFormats(pCtx->u32ClientID, u32Formats);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncstatic LRESULT vboxClipboardProcessMsg(VBOXCLIPBOARDCONTEXT *pCtx, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
Log(("vboxClipboardProcessMsg: WM_CHANGECBCHAIN: hwndRemoved %p, hwndNext %p, hwnd %p\n", hwndRemoved, hwndNext, pCtx->hwnd));
case WM_DRAWCLIPBOARD:
case WM_CLOSE:
case WM_RENDERFORMAT:
switch (format)
case CF_UNICODETEXT:
case CF_DIB:
if (cActual)
if (u32Format == 0)
const uint32_t cbPrealloc = 4096; /* @todo r=andy Make it dynamic for supporting larger text buffers! */
if (hMem)
if (pMem)
if (cb == 0)
if (hMem)
if (pMem)
if (hMem)
if (hMem)
if (hMem)
if (hClip)
if (hMem)
if (hMem)
case WM_RENDERALLFORMATS:
case WM_USER:
Log(("vboxClipboardProcessMsg: WM_USER: Failed to open clipboard! Last error = %ld\n", GetLastErrors()));
if (format != 0)
Log(("vboxClipboardProcessMsg: WM_USER: Failed to open clipboard! Last error = %ld\n", GetLastErrors()));
int vboxrc;
if (format != 0)
return rc;
return rc;
return VERR_NOT_SUPPORTED;
*pfStartThread = true;
return rc;
Log(("VBoxClipboardThread: VbglR3ClipboardGetHostMsg u32Msg = %ld, u32Formats = %ld\n", u32Msg, u32Formats));
switch (u32Msg)