Перечисление всех открытых окон в системе


Данный пример показывает, как создать программу наподобие Spy++. Для этого нам понадобятся следующие
API функции:

BOOL EnumWindows(WNDENUMPROC lpEnumFunc, LPARAM lParam); - перечисляет все окна в системе:
lpEnumFunc – адрес функции:
BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam);
lParam – число которое передается в функцию.

int GetWindowText(HWND hWnd, LPTSTR lpString, int nMaxCount); - получение заголовка окна:
hWnd – хэндл окна;
lpString – буфер, куда будет помещен заголовок;
nMaxCount – максимальная длина буфера.

int GetClassName(HWND hWnd, LPTSTR lpClassName, int nMaxCount ); - получение имени класса окна:
hWnd - хэндл окна;
lpClassName – строка куда будет помещено имя класса;
nMaxCount - максимальная длина имени.

DWORD GetWindowThreadProcessId(HWND hWnd, LPDWORD lpdwProcessId); - возвращает индефикатор потока,
создавшего окно;

hWnd – хэндл окна;
lpdwProcessId – сюда возвращает индефикатор процесса, создавшего окно.

Теперь запускай VC++, создавай проект Win32 Console Application и напиши следующее:

#include <windows.h>
#include <iostream>
using namespace std;

BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam);

int main()
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_INTENSITY);
cout<<"Code by Lazy_elf"<<endl;
if(EnumWindows(&EnumWindowsProc,NULL))
{
cout<<"EnumWindows - ok"<<endl;
}
else{cout<<"Error EnumWindows..."<<endl;}
return 0;
}

BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam)
{
char szTextWin[255];DWORD dwPID = NULL;
if(GetWindowText(hwnd,szTextWin,sizeof(szTextWin)))
{
CharToOem(szTextWin,szTextWin);
cout<<szTextWin<<" --- CLASS: ";
szTextWin[0] = '\0';
if(GetClassName(hwnd,szTextWin,sizeof(szTextWin)))
{
cout<<szTextWin<<" - TID: "<<GetWindowThreadProcessId(hwnd,&dwPID);
cout<<" - PID:"<<dwPID<<endl;
}
}
else
{
cout<<"no text"<<" --- CLASS: ";
szTextWin[0] = '\0';
if(GetClassName(hwnd,szTextWin,sizeof(szTextWin)))
{
cout<<szTextWin<<" - TID: "<<GetWindowThreadProcessId(hwnd,&dwPID);
cout<<" - PID:"<<dwPID<<endl;
}
}
szTextWin[0] = '\0';
return TRUE;
}
 
« Предыдущая статья   Следующая статья »