Книга: Программирование КПК и смартфонов на .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, с помощью которых можно получить список всех открытых окон. Все обнаруженные окна добавляются в список, если они удовлетворяют некоторым условиям. Добавляемые окна не должны иметь родительских окон, они должны быть видимыми и иметь заголовок. При этом сам Диспетчер задач не должен попасть в этот список. Все остальные окна записываются в массив.
- Текстовые форматы и кодировки, или Почему иногда вместо текста я вижу абракадабру?
- 1.6.14. Правило генерации: избегайте кодирования вручную; если есть возможность, пишите программы для создания программ
- 2.1.5. Коды завершения программы
- Листинг 5.4. Код программы нахождения простых чисел, предназначенный для выполнения фоновым потоком
- 12.1. Программы с открытым кодом
- 5.11. ПРИМЕР ПРИМЕНЕНИЯ ПРОЕКТНОЙ ПРОЦЕДУРЫ ДЛЯ КОДИРОВАНИЯ ПРОГРАММЫ ПЕЧАТИ КАЛЕНДАРЯ НА ПРИНТЕРЕ
- Листинг 5.4. Код программы нахождения простых чисел, предназначенный для выполнения фоновым потоком
- Код C# для оставшейся части программы
- Внутреннее представление программы и генерация кода
- 8.2. Языки программирования Виды программирований
- Переработка
- 1.4. Динамические аспекты Ruby