aboutsummaryrefslogtreecommitdiff
path: root/scripts/windows_input/Native.cs
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/windows_input/Native.cs')
-rw-r--r--scripts/windows_input/Native.cs18
1 files changed, 17 insertions, 1 deletions
diff --git a/scripts/windows_input/Native.cs b/scripts/windows_input/Native.cs
index 76cb8af7..9d635753 100644
--- a/scripts/windows_input/Native.cs
+++ b/scripts/windows_input/Native.cs
@@ -108,7 +108,15 @@ namespace HerdrInputGauntlet {
[DllImport("user32.dll", SetLastError=true)] static extern uint SendInput(uint count, Input[] events, int size);
[DllImport("user32.dll")] static extern bool GetWindowRect(IntPtr hwnd, out Rect rect);
[DllImport("user32.dll")] static extern bool SetWindowPos(IntPtr hwnd, IntPtr after, int x, int y, int width, int height, uint flags);
- [DllImport("user32.dll")] public static extern int CountClipboardFormats();
+ [DllImport("user32.dll",EntryPoint="CountClipboardFormats",SetLastError=true)] static extern int NativeCountClipboardFormats();
+ public static int CountClipboardFormats() {
+ int count=NativeCountClipboardFormats();
+ if(count==0) {
+ int error=Marshal.GetLastWin32Error();
+ if(error!=0) throw new Win32Exception(error,"Clipboard format count failed");
+ }
+ return count;
+ }
[DllImport("user32.dll")] public static extern uint GetClipboardSequenceNumber();
[DllImport("user32.dll")] static extern IntPtr GetClipboardOwner();
[DllImport("user32.dll")] static extern bool OpenClipboard(IntPtr owner);
@@ -141,6 +149,14 @@ namespace HerdrInputGauntlet {
if(result<0) Marshal.ThrowExceptionForHR(result);
return checked((int)pid);
}
+ public static int ClearClipboardForRun() {
+ if(!OpenClipboard(IntPtr.Zero)) throw new Exception("Clipboard busy; cannot start paste qualification");
+ try {
+ int formats=CountClipboardFormats();
+ if(formats!=0 && !EmptyClipboard()) throw new Exception("Clipboard clear failed");
+ return formats;
+ } finally { CloseClipboard(); }
+ }
public static uint SetEmptyClipboard(IntPtr owner,string text) {
if(owner==IntPtr.Zero) throw new Exception("Clipboard owner is required");