Ассемблер для Windows


         

В Может ли приложение узнать какие программы в настоящее время запущены?



В. Может ли приложение узнать, какие программы в настоящее время запущены?

Да. В основу метода положено использование функции EnumWindows (т.е. пересчитать окна). Вот параметры этой функции.

  • 1-й параметр. Адрес процедуры, которая будет вызываться автоматически, если будет найдено окно.
  • 2-й параметр. Произвольное значение, которое будет передаваться в процедуру.
  • Сама вызываемая процедура получает два параметра: дескриптор найденного окна и определенный выше параметр. По известному дескриптору с помощью функции GetWindowThreadProcessId можно определить уникальный идентификатор процесса или потока, который владеет данным окном. Имея же идентификатор, мы можем, в частности, удалить данный процесс из памяти с помощью функции TerminateProcess (впрочем, будьте осторожнее).

    Ниже на Рисунок 3.5.4 представлен пример программы, выдающей список работающих процессов. Обратите внимание на использование функции GetWindowText, которая определяет текст заголовка окна. Не пугайтесь, что в списке будут представлены и те процессы, окна которых мы не видим. Окна, как известно, могут быть скрытыми. Заметьте, что в список попадают и консольные приложения. Программа определяет также уникальные идентификаторы процессов.

    // файл proc.rc // определение констант

    #define WS_SYSMENU 0x00080000L #define WS_MINIMIZEBOX 0x00020000L #define WS_VISIBLE 0x10000000L #define WS_TABSTOP 0x00010000L #define WS_VSCROLL 0x00200000L #define WS_HSCROLL 0x00100000L #define DS_3DLOOK 0x0004L #define LBS_NOTIFY 0x000lL #define LBS_SORT 0x0002L

    // идентификаторы #define LIST1 101

    // определение диалогового окна DIAL1 DIALOG 0, 0, 220, 110 STYLE WS_SYSMENU | WS_MINIMIZEBOX | DS_3DLOOK CAPTION "Поиск процессов" FONT 8, "Arial" { CONTROL "ListBox1", LIST1, "listbox", WS_VISIBLE | WS_TABSTOP | WS_VSCROLL | WS_HSCROLL | LBS_NOTIFY, 16, 16, 190, 75 }

    ; файл proc.inc ; константы ; значения, возвращаемые функцией GetDriveType ; значения 0 и 1 можно считать признаком отсутствия устройства



    Содержание  Назад  Вперед