From 5a1da60237a3f33b06b9605c2da1e19a0aa7c5bd Mon Sep 17 00:00:00 2001 From: NaBian <836904362@qq.com> Date: Fri, 16 Sep 2022 09:21:15 +0800 Subject: [PATCH] fix: get active window issue. --- src/Shared/HandyControl_Shared/Tools/Helper/WindowHelper.cs | 6 +++++- .../HandyControl_Shared/Tools/Interop/InteropMethods.cs | 3 +++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/Shared/HandyControl_Shared/Tools/Helper/WindowHelper.cs b/src/Shared/HandyControl_Shared/Tools/Helper/WindowHelper.cs index 23ec5e0f..6bab0d0d 100644 --- a/src/Shared/HandyControl_Shared/Tools/Helper/WindowHelper.cs +++ b/src/Shared/HandyControl_Shared/Tools/Helper/WindowHelper.cs @@ -20,7 +20,11 @@ public static class WindowHelper /// 获取当前应用中处于激活的一个窗口 /// /// - public static Window GetActiveWindow() => Application.Current.Windows.OfType().SingleOrDefault(x => x.IsActive); + public static Window GetActiveWindow() + { + var activeWindow = InteropMethods.GetActiveWindow(); + return Application.Current.Windows.OfType().FirstOrDefault(x => x.GetHandle() == activeWindow); + } private static readonly BitArray _cacheValid = new((int) InteropValues.CacheSlot.NumSlots); diff --git a/src/Shared/HandyControl_Shared/Tools/Interop/InteropMethods.cs b/src/Shared/HandyControl_Shared/Tools/Interop/InteropMethods.cs index 4749a44e..23fec702 100644 --- a/src/Shared/HandyControl_Shared/Tools/Interop/InteropMethods.cs +++ b/src/Shared/HandyControl_Shared/Tools/Interop/InteropMethods.cs @@ -348,6 +348,9 @@ internal class InteropMethods [DllImport(InteropValues.ExternDll.User32)] internal static extern IntPtr GetWindow(IntPtr hwnd, int nCmd); + [DllImport(InteropValues.ExternDll.User32)] + internal static extern IntPtr GetActiveWindow(); + [DllImport(InteropValues.ExternDll.User32)] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool IsWindowVisible(IntPtr hwnd);