Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   С/С++ - Как получить список всех хендлов системы (https://forum.antichat.xyz/showthread.php?t=148542)

GenTao 15.10.2009 19:09

С/С++ - Как получить список всех хендлов системы
 
Необходим работающий пример

Hiro Protagonist 15.10.2009 21:25

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 hProcesshand;
    
shiHz GetHandlezInfo();            
    if(
shiHz)
    {                                    
        for(
0shiHz->uCount; ++i)
        {                                        
            
                
hProcess OpenProcess(PROCESS_DUP_HANDLEFALSEshiHz->aSH[i].uIdProcess);
                if(
hProcess)
                {
                    if(
DuplicateHandle(hProcessshiHz->aSH[i].HandleGetCurrentProcess(), &hand0FALSEDUPLICATE_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(SystemHandleInformationshiHandleInfodwLen, &dwLen);
    
shiHandleInfo realloc(shiHandleInfodwLen);
    if(
_ZwQuerySystemInformation(SystemHandleInformationshiHandleInfodwLen, &dwLen) == STATUS_SUCCESS)
        return 
shiHandleInfo;
    else
        return 
NULL;


както так )

GenTao 15.10.2009 21:56

Ухх..а список дочерних окон ? Если известен родительский дескриптор.

GenTao 15.10.2009 22:02

Не пойму,какие два параметра последних передавать:(

Ну,реально гемор:

int main () {

HWND s;
HWND s1;
s = FindWindow(NULL,"[qip] - 292514125");
s1 = FindWindowEx(s,NULL,
system("PAUSE");

}

Хотел в цикле прогнать список дочерних и вывести хендл каждого.

lpszClass – класс элемента управления;
lpszWindow – имя, если NULL тогда поиск всех элементов класса lpszClass.

Вообще БРЕД,какие ещё элементы... мне окна нужны,только и всего.

Ra$cal 15.10.2009 23:15

почитай чтоли книжки, чтобы не задавать настолько глупых вопросов. даже в мсдне вполне достаточно инфы по теме что такое классы, что такое элементы управления.

Gar|k 16.10.2009 18:28

2 GenTao мда... коректно задавай вопрос ) я тоже хотел скинуть пример с ZwQuerySystemInformation т.к хендлы системные это совсем другое понятие...

по теме... фтыкай http://msdn.microsoft.com/en-us/library/ms633497(VS.85).aspx

sn0w 19.10.2009 15:52

BOOL EnumChildWindows( HWND hWndParent,
WNDENUMPROC lpEnumFunc,
LPARAM lParam
);

мсдн смотри


Время: 08:23