public string GetText() { var windowHandle = _clyde.GetNativeWindowHandle(); if (!OpenClipboard(windowHandle)) { throw new Win32Exception(Marshal.GetLastWin32Error()); } try { if (IsClipboardFormatAvailable(CF_UNICODETEXT)) { var dataHandle = GetClipboardData(CF_UNICODETEXT); if (dataHandle == IntPtr.Zero) { throw new Win32Exception(Marshal.GetLastWin32Error()); } var ptr = GlobalLock(dataHandle); if (ptr == IntPtr.Zero) { throw new Win32Exception(Marshal.GetLastWin32Error()); } try { var str = Marshal.PtrToStringUni(ptr); return(str); } finally { GlobalUnlock(dataHandle); } } if (IsClipboardFormatAvailable(CF_TEXT)) { var dataHandle = GetClipboardData(CF_TEXT); if (dataHandle == IntPtr.Zero) { throw new Win32Exception(Marshal.GetLastWin32Error()); } var ptr = GlobalLock(dataHandle); if (ptr == IntPtr.Zero) { throw new Win32Exception(Marshal.GetLastWin32Error()); } try { var str = Marshal.PtrToStringAnsi(ptr); return(str); } finally { GlobalUnlock(dataHandle); } } // Clipboard data isn't available as string, guess we just say it's empty. return(""); } finally { CloseClipboard(); } }