private void GetValidWindows(object s) { // Get valid running windows var windows = SystemWindow.AllToplevelWindows.Where ( w => w.Visible && // Must be a visible windows w.Title != "" && // Must have a window title IsProcessAccessible(w.Process) && Path.GetDirectoryName(w.Process.ProcessName) != Process.GetCurrentProcess().ProcessName && // Must not be a GestureSign window (w.ExtendedStyle & WindowExStyleFlags.TOOLWINDOW) != WindowExStyleFlags.TOOLWINDOW // Must not be a tool window ); Thread.Sleep(400); foreach (SystemWindow sWind in windows) { var icon = Imaging.CreateBitmapSourceFromHIcon(sWind.Icon.Handle, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); icon.Freeze(); ApplicationListViewItem lItem = new ApplicationListViewItem { WindowClass = sWind.ClassName, WindowTitle = sWind.Title, WindowFilename = Path.GetFileName(sWind.Process.MainModule.FileName), ApplicationIcon = icon }; //lItem.ApplicationName = sWind.Process.MainModule.FileVersionInfo.FileDescription; this.lstRunningApplications.Dispatcher.BeginInvoke(new Action(() => { this.lstRunningApplications.Items.Add(lItem); })); } }