Advertisement
desdemona

task manager code

Nov 13th, 2014
554
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 9.51 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Windows;
  7. using System.Windows.Controls;
  8. using System.Windows.Data;
  9. using System.Windows.Documents;
  10. using System.Windows.Input;
  11. using System.Windows.Media;
  12. using System.Windows.Media.Imaging;
  13. using System.Windows.Navigation;
  14. using System.Windows.Shapes;
  15. using System.Diagnostics;
  16. using System.Collections;
  17.  
  18. namespace task_manager
  19. {
  20.     /// <summary>
  21.     /// Interaction logic for MainWindow.xaml
  22.     /// </summary>
  23.     public partial class MainWindow : Window
  24.     {
  25.         //Process[] currentProcesses;
  26.         //List<Proc> currentProcessesList;
  27.         Proc selected;
  28.         List<int> respawnList;
  29.         SortedDictionary<int,Proc> currentProcessesDict;
  30.  
  31.         public MainWindow()
  32.         {
  33.             InitializeComponent();
  34.             //currentProcessesList = new List<Proc>();
  35.             respawnList = new List<int>();
  36.             currentProcessesDict = new SortedDictionary<int, Proc>();
  37.             Master.SelectionChanged += Master_SelectionChanged;
  38.             Master.ItemsSource = currentProcessesDict;
  39.             priorotyBox.ItemsSource = Enum.GetValues(typeof(System.Diagnostics.ProcessPriorityClass));
  40.             respawnCheckbox.Click += Respawn_Checkbox;
  41.             Button_Refresh(this, null);
  42.            
  43.            
  44.         }
  45.  
  46.         private void Button_Refresh(object sender, RoutedEventArgs e)
  47.         {
  48.             //Master.Items.Clear();
  49.             //currentProcessesList.Clear();
  50.             currentProcessesDict.Clear();
  51.             //Master.SetBinding( System.Diagnostics.Process.GetProcesses());
  52.             //Debug.WriteLine(typeof(System.Diagnostics.Process.GetProcesses()));
  53.  
  54.             foreach (var proc in System.Diagnostics.Process.GetProcesses())
  55.             {
  56.                 Proc pr = new Proc();
  57.                
  58.                 pr.name = proc.ProcessName;
  59.                 pr.id = proc.Id;
  60.                 pr.respawn = false;
  61.                 if(respawnList.Contains(pr.id))
  62.                 { pr.respawn = true; }
  63.                 //currentProcessesList.Add(pr);
  64.                 currentProcessesDict.Add(pr.id, pr);
  65.             }
  66.             List<int> toRemove = new List<int>();
  67.             foreach(int procId in respawnList)
  68.             {
  69.                 if (!(currentProcessesDict.ContainsKey(procId)))
  70.                 { toRemove.Add(procId); }
  71.             }
  72.             foreach (int procId in toRemove)
  73.             { respawnList.Remove(procId); }
  74.             //"{Binding ElementName=Master, Path=SelectedItem, Mode=OneWay, NotifyOnTargetUpdated=True, Converter={StaticResource PonyConverter}}"
  75.            
  76.             //selected = currentProcessesList[0];
  77.             //refreshDetails();
  78.         }
  79.  
  80.         private void Master_SelectionChanged(object sender, RoutedEventArgs e)
  81.         {
  82.             selected = ((KeyValuePair<int,Proc>)Master.SelectedItem).Value;
  83.             refreshDetails();
  84.         }
  85.  
  86.         private void refreshDetails()
  87.         {
  88.             nameLabel.Content = selected.ToString();
  89.             idLabel.Content = selected.id;
  90.             respawnCheckbox.IsChecked = selected.respawn;
  91.             try
  92.             {
  93.                 Process procSelected = System.Diagnostics.Process.GetProcessById(selected.id);
  94.                 //nameLabel.Content = selected.ProcessName + " id= " + selected.Id;
  95.                 priorityLabel.Content = procSelected.PriorityClass;
  96.                 //Debug.WriteLine("");
  97.                 //Debug.WriteLine(procSelected.ProcessName);
  98.                 //foreach (var si in procSelected.StartInfo.Arguments)
  99.                 //{
  100.                 //    Debug.WriteLine(si);
  101.                 //}
  102.                 //foreach (DictionaryEntry ev in procSelected.StartInfo.EnvironmentVariables)
  103.                 //{
  104.                 //    Debug.WriteLine(ev.Key + ": "+ev.Value);
  105.                 //}
  106.                 //Debug.WriteLine(procSelected.StartInfo.WorkingDirectory);
  107.                 //Debug.WriteLine("verbs");
  108.                 //foreach (var item in procSelected.StartInfo.Verbs)
  109.                 //{
  110.                 //    Debug.WriteLine(item);
  111.                 //}
  112.                 baseLabel.Content = procSelected.BasePriority;
  113.                
  114.  
  115.                 List<String> threadsList = new List<string>();
  116.                 foreach (System.Diagnostics.ProcessThread t in procSelected.Threads)
  117.                 { threadsList.Add("Thread id:" + t.Id + " state:" + t.ThreadState + " base priority:" + t.BasePriority + " current priority:"+t.CurrentPriority); }
  118.                 threadList.ItemsSource = threadsList;
  119.  
  120.                 List<String> modulesList = new List<string>();
  121.                 foreach (System.Diagnostics.ProcessModule m in procSelected.Modules)
  122.                 { modulesList.Add("Module name:"+m.ModuleName + " fileName:"+ m.FileName); }
  123.                 moduleList.ItemsSource = modulesList;
  124.                 //Debug.WriteLine(procSelected.PriorityClass.GetType().ToString());
  125.             }
  126.             catch (Exception ex)
  127.             {
  128.                 //MessageBox.Show("Could not read process details for "+selected.ToString() + "", "ERROR", MessageBoxButton.OK, MessageBoxImage.Error);
  129.                 threadList.ItemsSource = new List<string>();
  130.                 moduleList.ItemsSource = new List<string>();
  131.                 MessageBox.Show("Could not read process details for " + selected.ToString() + "\nReason: " + ex.Message.ToString(), "ERROR", MessageBoxButton.OK, MessageBoxImage.Error);
  132.  
  133.             }
  134.         }
  135.  
  136.         private void Kill_Click(object sender, RoutedEventArgs e)
  137.         {
  138.             Process procSelected;
  139.             String mainModuleFilename;
  140.             try
  141.             {
  142.                 procSelected = System.Diagnostics.Process.GetProcessById(selected.id);
  143.                 mainModuleFilename = procSelected.MainModule.FileName;
  144.                 procSelected.Kill();
  145.  
  146.             }
  147.             catch (Exception ex)
  148.             {
  149.                 MessageBox.Show("Could not kill process " + selected.ToString() + "\nReason: " + ex.Message.ToString(), "ERROR", MessageBoxButton.OK, MessageBoxImage.Error);
  150.                 return;
  151.             }
  152.             finally
  153.             { Button_Refresh(this, null); }
  154.             MessageBox.Show("Process " + selected.name + " killed succesfully", "GREAT SUCCESS!", MessageBoxButton.OK, MessageBoxImage.Information);
  155.             if (selected.respawn)
  156.             {
  157.                 try
  158.                 {
  159.                     //procSelected.Start(mainModuleFilename);
  160.                     Process.Start(mainModuleFilename);
  161.                 }
  162.                 catch (Exception ex)
  163.                 {
  164.                     MessageBox.Show("Could not respawn process " + selected.ToString() + "\nReason: " + ex.Message.ToString(), "ERROR", MessageBoxButton.OK, MessageBoxImage.Error);
  165.                     return;
  166.                 }
  167.                 MessageBox.Show("Process " + selected.name + " respawned succesfully", "GREAT SUCCESS!", MessageBoxButton.OK, MessageBoxImage.Information);
  168.             }
  169.         }
  170.  
  171.         private void Respawn_Checkbox(object sender, RoutedEventArgs e)
  172.         {
  173.             try
  174.             {
  175.                 Process procSelected = System.Diagnostics.Process.GetProcessById(selected.id);
  176.  
  177.             }
  178.             catch (Exception ex)
  179.             {
  180.                 MessageBox.Show("Process " + selected.name + " isn't running or access is denied", "ERROR", MessageBoxButton.OK, MessageBoxImage.Error);
  181.             }
  182.             currentProcessesDict[selected.id].respawn = (bool)respawnCheckbox.IsChecked;
  183.             if ((bool)respawnCheckbox.IsChecked)
  184.             {
  185.                 if (!(respawnList.Contains(selected.id)))
  186.                 {
  187.                     respawnList.Add(selected.id);
  188.                 }
  189.             }
  190.             else
  191.             {
  192.                 if (respawnList.Contains(selected.id))
  193.                 { respawnList.Remove(selected.id); }
  194.             }
  195.            
  196.             refreshDetails();
  197.         }
  198.  
  199.         private void Priority_Change_Click(object sender, RoutedEventArgs e)
  200.         {
  201.             System.Diagnostics.ProcessPriorityClass newPriorityClass;
  202.             if(priorotyBox.SelectedValue == null)
  203.             {
  204.                 MessageBox.Show("Select new prioroty first", "ERROR", MessageBoxButton.OK, MessageBoxImage.Error);
  205.                 return;
  206.             }
  207.             Enum.TryParse<System.Diagnostics.ProcessPriorityClass>(priorotyBox.SelectedValue.ToString(),out newPriorityClass);
  208.  
  209.             try
  210.             {
  211.                 Process procSelected = System.Diagnostics.Process.GetProcessById(selected.id);
  212.                 if ( procSelected.PriorityClass.Equals(newPriorityClass))
  213.                 {
  214.                     MessageBox.Show("Selected priority class is same as before", "ERROR", MessageBoxButton.OK, MessageBoxImage.Error);
  215.                     return;
  216.                 }
  217.                 procSelected.PriorityClass = newPriorityClass;
  218.             }
  219.             catch (Exception ex)
  220.             {
  221.                 MessageBox.Show("Could not change priority" + selected.ToString() + "\nReason: " + ex.Message.ToString(), "ERROR", MessageBoxButton.OK, MessageBoxImage.Error);
  222.             }
  223.         }
  224.     }
  225.  
  226.     public class Proc
  227.     {
  228.         public String name;
  229.         public int id;
  230.         public bool respawn;
  231.  
  232.         public override string ToString()
  233.         {
  234.             return name;
  235.         }
  236.     }
  237.  
  238. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement