28
28
using CommunityToolkit . Mvvm . DependencyInjection ;
29
29
using System . Windows . Threading ;
30
30
using System . Windows . Interop ;
31
+ using System . Runtime . InteropServices ;
31
32
32
33
namespace Flow . Launcher . ViewModel
33
34
{
@@ -1388,12 +1389,13 @@ public void Show()
1388
1389
{
1389
1390
IntPtr hWnd = new WindowInteropHelper ( mainWindow ) . Handle ;
1390
1391
1391
- // 📌 창을 보이도록 설정 (Cloak 사용 안 함)
1392
- //ShowWindow(hWnd, SW_SHOW);
1392
+ // 📌 DWM Cloak 해제 (창을 정상적으로 표시)
1393
+ int cloak = 0 ;
1394
+ DwmSetWindowAttribute ( hWnd , 13 , ref cloak , sizeof ( int ) ) ;
1393
1395
1394
1396
// 📌 UI 요소 복원
1395
1397
mainWindow . ClockPanel . Visibility = Visibility . Visible ;
1396
- // mainWindow.SearchIcon.Visibility = Visibility.Visible ;
1398
+ mainWindow . ClockPanel . Opacity = 1 ;
1397
1399
SearchIconVisibility = Visibility . Visible ;
1398
1400
}
1399
1401
@@ -1419,21 +1421,24 @@ public async void Hide()
1419
1421
1420
1422
if ( Application . Current . MainWindow is MainWindow mainWindow )
1421
1423
{
1422
- // 📌 아이콘과 시계 Opacity를 0으로 설정하고 Visibility.Hidden 적용
1424
+ IntPtr hWnd = new WindowInteropHelper ( mainWindow ) . Handle ;
1425
+
1426
+ // 📌 UI 요소 숨기기
1423
1427
Application . Current . Dispatcher . Invoke ( ( ) =>
1424
1428
{
1425
1429
mainWindow . ClockPanel . Opacity = 0 ;
1426
1430
mainWindow . SearchIcon . Opacity = 0 ;
1427
1431
mainWindow . ClockPanel . Visibility = Visibility . Hidden ;
1428
- //mainWindow.SearchIcon.Visibility = Visibility.Hidden;
1429
1432
SearchIconVisibility = Visibility . Hidden ;
1430
1433
1431
1434
// 강제 UI 업데이트
1432
1435
mainWindow . ClockPanel . UpdateLayout ( ) ;
1433
1436
mainWindow . SearchIcon . UpdateLayout ( ) ;
1434
1437
} , DispatcherPriority . Render ) ;
1435
1438
1436
- //await Task.Delay(10); // UI 반영 대기
1439
+ // 📌 DWM Cloak 적용 (창을 완전히 숨김)
1440
+ int cloak = 1 ;
1441
+ DwmSetWindowAttribute ( hWnd , 13 , ref cloak , sizeof ( int ) ) ;
1437
1442
}
1438
1443
1439
1444
// 📌 텍스트 초기화 즉시 적용 + UI 강제 업데이트
@@ -1466,20 +1471,16 @@ public async void Hide()
1466
1471
break ;
1467
1472
}
1468
1473
1469
- //if (Application.Current.MainWindow is MainWindow mainWindow2)
1470
- //{
1471
- // IntPtr hWnd = new WindowInteropHelper(mainWindow2).Handle;
1472
-
1473
- // // 📌 Cloak을 사용하지 않고 일반적인 `ShowWindow(SW_HIDE)` 사용 → Mica/Acrylic 유지됨
1474
- // ShowWindow(hWnd, SW_HIDE);
1475
- //}
1476
-
1477
1474
// WPF 속성 업데이트
1478
1475
MainWindowVisibilityStatus = false ;
1479
1476
MainWindowVisibility = Visibility . Collapsed ;
1480
1477
VisibilityChanged ? . Invoke ( this , new VisibilityChangedEventArgs { IsVisible = false } ) ;
1481
1478
}
1482
1479
1480
+ // 📌 DWM API 추가 (P/Invoke)
1481
+ [ DllImport ( "dwmapi.dll" ) ]
1482
+ private static extern int DwmSetWindowAttribute ( IntPtr hwnd , int dwAttribute , ref int pvAttribute , int cbAttribute ) ;
1483
+
1483
1484
/// <summary>
1484
1485
/// Checks if Flow Launcher should ignore any hotkeys
1485
1486
/// </summary>
0 commit comments