@@ -22,7 +22,7 @@ namespace SmartSystemMenu.Forms
2222 partial class MainForm : Form
2323 {
2424 private const string SHELL_WINDOW_NAME = "Program Manager" ;
25- private List < Window > _windows ;
25+ private Dictionary < IntPtr , Window > _windows ;
2626 private CallWndProcHook _callWndProcHook ;
2727 private GetMsgHook _getMsgHook ;
2828 private ShellHook _shellHook ;
@@ -121,9 +121,9 @@ protected override void OnLoad(EventArgs e)
121121 }
122122 }
123123
124- _windows = EnumWindows . EnumAllWindows ( _settings , _windowSettings , new string [ ] { SHELL_WINDOW_NAME } ) . ToList ( ) ;
124+ _windows = EnumWindows . EnumAllWindows ( _settings , _windowSettings , new string [ ] { SHELL_WINDOW_NAME } ) . ToDictionary ( x => x . Handle , y => y ) ;
125125
126- foreach ( var window in _windows )
126+ foreach ( var window in _windows . Values )
127127 {
128128 var processPath = window . Process ? . GetMainModuleFileName ( ) ?? string . Empty ;
129129 var fileName = Path . GetFileName ( processPath ) ;
@@ -219,7 +219,7 @@ protected override void OnClosed(EventArgs e)
219219
220220 if ( _windows != null )
221221 {
222- foreach ( Window window in _windows )
222+ foreach ( Window window in _windows . Values )
223223 {
224224 window . Dispose ( ) ;
225225 }
@@ -340,7 +340,7 @@ private void MenuItemRestoreClick(object sender, EventArgs<long> e)
340340 {
341341 case MenuItemId . SC_HIDE :
342342 {
343- foreach ( var window in _windows )
343+ foreach ( var window in _windows . Values )
344344 {
345345 if ( window . IsHidden )
346346 {
@@ -352,7 +352,7 @@ private void MenuItemRestoreClick(object sender, EventArgs<long> e)
352352
353353 case MenuItemId . SC_TRANS_DEFAULT :
354354 {
355- foreach ( var window in _windows )
355+ foreach ( var window in _windows . Values )
356356 {
357357 window . Menu . UncheckTransparencyMenu ( ) ;
358358 window . Menu . CheckMenuItem ( MenuItemId . SC_TRANS_DEFAULT , true ) ;
@@ -363,7 +363,7 @@ private void MenuItemRestoreClick(object sender, EventArgs<long> e)
363363
364364 case MenuItemId . SC_CLICK_THROUGH :
365365 {
366- foreach ( var window in _windows )
366+ foreach ( var window in _windows . Values )
367367 {
368368 if ( window . IsClickThrough )
369369 {
@@ -398,7 +398,7 @@ private void MenuItemRestoreClick(object sender, EventArgs<long> e)
398398
399399 private void WindowCreated ( object sender , WindowEventArgs e )
400400 {
401- if ( e . Handle != IntPtr . Zero && ! _windows . Any ( w => w . Handle == e . Handle ) )
401+ if ( e . Handle != IntPtr . Zero && ! _windows . ContainsKey ( e . Handle ) )
402402 {
403403 GetWindowThreadProcessId ( e . Handle , out int processId ) ;
404404 var process = SystemUtils . GetProcessByIdSafely ( processId ) ;
@@ -429,7 +429,7 @@ private void InitMenu(object sender, SysCommandEventArgs e)
429429 return ;
430430 }
431431
432- var window = _windows . FirstOrDefault ( w => w . Handle == e . WParam ) ;
432+ var window = _windows . TryGetValue ( e . WParam , out var win ) ? win : null ;
433433 if ( window == null )
434434 {
435435 window = new Window ( e . WParam , _settings . MenuItems , _settings . Language ) ;
@@ -471,7 +471,7 @@ private void CreateMenu(Window window, int processId, string processPath)
471471 var fileName = Path . GetFileName ( processPath ) ;
472472 window . NoRestoreMenu = ! string . IsNullOrEmpty ( fileName ) && _settings . NoRestoreMenuProcessNames . Contains ( fileName . ToLower ( ) ) ;
473473
474- _windows . Add ( window ) ;
474+ _windows . Add ( window . Handle , window ) ;
475475
476476 var windowClassName = window . GetClassName ( ) ;
477477 var isConsoleClassName = string . Compare ( windowClassName , Window . ConsoleClassName , StringComparison . CurrentCulture ) == 0 ;
@@ -487,8 +487,8 @@ private void CreateMenu(Window window, int processId, string processPath)
487487
488488 private void WindowDestroyed ( object sender , WindowEventArgs e )
489489 {
490- var window = _windows . FirstOrDefault ( w => w . Handle == e . Handle && ! w . IsHidden ) ;
491- if ( window != null )
490+ var window = _windows . TryGetValue ( e . Handle , out var win ) ? win : null ;
491+ if ( window != null && ! window . IsHidden )
492492 {
493493 if ( window . Handle == _dimHandle )
494494 {
@@ -498,14 +498,14 @@ private void WindowDestroyed(object sender, WindowEventArgs e)
498498 if ( ! window . ExistSystemTrayIcon )
499499 {
500500 window . Dispose ( ) ;
501- _windows . Remove ( window ) ;
501+ _windows . Remove ( window . Handle ) ;
502502 }
503503 }
504504 }
505505
506506 private void WindowMinMax ( object sender , SysCommandEventArgs e )
507507 {
508- var window = _windows . FirstOrDefault ( w => w . Handle == e . WParam ) ;
508+ var window = _windows . TryGetValue ( e . WParam , out var win ) ? win : null ;
509509 if ( window != null )
510510 {
511511 if ( e . LParam . ToInt64 ( ) == SW_MAXIMIZE )
@@ -533,7 +533,7 @@ private void WindowMinMax(object sender, SysCommandEventArgs e)
533533
534534 private void WindowMoveSize ( object sender , WindowEventArgs e )
535535 {
536- var window = _windows . FirstOrDefault ( w => w . Handle == e . Handle ) ;
536+ var window = _windows . TryGetValue ( e . Handle , out var win ) ? win : null ;
537537 window ? . SaveDefaultSizePosition ( ) ;
538538 }
539539
@@ -548,8 +548,8 @@ private void WindowKeyboardEvent(object sender, BasicHookEventArgs e)
548548 var shiftKey = Convert . ToBoolean ( shiftState ) ;
549549 if ( controlKey && shiftKey )
550550 {
551- IntPtr handle = GetForegroundWindow ( ) ;
552- Window window = _windows . FirstOrDefault ( w => w . Handle == handle ) ;
551+ var handle = GetForegroundWindow ( ) ;
552+ var window = _windows . TryGetValue ( handle , out var win ) ? win : null ;
553553 window ? . MinimizeToSystemTray ( ) ;
554554 }
555555 }
@@ -568,7 +568,7 @@ private void SysCommand(object sender, SysCommandEventArgs e)
568568 var message = e . Message . ToInt64 ( ) ;
569569 if ( message == WM_SYSCOMMAND )
570570 {
571- var window = _windows . FirstOrDefault ( w => w . Handle == e . Handle ) ;
571+ var window = _windows . TryGetValue ( e . Handle , out var win ) ? win : null ;
572572 if ( window != null )
573573 {
574574 var lowOrder = e . WParam . ToInt64 ( ) & 0x0000FFFF ;
@@ -1257,17 +1257,17 @@ private void ShowDimWindows()
12571257 Left = screen . Bounds . Left ,
12581258 Top = screen . Bounds . Top
12591259 } ;
1260- dimForm . Click += DimForm_Click ;
1261- dimForm . DoubleClick += DimForm_Click ;
1262- dimForm . MouseClick += DimForm_Click ;
1263- dimForm . MouseDoubleClick += DimForm_Click ;
1260+ dimForm . Click += DimFormClick ;
1261+ dimForm . DoubleClick += DimFormClick ;
1262+ dimForm . MouseClick += DimFormClick ;
1263+ dimForm . MouseDoubleClick += DimFormClick ;
12641264 dimForm . Show ( ) ;
12651265 _dimForms . Add ( dimForm ) ;
12661266 }
12671267 }
12681268 }
12691269
1270- private void DimForm_Click ( object sender , EventArgs e )
1270+ private void DimFormClick ( object sender , EventArgs e )
12711271 {
12721272 if ( _dimHandle != IntPtr . Zero )
12731273 {
0 commit comments