Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
С/С++ - Как получить список всех хендлов системы |

15.10.2009, 19:09
|
|
Участник форума
Регистрация: 10.10.2009
Сообщений: 133
Провел на форуме: 143706
Репутация:
-1
|
|
С/С++ - Как получить список всех хендлов системы
Необходим работающий пример
|
|
|

15.10.2009, 21:25
|
|
Участник форума
Регистрация: 26.08.2009
Сообщений: 133
Провел на форуме: 193434
Репутация:
79
|
|
PHP код:
#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(SystemHandleInformation, shiHandleInfo, dwLen, &dwLen) == STATUS_SUCCESS)
return shiHandleInfo;
else
return NULL;
}
както так )
|
|
|

15.10.2009, 21:56
|
|
Участник форума
Регистрация: 10.10.2009
Сообщений: 133
Провел на форуме: 143706
Репутация:
-1
|
|
Ухх..а список дочерних окон ? Если известен родительский дескриптор.
|
|
|

15.10.2009, 22:02
|
|
Участник форума
Регистрация: 10.10.2009
Сообщений: 133
Провел на форуме: 143706
Репутация:
-1
|
|
Не пойму,какие два параметра последних передавать
Ну,реально гемор:
int main () {
HWND s;
HWND s1;
s = FindWindow(NULL,"[qip] - 292514125");
s1 = FindWindowEx(s,NULL,
system("PAUSE");
}
Хотел в цикле прогнать список дочерних и вывести хендл каждого.
lpszClass – класс элемента управления;
lpszWindow – имя, если NULL тогда поиск всех элементов класса lpszClass.
Вообще БРЕД,какие ещё элементы... мне окна нужны,только и всего.
|
|
|

15.10.2009, 23:15
|
|
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме: 1354067
Репутация:
599
|
|
почитай чтоли книжки, чтобы не задавать настолько глупых вопросов. даже в мсдне вполне достаточно инфы по теме что такое классы, что такое элементы управления.
|
|
|

16.10.2009, 18:28
|
|
Постоянный
Регистрация: 20.03.2009
Сообщений: 564
Провел на форуме: 991929
Репутация:
395
|
|
2 GenTao мда... коректно задавай вопрос ) я тоже хотел скинуть пример с ZwQuerySystemInformation т.к хендлы системные это совсем другое понятие...
по теме... фтыкай http://msdn.microsoft.com/en-us/library/ms633497(VS.85).aspx
|
|
|

19.10.2009, 15:52
|
|
Статус пользователя:
Регистрация: 26.07.2005
Сообщений: 568
Провел на форуме: 1290766
Репутация:
1236
|
|
BOOL EnumChildWindows( HWND hWndParent,
WNDENUMPROC lpEnumFunc,
LPARAM lParam
);
мсдн смотри
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|