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);
               }));
            }
        }