mirror of
https://github.com/Flow-Launcher/Flow.Launcher.git
synced 2026-03-11 08:54:32 +00:00
parent
09d66f5850
commit
8b10973dda
2 changed files with 27 additions and 45 deletions
|
|
@ -30,8 +30,6 @@ using Windows.Win32;
|
|||
using Window = System.Windows.Window;
|
||||
using System.Linq;
|
||||
using System.Windows.Shapes;
|
||||
using ModernWpf.Controls.Primitives;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Flow.Launcher
|
||||
{
|
||||
|
|
@ -827,44 +825,29 @@ namespace Flow.Launcher
|
|||
|
||||
public void HideStartup()
|
||||
{
|
||||
IntPtr hwnd = new WindowInteropHelper(System.Windows.Application.Current.MainWindow).Handle;
|
||||
|
||||
//_viewModel.MainWindowOpacity = 0.2; /*Fix Render Blinking */
|
||||
if (_settings.HideOnStartup)
|
||||
{
|
||||
CloakWindow(System.Windows.Application.Current.MainWindow);
|
||||
// 📌 최초 실행 시 창이 깜빡이는 문제 방지 (완전히 숨긴 상태로 시작)
|
||||
//System.Windows.Application.Current.MainWindow.Visibility = Visibility.Hidden;
|
||||
|
||||
Dispatcher.BeginInvoke((Action)(() =>
|
||||
{
|
||||
_viewModel.Hide();
|
||||
System.Windows.Application.Current.MainWindow.Visibility = Visibility.Collapsed;
|
||||
}), DispatcherPriority.Background);
|
||||
//Dispatcher.BeginInvoke((Action)(() =>
|
||||
//{
|
||||
// _viewModel.Hide();
|
||||
// System.Windows.Application.Current.MainWindow.Visibility = Visibility.Collapsed;
|
||||
//}), DispatcherPriority.Background);
|
||||
_viewModel.Hide();
|
||||
}
|
||||
else
|
||||
{
|
||||
UncloakWindow(System.Windows.Application.Current.MainWindow);
|
||||
// 📌 최초 실행 시 그림자 효과를 미리 적용하여 Show() 할 때 렌더링이 느려지지 않도록 함
|
||||
//ThemeManager.Instance.SetBlurForWindow();
|
||||
//ThemeManager.Instance.AutoDropShadow();
|
||||
_viewModel.Show();
|
||||
//_viewModel.MainWindowOpacity = 1;
|
||||
}
|
||||
}
|
||||
|
||||
private const int DWMWA_CLOAK = 13;
|
||||
|
||||
[DllImport("dwmapi.dll")]
|
||||
private static extern int DwmSetWindowAttribute(IntPtr hwnd, int dwAttribute, ref int pvAttribute, int cbAttribute);
|
||||
|
||||
public static void CloakWindow(Window window)
|
||||
{
|
||||
IntPtr hwnd = new WindowInteropHelper(window).Handle;
|
||||
int cloak = 1;
|
||||
DwmSetWindowAttribute(hwnd, DWMWA_CLOAK, ref cloak, sizeof(int));
|
||||
}
|
||||
|
||||
public static void UncloakWindow(Window window)
|
||||
{
|
||||
IntPtr hwnd = new WindowInteropHelper(window).Handle;
|
||||
int cloak = 0;
|
||||
DwmSetWindowAttribute(hwnd, DWMWA_CLOAK, ref cloak, sizeof(int));
|
||||
}
|
||||
|
||||
public Screen SelectedScreen()
|
||||
{
|
||||
Screen screen;
|
||||
|
|
|
|||
|
|
@ -28,7 +28,6 @@ using System.Windows.Media;
|
|||
using CommunityToolkit.Mvvm.DependencyInjection;
|
||||
using System.Windows.Threading;
|
||||
using System.Windows.Interop;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Flow.Launcher.ViewModel
|
||||
{
|
||||
|
|
@ -1389,13 +1388,12 @@ namespace Flow.Launcher.ViewModel
|
|||
{
|
||||
IntPtr hWnd = new WindowInteropHelper(mainWindow).Handle;
|
||||
|
||||
// 📌 DWM Cloak 해제 (창을 정상적으로 표시)
|
||||
int cloak = 0;
|
||||
DwmSetWindowAttribute(hWnd, 13, ref cloak, sizeof(int));
|
||||
// 📌 창을 보이도록 설정 (Cloak 사용 안 함)
|
||||
//ShowWindow(hWnd, SW_SHOW);
|
||||
|
||||
// 📌 UI 요소 복원
|
||||
mainWindow.ClockPanel.Visibility = Visibility.Visible;
|
||||
mainWindow.ClockPanel.Opacity = 1;
|
||||
//mainWindow.SearchIcon.Visibility = Visibility.Visible;
|
||||
SearchIconVisibility = Visibility.Visible;
|
||||
}
|
||||
|
||||
|
|
@ -1421,14 +1419,13 @@ namespace Flow.Launcher.ViewModel
|
|||
|
||||
if (Application.Current.MainWindow is MainWindow mainWindow)
|
||||
{
|
||||
IntPtr hWnd = new WindowInteropHelper(mainWindow).Handle;
|
||||
|
||||
// 📌 UI 요소 숨기기
|
||||
// 📌 아이콘과 시계 Opacity를 0으로 설정하고 Visibility.Hidden 적용
|
||||
Application.Current.Dispatcher.Invoke(() =>
|
||||
{
|
||||
mainWindow.ClockPanel.Opacity = 0;
|
||||
mainWindow.SearchIcon.Opacity = 0;
|
||||
mainWindow.ClockPanel.Visibility = Visibility.Hidden;
|
||||
//mainWindow.SearchIcon.Visibility = Visibility.Hidden;
|
||||
SearchIconVisibility = Visibility.Hidden;
|
||||
|
||||
// 강제 UI 업데이트
|
||||
|
|
@ -1436,9 +1433,7 @@ namespace Flow.Launcher.ViewModel
|
|||
mainWindow.SearchIcon.UpdateLayout();
|
||||
}, DispatcherPriority.Render);
|
||||
|
||||
// 📌 DWM Cloak 적용 (창을 완전히 숨김)
|
||||
int cloak = 1;
|
||||
DwmSetWindowAttribute(hWnd, 13, ref cloak, sizeof(int));
|
||||
//await Task.Delay(10); // UI 반영 대기
|
||||
}
|
||||
|
||||
// 📌 텍스트 초기화 즉시 적용 + UI 강제 업데이트
|
||||
|
|
@ -1471,16 +1466,20 @@ namespace Flow.Launcher.ViewModel
|
|||
break;
|
||||
}
|
||||
|
||||
//if (Application.Current.MainWindow is MainWindow mainWindow2)
|
||||
//{
|
||||
// IntPtr hWnd = new WindowInteropHelper(mainWindow2).Handle;
|
||||
|
||||
// // 📌 Cloak을 사용하지 않고 일반적인 `ShowWindow(SW_HIDE)` 사용 → Mica/Acrylic 유지됨
|
||||
// ShowWindow(hWnd, SW_HIDE);
|
||||
//}
|
||||
|
||||
// WPF 속성 업데이트
|
||||
MainWindowVisibilityStatus = false;
|
||||
MainWindowVisibility = Visibility.Collapsed;
|
||||
VisibilityChanged?.Invoke(this, new VisibilityChangedEventArgs { IsVisible = false });
|
||||
}
|
||||
|
||||
// 📌 DWM API 추가 (P/Invoke)
|
||||
[DllImport("dwmapi.dll")]
|
||||
private static extern int DwmSetWindowAttribute(IntPtr hwnd, int dwAttribute, ref int pvAttribute, int cbAttribute);
|
||||
|
||||
/// <summary>
|
||||
/// Checks if Flow Launcher should ignore any hotkeys
|
||||
/// </summary>
|
||||
|
|
|
|||
Loading…
Reference in a new issue