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);