@@ -53,7 +53,7 @@ public class ApplicationWatcher
5353
5454 private AsyncCollection < object > appQueue ;
5555
56- private List < WindowData > activeWindows ;
56+ private Dictionary < IntPtr , WindowData > activeWindows ;
5757 private DateTime prevTimeApp ;
5858
5959 public event EventHandler < ApplicationEventArgs > OnApplicationWindowChange ;
@@ -74,7 +74,7 @@ public void Start()
7474 {
7575 if ( ! isRunning )
7676 {
77- activeWindows = new List < WindowData > { } ;
77+ activeWindows = new Dictionary < IntPtr , WindowData > ( ) ;
7878 prevTimeApp = DateTime . Now ;
7979
8080 appQueue = new AsyncCollection < object > ( ) ;
@@ -206,7 +206,7 @@ private async Task AppConsumer()
206206 private void WindowCreated ( WindowData wnd )
207207 {
208208
209- activeWindows . Add ( wnd ) ;
209+ activeWindows . Add ( wnd . HWnd , wnd ) ;
210210 ApplicationStatus ( wnd , ApplicationEvents . Launched ) ;
211211
212212 lastEventWasLaunched = true ;
@@ -215,19 +215,19 @@ private void WindowCreated(WindowData wnd)
215215 }
216216
217217 /// <summary>
218- /// invoke user call back
218+ /// Add window handle to active windows collection
219219 /// </summary>
220- /// <param name="wnd"></param>
221- /// <param name="appEvent"></param>
222- private void ApplicationStatus ( WindowData wnd , ApplicationEvents appEvent )
220+ private bool lastEventWasLaunched ;
221+ private void WindowActivated ( WindowData wnd )
223222 {
224- var timeStamp = DateTime . Now ;
225-
226- wnd . AppTitle = appEvent == ApplicationEvents . Closed ? wnd . AppTitle : WindowHelper . GetWindowText ( wnd . HWnd ) ;
227- wnd . AppPath = appEvent == ApplicationEvents . Closed ? wnd . AppPath : WindowHelper . GetAppPath ( wnd . HWnd ) ;
228- wnd . AppName = appEvent == ApplicationEvents . Closed ? wnd . AppName : WindowHelper . GetAppDescription ( wnd . AppPath ) ;
229-
230- OnApplicationWindowChange ? . Invoke ( null , new ApplicationEventArgs ( ) { ApplicationData = wnd , Event = appEvent } ) ;
223+ if ( activeWindows . ContainsKey ( wnd . HWnd ) )
224+ {
225+ if ( ! lastEventWasLaunched && lastHwndLaunched != wnd . HWnd )
226+ {
227+ ApplicationStatus ( activeWindows [ wnd . HWnd ] , ApplicationEvents . Activated ) ;
228+ }
229+ }
230+ lastEventWasLaunched = false ;
231231 }
232232
233233 /// <summary>
@@ -236,26 +236,31 @@ private void ApplicationStatus(WindowData wnd, ApplicationEvents appEvent)
236236 /// <param name="wnd"></param>
237237 private void WindowDestroyed ( WindowData wnd )
238238 {
239- ApplicationStatus ( activeWindows . FirstOrDefault ( x => x . HWnd == wnd . HWnd ) ?? wnd , ApplicationEvents . Closed ) ;
240- activeWindows . RemoveAll ( x => x . HWnd == wnd . HWnd ) ;
239+ if ( activeWindows . ContainsKey ( wnd . HWnd ) )
240+ {
241+ ApplicationStatus ( activeWindows [ wnd . HWnd ] , ApplicationEvents . Closed ) ;
242+ activeWindows . Remove ( wnd . HWnd ) ;
243+ }
244+
241245 lastEventWasLaunched = false ;
242246 }
243247
248+
249+
244250 /// <summary>
245- /// Add window handle to active windows collection
251+ /// invoke user call back
246252 /// </summary>
247- private bool lastEventWasLaunched ;
248- private void WindowActivated ( WindowData wnd )
253+ /// <param name="wnd"></param>
254+ /// <param name="appEvent"></param>
255+ private void ApplicationStatus ( WindowData wnd , ApplicationEvents appEvent )
249256 {
250- if ( activeWindows . Any ( x => x . HWnd == wnd . HWnd ) )
251- {
252- if ( ( ! lastEventWasLaunched ) && lastHwndLaunched != wnd . HWnd )
253- {
254- ApplicationStatus ( activeWindows . First ( x => x . HWnd == wnd . HWnd ) , ApplicationEvents . Activated ) ;
255- }
256- }
257- lastEventWasLaunched = false ;
258- }
257+ var timeStamp = DateTime . Now ;
258+
259+ wnd . AppTitle = appEvent == ApplicationEvents . Closed ? wnd . AppTitle : WindowHelper . GetWindowText ( wnd . HWnd ) ;
260+ wnd . AppPath = appEvent == ApplicationEvents . Closed ? wnd . AppPath : WindowHelper . GetAppPath ( wnd . HWnd ) ;
261+ wnd . AppName = appEvent == ApplicationEvents . Closed ? wnd . AppName : WindowHelper . GetAppDescription ( wnd . AppPath ) ;
259262
263+ OnApplicationWindowChange ? . Invoke ( null , new ApplicationEventArgs ( ) { ApplicationData = wnd , Event = appEvent } ) ;
264+ }
260265 }
261266}
0 commit comments