Changeset 78474 in vbox for trunk/include/VBox
- Timestamp:
- May 13, 2019 7:44:15 AM (6 years ago)
- svn:sync-xref-src-repo-rev:
- 130509
- Location:
- trunk/include/VBox/GuestHost
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/GuestHost/SharedClipboard-win.h
r78440 r78474 33 33 #include <iprt/win/windows.h> 34 34 35 #include <VBox/GuestHost/SharedClipboard.h> 36 35 37 # ifdef VBOX_WITH_SHARED_CLIPBOARD_URI_LIST 36 38 # include <iprt/cpp/ministring.h> /* For RTCString. */ 39 # include <oleidl.h> 37 40 # endif 38 41 … … 41 44 #endif 42 45 43 #define VBOX_CLIPBOARD_WNDCLASS_NAME "VBoxSharedClipboardClass" 44 45 #define VBOX_CLIPBOARD_WIN_REGFMT_HTML "VBox HTML Format" 46 #define VBOX_CLIPBOARD_WNDCLASS_NAME "VBoxSharedClipboardClass" 47 48 /** See: https://docs.microsoft.com/en-us/windows/desktop/dataxchg/html-clipboard-format 49 * Do *not* change the name, as this will break compatbility with other (legacy) applications! */ 50 #define VBOX_CLIPBOARD_WIN_REGFMT_HTML "HTML Format" 51 # ifdef VBOX_WITH_SHARED_CLIPBOARD_URI_LIST 52 # define VBOX_CLIPBOARD_WIN_REGFMT_URI_LIST "VBoxURIList" 53 #endif 46 54 47 55 /** Default timeout (in ms) for passing down messages down the clipboard chain. */ … … 80 88 bool fCBChainPingInProcess; 81 89 } VBOXCLIPBOARDWINAPIOLD, *PVBOXCLIPBOARDWINAPIOLD; 90 91 #ifdef VBOX_WITH_SHARED_CLIPBOARD_URI_LIST 92 class VBoxClipboardWinDataObject; 93 94 /** 95 * Structure for keeping URI clipboard information around. 96 */ 97 typedef struct _VBOXCLIPBOARDWINURI 98 { 99 UINT cfFileGroupDescriptor; 100 UINT cfFileContents; 101 VBoxClipboardWinDataObject *pDataObj; 102 } VBOXCLIPBOARDWINURI, *PVBOXCLIPBOARDWINURI; 103 #endif 82 104 83 105 typedef struct VBOXCLIPBOARDWINCTX … … 91 113 /** Structure for maintaining the old clipboard API. */ 92 114 VBOXCLIPBOARDWINAPIOLD oldAPI; 115 #ifdef VBOX_WITH_SHARED_CLIPBOARD_URI_LIST 116 /** Structure for keeping URI clipboard information around. */ 117 VBOXCLIPBOARDWINURI URI; 118 #endif 93 119 } VBOXCLIPBOARDWINCTX, *PVBOXCLIPBOARDWINCTX; 94 120 … … 101 127 int VBoxClipboardWinRemoveFromCBChain(PVBOXCLIPBOARDWINCTX pCtx); 102 128 VOID CALLBACK VBoxClipboardWinChainPingProc(HWND hWnd, UINT uMsg, ULONG_PTR dwData, LRESULT lResult); 103 int VBoxClipboardWinGetFormats(PVBOXCLIPBOARDWINCTX pCtx, uint32_t *puFormats); 129 VBOXCLIPBOARDFORMAT VBoxClipboardWinClipboardFormatToVBox(UINT uFormat); 130 int VBoxClipboardWinGetFormats(PVBOXCLIPBOARDWINCTX pCtx, PVBOXCLIPBOARDFORMAT pfFormats); 104 131 105 132 # ifdef VBOX_WITH_SHARED_CLIPBOARD_URI_LIST 106 class VBoxClipboardWinDataObject : public IDataObject 133 class SharedClipboardURIList; 134 class FILEGROUPDESCRIPTOR; 135 136 class VBoxClipboardWinDataObject : public IDataObject //, public IDataObjectAsyncCapability 107 137 { 108 138 public: … … 111 141 { 112 142 Uninitialized = 0, 113 Initialized, 114 Dropping, 115 Dropped, 116 Aborted 143 Initialized 144 }; 145 146 enum FormatIndex 147 { 148 /** File descriptor, ANSI version. */ 149 FormatIndex_FileDescriptorA = 0, 150 /** File descriptor, Unicode version. */ 151 FormatIndex_FileDescriptorW, 152 /** File contents. */ 153 FormatIndex_FileContents 117 154 }; 118 155 … … 140 177 STDMETHOD(EnumDAdvise)(IEnumSTATDATA **ppEnumAdvise); 141 178 142 public: 143 179 #ifdef VBOX_WITH_SHARED_CLIPBOARD_WIN_ASYNC 180 public: /* IDataObjectAsyncCapability methods. */ 181 182 STDMETHOD(EndOperation)(HRESULT hResult, IBindCtx* pbcReserved, DWORD dwEffects); 183 STDMETHOD(GetAsyncMode)(BOOL* pfIsOpAsync); 184 STDMETHOD(InOperation)(BOOL* pfInAsyncOp); 185 STDMETHOD(SetAsyncMode)(BOOL fDoOpAsync); 186 STDMETHOD(StartOperation)(IBindCtx* pbcReserved); 187 #endif /* VBOX_WITH_SHARED_CLIPBOARD_WIN_ASYNC */ 188 189 public: 190 191 int Init(uint32_t idClient); 144 192 static const char* ClipboardFormatToString(CLIPFORMAT fmt); 145 193 146 int Abort(void);147 void SetStatus(Status status);148 int Signal(const RTCString &strFormat, const void *pvData, uint32_t cbData);149 150 194 protected: 151 195 152 bool LookupFormatEtc(LPFORMATETC pFormatEtc, ULONG *puIndex); 153 static HGLOBAL MemDup(HGLOBAL hMemSource); 154 void RegisterFormat(LPFORMATETC pFormatEtc, CLIPFORMAT clipFormat, TYMED tyMed = TYMED_HGLOBAL, 196 static int Thread(RTTHREAD hThread, void *pvUser); 197 198 int copyToHGlobal(const void *pvData, size_t cbData, UINT fFlags, HGLOBAL *phGlobal); 199 int createFileGroupDescriptor(const SharedClipboardURIList &URIList, HGLOBAL *phGlobal); 200 201 bool lookupFormatEtc(LPFORMATETC pFormatEtc, ULONG *puIndex); 202 void registerFormat(LPFORMATETC pFormatEtc, CLIPFORMAT clipFormat, TYMED tyMed = TYMED_HGLOBAL, 155 203 LONG lindex = -1, DWORD dwAspect = DVASPECT_CONTENT, DVTARGETDEVICE *pTargetDevice = NULL); 156 204 … … 160 208 LPFORMATETC mpFormatEtc; 161 209 LPSTGMEDIUM mpStgMedium; 162 RTSEMEVENT mEventDropped; 163 RTCString mstrFormat; 164 void *mpvData; 165 uint32_t mcbData; 210 /** The HGCM client ID for the URI data transfers. */ 211 uint32_t muClientID; 212 IStream *mpStream; 166 213 }; 167 214 … … 173 220 virtual ~VBoxClipboardWinEnumFormatEtc(void); 174 221 175 public: 222 public: /* IUnknown methods. */ 176 223 177 224 STDMETHOD(QueryInterface)(REFIID iid, void ** ppvObject); 178 225 STDMETHOD_(ULONG, AddRef)(void); 179 226 STDMETHOD_(ULONG, Release)(void); 227 228 public: /* IEnumFORMATETC methods. */ 180 229 181 230 STDMETHOD(Next)(ULONG cFormats, LPFORMATETC pFormatEtc, ULONG *pcFetched); … … 197 246 }; 198 247 199 # if 0 200 class VBoxClipboardWinStreamImpl : public IDataObject 201 { 202 248 /** 249 * Own IStream implementation to implement file-based clipboard operations 250 * through HGCM. Needed on Windows hosts and guests. 251 */ 252 class VBoxClipboardWinStreamImpl : public IStream 253 { 254 public: 255 256 VBoxClipboardWinStreamImpl(void); 257 virtual ~VBoxClipboardWinStreamImpl(void); 258 259 public: /* IUnknown methods. */ 260 261 STDMETHOD(QueryInterface)(REFIID iid, void ** ppvObject); 262 STDMETHOD_(ULONG, AddRef)(void); 263 STDMETHOD_(ULONG, Release)(void); 264 265 public: /* IStream methods. */ 266 267 STDMETHOD(Clone)(IStream** ppStream); 268 STDMETHOD(Commit)(DWORD dwFrags); 269 STDMETHOD(CopyTo)(IStream* pDestStream, ULARGE_INTEGER nBytesToCopy, ULARGE_INTEGER* nBytesRead, ULARGE_INTEGER* nBytesWritten); 270 STDMETHOD(LockRegion)(ULARGE_INTEGER nStart, ULARGE_INTEGER nBytes,DWORD dwFlags); 271 STDMETHOD(Read)(void* pvBuffer, ULONG nBytesToRead, ULONG* nBytesRead); 272 STDMETHOD(Revert)(void); 273 STDMETHOD(Seek)(LARGE_INTEGER nMove, DWORD dwOrigin, ULARGE_INTEGER* nNewPos); 274 STDMETHOD(SetSize)(ULARGE_INTEGER nNewSize); 275 STDMETHOD(Stat)(STATSTG* statstg, DWORD dwFlags); 276 STDMETHOD(UnlockRegion)(ULARGE_INTEGER nStart, ULARGE_INTEGER nBytes, DWORD dwFlags); 277 STDMETHOD(Write)(const void* pvBuffer, ULONG nBytesToRead, ULONG* nBytesRead); 278 279 public: /* Own methods. */ 280 281 static HRESULT Create(IStream **ppStream); 282 283 private: 284 285 LONG m_lRefCount; 203 286 }; 204 # endif205 287 206 288 # endif /* VBOX_WITH_SHARED_CLIPBOARD_URI_LIST */ -
trunk/include/VBox/GuestHost/SharedClipboard.h
r78440 r78474 35 35 /** A single Shared Clipboard format. */ 36 36 typedef uint32_t VBOXCLIPBOARDFORMAT; 37 /** Pointer to a single Shared Clipboard format. */ 38 typedef VBOXCLIPBOARDFORMAT *PVBOXCLIPBOARDFORMAT; 37 39 38 40 /** Bit map of Shared Clipboard format. */ 39 41 typedef uint32_t VBOXCLIPBOARDFORMATS; 42 /** Pointer to a bit map of Shared Clipboard format. */ 43 typedef VBOXCLIPBOARDFORMATS *PVBOXCLIPBOARDFORMATS; 40 44 41 45 /**
Note:
See TracChangeset
for help on using the changeset viewer.