С/С++ - Как получить список всех хендлов системы

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by GenTao, 15 Oct 2009.

  1. GenTao

    GenTao New Member

    Joined:
    10 Oct 2009
    Messages:
    123
    Likes Received:
    2
    Reputations:
    -3
    Необходим работающий пример
     
  2. Hiro Protagonist

    Joined:
    26 Aug 2009
    Messages:
    132
    Likes Received:
    24
    Reputations:
    -2
    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;
    }

    както так )
     
  3. GenTao

    GenTao New Member

    Joined:
    10 Oct 2009
    Messages:
    123
    Likes Received:
    2
    Reputations:
    -3
    Ухх..а список дочерних окон ? Если известен родительский дескриптор.
     
  4. GenTao

    GenTao New Member

    Joined:
    10 Oct 2009
    Messages:
    123
    Likes Received:
    2
    Reputations:
    -3
    Не пойму,какие два параметра последних передавать:(

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

    int main () {

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

    }

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

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

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

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    почитай чтоли книжки, чтобы не задавать настолько глупых вопросов. даже в мсдне вполне достаточно инфы по теме что такое классы, что такое элементы управления.
     
  6. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    2 GenTao мда... коректно задавай вопрос ) я тоже хотел скинуть пример с ZwQuerySystemInformation т.к хендлы системные это совсем другое понятие...

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

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,021
    Likes Received:
    1,200
    Reputations:
    327
    BOOL EnumChildWindows( HWND hWndParent,
    WNDENUMPROC lpEnumFunc,
    LPARAM lParam
    );

    мсдн смотри