Deskflow 1.24.0.365
Keyboard and mouse sharing utility
Loading...
Searching...
No Matches
MSWindowsClipboard.h
Go to the documentation of this file.
1/*
2 * Deskflow -- mouse and keyboard sharing utility
3 * SPDX-FileCopyrightText: (C) 2025 Deskflow Developers
4 * SPDX-FileCopyrightText: (C) 2012 - 2016 Symless Ltd.
5 * SPDX-FileCopyrightText: (C) 2002 Chris Schoeneman
6 * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
7 */
8
9#pragma once
10
11#include "deskflow/IClipboard.h"
12
13#include <vector>
14
15#define WIN32_LEAN_AND_MEAN
16#include <Windows.h>
17
20
23{
24public:
25 MSWindowsClipboard(HWND window);
27 ~MSWindowsClipboard() override;
28
30
42 bool emptyUnowned();
43
45 static bool isOwnedByDeskflow();
46
47 // IClipboard overrides
48 bool empty() override;
49 void add(Format, const std::string &data) override;
50 bool open(Time) const override;
51 void close() const override;
52 Time getTime() const override;
53 bool has(Format) const override;
54 std::string get(Format) const override;
55
57
58private:
59 void clearConverters();
60
61 UINT convertFormatToWin32(Format) const;
62 HANDLE convertTextToWin32(const std::string &data) const;
63 std::string convertTextFromWin32(HANDLE) const;
64
65 static UINT getOwnershipFormat();
66
67private:
68 using ConverterList = std::vector<IMSWindowsClipboardConverter *>;
69
70 HWND m_window;
71 mutable Time m_time;
72 ConverterList m_converters;
73 static UINT s_ownershipFormat;
75 bool m_deleteFacade;
76};
77
79
84{
85public:
86 virtual ~IMSWindowsClipboardConverter() = default;
87 // accessors
88
89 // return the clipboard format this object converts from/to
90 virtual IClipboard::Format getFormat() const = 0;
91
92 // return the atom representing the win32 clipboard format that
93 // this object converts from/to
94 virtual UINT getWin32Format() const = 0;
95
96 // convert from the IClipboard format to the win32 clipboard format.
97 // the input data must be in the IClipboard format returned by
98 // getFormat(). the return data will be in the win32 clipboard
99 // format returned by getWin32Format(), allocated by GlobalAlloc().
100 virtual HANDLE fromIClipboard(const std::string &) const = 0;
101
102 // convert from the win32 clipboard format to the IClipboard format
103 // (i.e., the reverse of fromIClipboard()).
104 virtual std::string toIClipboard(HANDLE data) const = 0;
105};
static int void FAR * data
Definition ArchNetworkWinsock.cpp:35
Clipboard interface.
Definition IClipboard.h:19
Format
Clipboard formats.
Definition IClipboard.h:50
uint32_t Time
Timestamp type.
Definition IClipboard.h:28
Clipboard format converter interface.
Definition MSWindowsClipboard.h:84
virtual IClipboard::Format getFormat() const =0
virtual ~IMSWindowsClipboardConverter()=default
virtual std::string toIClipboard(HANDLE data) const =0
virtual UINT getWin32Format() const =0
virtual HANDLE fromIClipboard(const std::string &) const =0
Definition IMSWindowsClipboardFacade.h:17
MSWindowsClipboard(HWND window)
Definition MSWindowsClipboard.cpp:22
bool emptyUnowned()
Empty clipboard without ownership.
Definition MSWindowsClipboard.cpp:52
void add(Format, const std::string &data) override
Add data.
Definition MSWindowsClipboard.cpp:84
bool empty() override
Empty clipboard.
Definition MSWindowsClipboard.cpp:67
bool has(Format) const override
Check for data.
Definition MSWindowsClipboard.cpp:140
bool open(Time) const override
Open clipboard.
Definition MSWindowsClipboard.cpp:115
std::string get(Format) const override
Get data.
Definition MSWindowsClipboard.cpp:153
MSWindowsClipboard(HWND window, IMSWindowsClipboardFacade &facade)
~MSWindowsClipboard() override
Definition MSWindowsClipboard.cpp:34
Time getTime() const override
Get time.
Definition MSWindowsClipboard.cpp:135
void setFacade(IMSWindowsClipboardFacade &facade)
Definition MSWindowsClipboard.cpp:45
static bool isOwnedByDeskflow()
Test if clipboard is owned by deskflow.
Definition MSWindowsClipboard.cpp:193
void close() const override
Close clipboard.
Definition MSWindowsClipboard.cpp:129