Читаем Программирование КПК и смартфонов на .NET Compact Framework полностью

     string s = new string('\0', length + 1);

     GetWindowText(hWnd, s.length + 1);

     s = s.Substring(0, s.IndexOf('\0'));

     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, с помощью которых можно получить список всех открытых окон. Все обнаруженные окна добавляются в список, если они удовлетворяют некоторым условиям. Добавляемые окна не должны иметь родительских окон, они должны быть видимыми и иметь заголовок. При этом сам Диспетчер задач не должен попасть в этот список. Все остальные окна записываются в массив.

<p>Активация и закрытие приложения</p>

Для активации запущенного приложения вызывается функция Windows API SetForegroundWindow, которая использует дескриптор окна. Для закрытия приложения используется функция SendMessage с соответствующим сообщением закрытия WM_CLOSE. Для закрытия сразу всех окон можно использовать функцию Windows API SHCloseApps, которая закрывает все запущенные программы, кроме самого Диспетчера задач. Код, выполняющий эти действия, приведен в листинге 7.26.

Листинг 7.26

public static void ActivateWindow(IntPtr hWnd) {

 // Активируем приложение

 SetForegroundWindow(hWnd);

}

public static void CloseWindow(IntPtr hWnd) {

 // Закрываем приложение

 SendMessage(hWnd, WM_CLOSE, 0, 0);

}

public static void CloseApps() {

 // Закрываем все приложения

 SHCloseApps(int.MaxValue);

}

<p>Перечисление процессов</p>

Для отображения списка процессов используется функция, код которой приведен в листинге 7.27.

Листинг 7.27

private void fillProcessList() {

 Cursor.Current = Cursors.WaitCursor;

 // Получаем список запущенных процессов

 processes = Process.GetProcesses();

 // Заполняем ListView

 ListViewItem lvi;

 listView.BeginUpdate();

 listView.Items.Clear();

 foreach (Process p in processes) {

  lvi = new ListViewItem(p.ProcessName);

  //lvi.SubItems.Add("ID");

  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;

}

Список активных процессов извлекается при помощи класса Process. Основой класса является метод GetProcesses, приведенный в листинге 7.28.

Листинг 7.28

public static Process[] GetProcesses() {

 ArrayList procList = new ArrayList();

 IntPtr handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

 if ((int)handle > 0) {

  try {

   PROCESSENTRY32 peCurrent;

   PROCESSENTRY32 pe32 = new PROCESSENTRY32();

   byte[] peBytes = pe32.ToByteArray();

   int retval = Process32First(handle, peBytes);

   while(retval == 1) {

    peCurrent = new PROCESSENTRY32(peBytes);

    Process proc =

     new Process(new IntPtr((int)peCurrent.PID), peCurrent.Name,

     (int)peCurrent.ThreadCount, (int)peCurrent.BaseAddress);

     procList.Add(proc);

    retval = Process32Next(handle, peBytes);

   }

  } catch(Exception ex) {

   throw new Exception("Exception: " + ex.Message);

  }

  CloseToolhelp32Snapshot(handle);

  return (Process[])procList.ToArray(typeof(Process));

 } else {

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных