From 9f075333559705f9e669cb3812363be4cf97a6ea Mon Sep 17 00:00:00 2001 From: Yatao Li Date: Sun, 28 Mar 2021 18:48:17 +0800 Subject: [PATCH 1/2] add .NET interop --- .gitignore | 3 +- VirtualDesktopAccessor.NET/Native.cs | 77 +++++++++++++++++++ .../VirtualDesktopAccessor.NET.csproj | 7 ++ 3 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 VirtualDesktopAccessor.NET/Native.cs create mode 100644 VirtualDesktopAccessor.NET/VirtualDesktopAccessor.NET.csproj diff --git a/.gitignore b/.gitignore index e3295aa..d1458bc 100644 --- a/.gitignore +++ b/.gitignore @@ -230,4 +230,5 @@ _Pvt_Extensions # FAKE - F# Make .fake/ -!x64/Release/VirtualDesktopAccessor.dll \ No newline at end of file +!x64/Release/VirtualDesktopAccessor.dll +**/.ccls-cache diff --git a/VirtualDesktopAccessor.NET/Native.cs b/VirtualDesktopAccessor.NET/Native.cs new file mode 100644 index 0000000..aea1fef --- /dev/null +++ b/VirtualDesktopAccessor.NET/Native.cs @@ -0,0 +1,77 @@ +using System; +using System.Runtime.InteropServices; + +namespace VirtualDesktopAccessor +{ + using GUID = System.Guid; + using HWND = System.IntPtr; + using BOOL = System.Int32; + using HRESULT = System.UInt32; + using UINT = System.UInt32; + using ULONGLONG = System.UInt64; + + + public static class Native + { + [DllImport("VirtualDesktopAccessor")] + public extern static void EnableKeepMinimized(); + [DllImport("VirtualDesktopAccessor")] + public extern static void RestoreMinimized(); + [DllImport("VirtualDesktopAccessor")] + public extern static int GetDesktopCount(); + [DllImport("VirtualDesktopAccessor")] + public extern static int GetDesktopNumberById(GUID desktopId); + [DllImport("VirtualDesktopAccessor")] + public extern static GUID GetWindowDesktopId(HWND window); + [DllImport("VirtualDesktopAccessor")] + public extern static int GetWindowDesktopNumber(HWND window); + [DllImport("VirtualDesktopAccessor")] + public extern static int IsWindowOnCurrentVirtualDesktop(HWND window); + [DllImport("VirtualDesktopAccessor")] + public extern static GUID GetDesktopIdByNumber(int number); + [DllImport("VirtualDesktopAccessor")] + public extern static int IsWindowOnDesktopNumber(HWND window, int number); + [DllImport("VirtualDesktopAccessor")] + public extern static BOOL MoveWindowToDesktopNumber(HWND window, int number); + [DllImport("VirtualDesktopAccessor")] + public extern static int GetCurrentDesktopNumber(); + [DllImport("VirtualDesktopAccessor")] + public extern static void GoToDesktopNumber(int number); + [DllImport("VirtualDesktopAccessor")] + public extern static int IsPinnedWindow(HWND hwnd); + [DllImport("VirtualDesktopAccessor")] + public extern static void PinWindow(HWND hwnd); + [DllImport("VirtualDesktopAccessor")] + public extern static void UnPinWindow(HWND hwnd); + [DllImport("VirtualDesktopAccessor")] + public extern static int IsPinnedApp(HWND hwnd); + [DllImport("VirtualDesktopAccessor")] + public extern static void PinApp(HWND hwnd); + [DllImport("VirtualDesktopAccessor")] + public extern static void UnPinApp(HWND hwnd); + [DllImport("VirtualDesktopAccessor")] + public extern static int ViewIsShownInSwitchers(HWND hwnd); + [DllImport("VirtualDesktopAccessor")] + public extern static int ViewIsVisible(HWND hwnd); + [DllImport("VirtualDesktopAccessor")] + public extern static HWND ViewGetThumbnailHwnd(HWND hwnd); + [DllImport("VirtualDesktopAccessor")] + public extern static HRESULT ViewSetFocus(HWND hwnd); + [DllImport("VirtualDesktopAccessor")] + public extern static HWND ViewGetFocused(); + [DllImport("VirtualDesktopAccessor")] + public extern static HRESULT ViewSwitchTo(HWND hwnd); + [DllImport("VirtualDesktopAccessor")] + public extern static UINT ViewGetByZOrder(HWND[] windows, UINT count, BOOL onlySwitcherWindows, BOOL onlyCurrentDesktop); + [DllImport("VirtualDesktopAccessor")] + public extern static UINT ViewGetByLastActivationOrder(HWND[] windows, UINT count, BOOL onlySwitcherWindows, BOOL onlyCurrentDesktop); + [DllImport("VirtualDesktopAccessor")] + public extern static ULONGLONG ViewGetLastActivationTimestamp(HWND hwnd); + [DllImport("VirtualDesktopAccessor")] + public extern static void RestartVirtualDesktopAccessor(); + [DllImport("VirtualDesktopAccessor")] + public extern static void RegisterPostMessageHook(HWND listener, int messageOffset); + [DllImport("VirtualDesktopAccessor")] + public extern static void UnregisterPostMessageHook(HWND hwnd); + } +} diff --git a/VirtualDesktopAccessor.NET/VirtualDesktopAccessor.NET.csproj b/VirtualDesktopAccessor.NET/VirtualDesktopAccessor.NET.csproj new file mode 100644 index 0000000..f208d30 --- /dev/null +++ b/VirtualDesktopAccessor.NET/VirtualDesktopAccessor.NET.csproj @@ -0,0 +1,7 @@ + + + + net5.0 + + + From 62cf0b3390034f20756654e1ac14eb9b26dc0c3f Mon Sep 17 00:00:00 2001 From: Yatao Li Date: Sun, 28 Mar 2021 18:58:58 +0800 Subject: [PATCH 2/2] include the native assembly --- .../VirtualDesktopAccessor.NET.csproj | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/VirtualDesktopAccessor.NET/VirtualDesktopAccessor.NET.csproj b/VirtualDesktopAccessor.NET/VirtualDesktopAccessor.NET.csproj index f208d30..8ff5239 100644 --- a/VirtualDesktopAccessor.NET/VirtualDesktopAccessor.NET.csproj +++ b/VirtualDesktopAccessor.NET/VirtualDesktopAccessor.NET.csproj @@ -4,4 +4,14 @@ net5.0 + + + + + + + PreserveNewest + + +