@@ -53,7 +53,7 @@ public class ApplicationWatcher
53
53
54
54
private AsyncCollection < object > appQueue ;
55
55
56
- private List < WindowData > activeWindows ;
56
+ private Dictionary < IntPtr , WindowData > activeWindows ;
57
57
private DateTime prevTimeApp ;
58
58
59
59
public event EventHandler < ApplicationEventArgs > OnApplicationWindowChange ;
@@ -74,7 +74,7 @@ public void Start()
74
74
{
75
75
if ( ! isRunning )
76
76
{
77
- activeWindows = new List < WindowData > { } ;
77
+ activeWindows = new Dictionary < IntPtr , WindowData > ( ) ;
78
78
prevTimeApp = DateTime . Now ;
79
79
80
80
appQueue = new AsyncCollection < object > ( ) ;
@@ -206,7 +206,7 @@ private async Task AppConsumer()
206
206
private void WindowCreated ( WindowData wnd )
207
207
{
208
208
209
- activeWindows . Add ( wnd ) ;
209
+ activeWindows . Add ( wnd . HWnd , wnd ) ;
210
210
ApplicationStatus ( wnd , ApplicationEvents . Launched ) ;
211
211
212
212
lastEventWasLaunched = true ;
@@ -215,19 +215,19 @@ private void WindowCreated(WindowData wnd)
215
215
}
216
216
217
217
/// <summary>
218
- /// invoke user call back
218
+ /// Add window handle to active windows collection
219
219
/// </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 )
223
222
{
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 ;
231
231
}
232
232
233
233
/// <summary>
@@ -236,26 +236,31 @@ private void ApplicationStatus(WindowData wnd, ApplicationEvents appEvent)
236
236
/// <param name="wnd"></param>
237
237
private void WindowDestroyed ( WindowData wnd )
238
238
{
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
+
241
245
lastEventWasLaunched = false ;
242
246
}
243
247
248
+
249
+
244
250
/// <summary>
245
- /// Add window handle to active windows collection
251
+ /// invoke user call back
246
252
/// </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 )
249
256
{
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 ) ;
259
262
263
+ OnApplicationWindowChange ? . Invoke ( null , new ApplicationEventArgs ( ) { ApplicationData = wnd , Event = appEvent } ) ;
264
+ }
260
265
}
261
266
}
0 commit comments