diff --git a/soup/os.cpp b/soup/os.cpp index 840d1885..5d6ea8b1 100644 --- a/soup/os.cpp +++ b/soup/os.cpp @@ -181,6 +181,31 @@ NAMESPACE_SOUP return copy_to_clipboard_utf16(unicode::utf8_to_utf16(text)); } + std::string os::getClipboardTextUtf8() + { + return unicode::utf16_to_utf8(getClipboardTextUtf16()); + } + + UTF16_STRING_TYPE os::getClipboardTextUtf16() + { + std::wstring text; + if (OpenClipboard(nullptr)) + { + HANDLE hData = GetClipboardData(CF_UNICODETEXT); + if (hData != nullptr) + { + auto pszText = static_cast(GlobalLock(hData)); + if (pszText != nullptr) + { + text = pszText; + GlobalUnlock(hData); + } + } + CloseClipboard(); + } + return text; + } + #if !SOUP_CROSS_COMPILE size_t os::getMemoryUsage() { diff --git a/soup/os.hpp b/soup/os.hpp index d1995698..3bb531f9 100644 --- a/soup/os.hpp +++ b/soup/os.hpp @@ -34,6 +34,8 @@ NAMESPACE_SOUP #if SOUP_WINDOWS static bool copyToClipboard(const std::string& text); + [[nodiscard]] static std::string getClipboardTextUtf8(); + [[nodiscard]] static std::wstring getClipboardTextUtf16(); #if !SOUP_CROSS_COMPILE [[nodiscard]] static size_t getMemoryUsage();