Вход/Регистрация
Программирование КПК и смартфонов на .NET Compact Framework
вернуться

Климов Александр Петрович

Шрифт:

Рис. 7.6. Команды меню для правой кнопки

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

При активации основной формы

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

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

Для активации запущенного приложения вызывается функция 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 {

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

  • Читать дальше
  • 1
  • ...
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: