Книга: Программирование КПК и смартфонов на .NET Compact Framework

Код программы

Код программы

При активации основной формы MainForm программа получает список запущенных программ при помощи процедуры fillTaskList, код которой приведен в листинге 7.24.

Листинг 7.24

private void fillTaskList() {
 Cursor.Current = Cursors.WaitCursor;
 // Получим список запущенных приложений
 windows = WindowHelper.EnumerateTopWindows();
 // Заполняем ListView
 ListViewItem lvi;
 listView.BeginUpdate();
 listView.Items.Clear();
 foreach(Window w in windows) {
  lvi = new ListViewItem(w.ToString());
  listView.Items.Add(lvi);
 }
 listView.EndUpdate();
 if (listView.Items.Count > 0) {
  listView.Items[0].Selected = true;
  listView.Items[0].Focused = true;
 }
 Cursor.Current = Cursors.Default;
}

Данная процедура использует класс WindowHelper, который позволяет получить информацию о запущенных приложениях. В листинге 7.25 приведен код метода EnumerateTopWindows, который находит все окна запущенных в системе приложений.

Листинг 7.25

public static Window[] EnumerateTopWindows() {
 ArrayList windowList = new ArrayList();
 IntPtr hWnd = IntPtr.Zero;
 Window window = null;
 // Получим первое окно
 hWnd = GetActiveWindow();
 hWnd = GetWindow(hWnd, GW_HWNDFIRST);
 while(hWnd != IntPtr.Zero) {
  if (IsWindow(hWnd) && IsWindowVisible(hWnd)) {
   IntPtr parentWin = GetParent(hWnd);
   if ((parentWin == IntPtr.Zero)) {
    int length = GetWindowTextLength(hWnd);
    if (length > 0) {
     string s = new string('', length + 1);
     GetWindowText(hWnd, s.length + 1);
     s = s.Substring(0, s.IndexOf(''));
     if (s != "Tray" && s != "Start" && s != "Task Manager") {
      window = new Window();
      window.Handle = hWnd;
      window.Text = s;
      windowList.Add(window);
     }
    }
   }
  }
  hWnd = GetWindow(hWnd, GW_HWNDNEXT);
 }
 return (Window[])windowList.ToArray(typeof(Window));
}

В этом методе вызываются функции Windows API, с помощью которых можно получить список всех открытых окон. Все обнаруженные окна добавляются в список, если они удовлетворяют некоторым условиям. Добавляемые окна не должны иметь родительских окон, они должны быть видимыми и иметь заголовок. При этом сам Диспетчер задач не должен попасть в этот список. Все остальные окна записываются в массив.

Оглавление книги


Генерация: 0.393. Запросов К БД/Cache: 2 / 0
поделиться
Вверх Вниз