Deskflow 1.26.0.314
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 Synergy App 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 <mutex>
14#include <vector>
15
16#define WIN32_LEAN_AND_MEAN
17#include <Windows.h>
18
21
24{
25public:
26 MSWindowsClipboard(HWND window);
28 ~MSWindowsClipboard() override;
29
31
43 bool emptyUnowned();
44
46 static bool isOwnedByDeskflow();
47
48 // IClipboard overrides
49 bool empty() override;
50 void add(Format, const std::string &data) override;
51 bool open(Time) const override;
52 void close() const override;
53 Time getTime() const override;
54 bool has(Format) const override;
55 std::string get(Format) const override;
56
58
59private:
60 void clearConverters();
61
62 UINT convertFormatToWin32(Format) const;
63 HANDLE convertTextToWin32(const std::string &data) const;
64 std::string convertTextFromWin32(HANDLE) const;
65
66 static UINT getOwnershipFormat();
67
68private:
69 using ConverterList = std::vector<IMSWindowsClipboardConverter *>;
70
71 HWND m_window;
72 mutable std::mutex m_mutex;
73 mutable Time m_time;
74 ConverterList m_converters;
75 static UINT s_ownershipFormat;
77 bool m_deleteFacade;
78};
79
81
86{
87public:
88 virtual ~IMSWindowsClipboardConverter() = default;
89 // accessors
90
91 // return the clipboard format this object converts from/to
92 virtual IClipboard::Format getFormat() const = 0;
93
94 // return the atom representing the win32 clipboard format that
95 // this object converts from/to
96 virtual UINT getWin32Format() const = 0;
97
98 // convert from the IClipboard format to the win32 clipboard format.
99 // the input data must be in the IClipboard format returned by
100 // getFormat(). the return data will be in the win32 clipboard
101 // format returned by getWin32Format(), allocated by GlobalAlloc().
102 virtual HANDLE fromIClipboard(const std::string &) const = 0;
103
104 // convert from the win32 clipboard format to the IClipboard format
105 // (i.e., the reverse of fromIClipboard()).
106 virtual std::string toIClipboard(HANDLE data) const = 0;
107};
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:86
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:23
bool emptyUnowned()
Empty clipboard without ownership.
Definition MSWindowsClipboard.cpp:53
void add(Format, const std::string &data) override
Add data.
Definition MSWindowsClipboard.cpp:85
bool empty() override
Empty clipboard.
Definition MSWindowsClipboard.cpp:68
bool has(Format) const override
Check for data.
Definition MSWindowsClipboard.cpp:155
bool open(Time) const override
Open clipboard.
Definition MSWindowsClipboard.cpp:116
std::string get(Format) const override
Get data.
Definition MSWindowsClipboard.cpp:168
MSWindowsClipboard(HWND window, IMSWindowsClipboardFacade &facade)
~MSWindowsClipboard() override
Definition MSWindowsClipboard.cpp:35
Time getTime() const override
Get time.
Definition MSWindowsClipboard.cpp:149
void setFacade(IMSWindowsClipboardFacade &facade)
Definition MSWindowsClipboard.cpp:46
static bool isOwnedByDeskflow()
Test if clipboard is owned by deskflow.
Definition MSWindowsClipboard.cpp:208
void close() const override
Close clipboard.
Definition MSWindowsClipboard.cpp:143