Перечисление окон

Тема в разделе "WASM.WIN32", создана пользователем random, 21 окт 2011.

  1. random

    random New Member

    Публикаций:
    0
    Регистрация:
    10 янв 2008
    Сообщения:
    38
    Мне нужно получить количество окон проводника, исрользую код
    Код (Text):
    1. ctl32.lib")
    2.  
    3. int childWindows = 0;
    4.  
    5. BOOL CALLBACK EnumChildWindowsProc(HWND hwnd, LPARAM lParam)
    6. {
    7.  
    8.     CHAR lpClassName[15];
    9.     GetClassName(hwnd, lpClassName, 15);
    10.        
    11.     if(strcmp(lpClassName, "SysListView32") == 0)
    12.     {
    13.         childWindows++;
    14.      }
    15.  
    16.     return TRUE;
    17.  }
    18.  
    19.  
    20. BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
    21. {
    22.  
    23.     CHAR lpClassName[15];
    24.     GetClassName(hwnd, lpClassName, 15);
    25.     if ((strcmp(lpClassName, "ExploreWClass") == 0)||(strcmp(lpClassName, "CabinetWClass") == 0))
    26.         EnumChildWindows(hwnd, EnumChildWindowsProc, lParam);
    27.     return TRUE;
    28. }
    29.  
    30.  
    31. int APIENTRY WinMain(HINSTANCE hInstance,
    32.                      HINSTANCE hPrevInstance,
    33.                      LPTSTR    lpCmdLine,
    34.                      int       nCmdShow)
    35. {
    36.  
    37.  
    38.         //Enumerate all desktop windows (Top level)
    39.         EnumWindows(EnumWindowsProc, 0);
    40.         char buff[256];
    41.         wsprintf(buff,"Number=%lu",childWindows);
    42.         MessageBox(NULL,buff,"Number windows",MB_OK);
    43.  
    44.  
    45.     return 0;
    46. }
    Количество упрямо 0. Не понимаю,где мог ошибиться.
     
  2. random

    random New Member

    Публикаций:
    0
    Регистрация:
    10 янв 2008
    Сообщения:
    38
    Не надо, каждый сам себе баран....
     
  3. paralvic

    paralvic Пархоменко Александр Викторович

    Публикаций:
    0
    Регистрация:
    20 ноя 2010
    Сообщения:
    294
    Адрес:
    Нижний Новгород
    1.
    Код (Text):
    1. //Исправьте на
    2. if ((strcmp(lpClassName, "ExploreWClass") == 0)||(strcmp(lpClassName, "CabinetWClass") == 0)){
    3.         EnumChildWindows(hwnd, EnumChildWindowsProc, lParam);
    4.     return FALSE; // Если нашли окно не надо продолжать искать
    5. }
    Код (Text):
    1.  // очень хочется верить, что lpClassName именно указатель достаточного размера
    2.     GetClassName(hwnd, lpClassName, 15);
    3.  
    4. // например так, (Юникода у вас не нашел)
    5.         char lpClassName[15];
    6.         GetClassName(hwnd, (LPSTR) &lpClassName, 15);
     
  4. paralvic

    paralvic Пархоменко Александр Викторович

    Публикаций:
    0
    Регистрация:
    20 ноя 2010
    Сообщения:
    294
    Адрес:
    Нижний Новгород
    указатель [на буфер] достаточного размера