Просмотр полной версии : С/С++ - Как получить список всех хендлов системы
Необходим работающий пример
Hiro Protagonist
15.10.2009, 21:25
#undef UNICODE
#undef _UNICODE
#include <windows.h>
#include <stdio.h>
#include "ntdll.h" //в сети найдешь.
#define MAX_PATH 1000
SYSTEM_HANDLE_INFORMATION *GetHandlezInfo(void);
void main(void)
{
SYSTEM_HANDLE_INFORMATION *shiHz;
int i;
HANDLE hProcess, hand;
shiHz = GetHandlezInfo();
if(shiHz)
{
for(i = 0; i < shiHz->uCount; ++i)
{
hProcess = OpenProcess(PROCESS_DUP_HANDLE, FALSE, shiHz->aSH[i].uIdProcess);
if(hProcess)
{
if(DuplicateHandle(hProcess, shiHz->aSH[i].Handle, GetCurrentProcess(), &hand, 0, FALSE, DUPLICATE_SAME_ACCESS))
{
printf("%d\n", hand);
}
CloseHandle(hProcess);
}
}
free(shiHz);
}
getch();
return;
}
SYSTEM_HANDLE_INFORMATION *GetHandlezInfo(void)
{
HMODULE hNtDll;
SYSTEM_HANDLE_INFORMATION *shiHandleInfo = NULL;
//Размер структуры с одним хэндлом (16 - размер структуры описывающий хэндл)
DWORD dwLen = sizeof(SYSTEM_HANDLE_INFORMATION) + 16;
DWORD dwRetLen;
hNtDll = GetModuleHandle("ntdll.dll");
_ZwQuerySystemInformation = GetProcAddress(hNtDll, "ZwQuerySystemInformation");
//Этот класс требует для возврата необходимого размера, чтобы ему передалась структура по размеру готовая вместить
//один или более хэндлов
shiHandleInfo = malloc(dwLen);
_ZwQuerySystemInformation(SystemHandleInformation, shiHandleInfo, dwLen, &dwLen);
shiHandleInfo = realloc(shiHandleInfo, dwLen);
if(_ZwQuerySystemInformation(SystemHandleInformati on, shiHandleInfo, dwLen, &dwLen) == STATUS_SUCCESS)
return shiHandleInfo;
else
return NULL;
}
както так )
Ухх..а список дочерних окон ? Если известен родительский дескриптор.
Не пойму,какие два параметра последних передавать:(
Ну,реально гемор:
int main () {
HWND s;
HWND s1;
s = FindWindow(NULL,"[qip] - 292514125");
s1 = FindWindowEx(s,NULL,
system("PAUSE");
}
Хотел в цикле прогнать список дочерних и вывести хендл каждого.
lpszClass – класс элемента управления;
lpszWindow – имя, если NULL тогда поиск всех элементов класса lpszClass.
Вообще БРЕД,какие ещё элементы... мне окна нужны,только и всего.
почитай чтоли книжки, чтобы не задавать настолько глупых вопросов. даже в мсдне вполне достаточно инфы по теме что такое классы, что такое элементы управления.
2 GenTao мда... коректно задавай вопрос ) я тоже хотел скинуть пример с ZwQuerySystemInformation т.к хендлы системные это совсем другое понятие...
по теме... фтыкай http://msdn.microsoft.com/en-us/library/ms633497(VS.85).aspx
BOOL EnumChildWindows( HWND hWndParent,
WNDENUMPROC lpEnumFunc,
LPARAM lParam
);
мсдн смотри
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot