Программирование для Windows NT (том 2)



Исходные тексты DLL-библиотеки DLLDEMO - часть 4


Функции обратного вызова EnumWindowsProc (имя функции может быть любым) передаются два параметра: идентификатор окна и 32-разрядное значение, которое передавалось функции EnumWindows в качестве второго параметра. В нашем случае это адрес заголовка искомого окна:

BOOL CALLBACK EnumWindowsProc(

  HWND   hwnd,   // идентификатор родительского окна

  LPARAM lParam) // адрес строки заголовка окна

{

  char szBuf[512];

  GetWindowText(hwnd, szBuf, 512);

  if(!strcmp((LPSTR)lParam, szBuf))

  {

    hwndFound = hwnd;

    return FALSE;

  }

  else

  {

    hwndFound = NULL;   

    return TRUE;

  }

}

После вызова функции EnumWindows функция EnumWindowsProc будет вызываться в цикле для окна вернего уровня каждого запущенного приложения.

Зная идентификатор окна (который передается функции EnumWindowsProc через первый параметр), мы с помощью функции GetWindowText получаем заголовок окна и записываем его в буфер szBuf. Затем этот заголовок сравнивается с заданным при помощи функции strcmp. Адрес заданного заголовка мы получаем через параметр lParam.

Функция обратного вызова, адрес которой указан в первом параметре функции EnumWindows, может вернуть значение FALSE или TRUE.

В первом случае цикл просмотра окон заканчивается и функция EnumWindows возвращает управление вызвавшему ее приложению. Во втором случае просмотр окон будет продолжен до тех пор, пока функции обратного вызова не будут переданы идентификаторы главных окон всех запущенных приложений.

Если окно найдено, функция обратного вызова записывает его идентификатор в глобальную переменную hwndFound и возвращает значение FALSE, после чего поиск продолжается. Если же заголовки не совпадают, в эту переменную записывается значение NULL, после чего для продолжения поиска функция EnumWindowsProc возвращает значение TRUE.

Несколько слов о настройке проекта DLL-библиотеки DLLDemo.DLL.

При создании проекта DLL-библиотеки “с нуля” вы должны указать тип рабочего пространства проекта (Project Workspace) как Dynamic-Link Library (рис. 3.5).




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