Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.59/56: Рейтинг темы: голосов - 56, средняя оценка - 4.59
 Аватар для BOR1K
14 / 14 / 3
Регистрация: 19.09.2009
Сообщений: 289

Handle Дочернего окна.

03.03.2010, 14:36. Показов 10922. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите найти хэндл дочернего окна через WinAPI. Хэндл родительского нашел. Известно имя и клас дочернего. EVRVideoHandler

Вот иерархия.
Миниатюры
Handle Дочернего окна.  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.03.2010, 14:36
Ответы с готовыми решениями:

Как получить снимок окна по Handle
Подскажите как проще всего на vc++ в консольном приложении получить скриншот окна по Handle и занести его в bitmap.

Получить handle окна по клику на нем курсором
Здравствуйте! Хочу написать программу аналогичную под линуксом. Программа предназначена для закрытия (зависших) приложений. Работа...

Изменить стиль окна, зная его handle?
Можно ли с помощью Winapi функций изменить стиль окна, зная handle этого окна? например послав сообщению окну

20
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
03.03.2010, 16:37
читаем http://www.firststeps.ru/mfc/winapi/
Синтаксис

HWND FindWindowEx
(
HWND hwndParent, // дескриптор родительского окна
HWND hwndChildAfter, // дескриптор дочернего окна
LPCTSTR lpszClass, // указатель имени класса
LPCTSTR lpszWindow // указатель имени окна
);

Параметры

hwndParent
Идентифицирует родительское окно, чьи дочерние окна должны быть найдены. Если hwndParent - ПУСТО (NULL), функция использует окно рабочего стола как родительское окно. Функция ищет среди окон, которые являются дочерними окнами рабочего стола.
hwndChildAfter
Идентифицирует дочернее окно. Поиск начинается со следующего дочернего окна в Z - последовательности. hwndChildAfter должен быть прямое дочернее окно hwndParent, а не простое порожденное окно. Если hwndChildAfter - ПУСТО (NULL), поиск начинается с первого дочернего окна определенного параметром hwndParent. Обратите внимание, что, если и hwndParent и hwndChildAfter - ПУСТО (NULL), функция ищет все окна верхнего уровня.
lpszClass
Указывает на строку с нулевым символом в конце, которая определяет имя класса или - атом, который идентифицирует строку имени класса. Если этот параметр - атом, он должен быть общий атом, созданный предыдущим вызовом к функции GlobalAddAtom. Атом, 16-разрядное значение, в котором должно быть размещено в младшей части слова - lpszClass; старшее слово должно быть нулевое.
lpszWindow
Указывает на строку с нулевым символом в конце, которая определяет имя окна (заголовок окна). Если этот параметр ПУСТО (NULL), имена всех окон соответствующие.

Возвращаемые значения
Если функция завершается успешно, возвращаемое значение - дескриптор окна, которое имеет определенный класс и имена окон. Если функция потерпит неудачу, возвращаемое значение - ПУСТО (NULL). Чтобы получить дополнительные данные об ошибках, вызовите GetLastError.
0
 Аватар для BOR1K
14 / 14 / 3
Регистрация: 19.09.2009
Сообщений: 289
03.03.2010, 17:21  [ТС]
HWND hwndChildAfter, // дескриптор дочернего окна

Я его не знаю!!! Мне нужно узнать его!

Добавлено через 9 минут
впрочем вот код, который не работает((


C
1
2
3
HWND hWndParent = FindWindow(0,"Проигрыватель Windows Media");
    HWND hWndChild = FindWindowExA(hWndParent,0,0,"EVRVideoHandler");
        cout << "Handle " << hWndChild <<endl;
в итоге hWndChild равен 0000000
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
03.03.2010, 18:23
EVRVideoHandler - это точно имя окна (заголовок окна), а не имя класса окна? Ты ничего не перепутал?
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
03.03.2010, 18:31
Цитата Сообщение от BOR1K Посмотреть сообщение
HWND hwndChildAfter, // дескриптор дочернего окна
Я его не знаю!!! Мне нужно узнать его!
прочти внимательнее то, что выше.

Цитата Сообщение от BOR1K Посмотреть сообщение
впрочем вот код, который не работает((
а почему использована функция FindWindowExA() ?
в какой среде пишешь?
Если в студии 2005/2008 - то так работать и не будет.

И вообще, лучше пиши по правилам.
примерно так:
C++
1
2
3
4
5
HWND hWndParent = FindWindow(0,_TEXT("Проигрыватель Windows Media"));
if(hWndParent == NULL){ cout << _TEXT("Main Window not found."); exit(0);}
HWND hWndChild = FindWindowEx(hWndParent, NULL, _TEXT("EVRVideoHandler") , NULL));
if(hWndChild == NULL){ cout << _TEXT("Target Window not found."); exit(0);}
cout << _TEXT("Handle ") << (UINT)hWndChild <<endl;
0
 Аватар для BOR1K
14 / 14 / 3
Регистрация: 19.09.2009
Сообщений: 289
03.03.2010, 18:50  [ТС]
Цитата Сообщение от CheshireCat Посмотреть сообщение
EVRVideoHandler - это точно имя окна (заголовок окна), а не имя класса окна? Ты ничего не перепутал?
Скрин посмотри, имя и класс одинаковые!
Среда VS2008
0
 Аватар для BOR1K
14 / 14 / 3
Регистрация: 19.09.2009
Сообщений: 289
07.03.2010, 21:00  [ТС]
Блин ребята!! Кучу мануалов скурил. Ничего не помогает!
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
07.03.2010, 21:27
Цитата Сообщение от BOR1K Посмотреть сообщение
Блин ребята!! Кучу мануалов скурил. Ничего не помогает!
а что не находится?
главное, или дочернее?
0
 Аватар для BOR1K
14 / 14 / 3
Регистрация: 19.09.2009
Сообщений: 289
08.03.2010, 08:19  [ТС]
Дочернее!! Причем все окна перебирал, а именно EVR не находит!
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
08.03.2010, 08:38
м-м-м...
попробуй искать по иерархии.
сначала "Проигрыватель Windows Media", затем "Wmp Plugin UI Host", затем "CWmpControlCntr" и так далее.
0
 Аватар для BOR1K
14 / 14 / 3
Регистрация: 19.09.2009
Сообщений: 289
08.03.2010, 11:51  [ТС]
Имхо, вот функция перебора окон. что-то тоже не работает((
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
HWND Walk(HWND Current,char * name)
{
  HWND temp;
  temp=GetWindow(Current,GW_CHILD); 
  while (temp!=NULL) 
  { 
     char WindowText[1024];
     GetWindowText(temp,WindowText,1023); 
     if (!strcmp(name,WindowText)) return temp; 
 
     HWND result=Walk(temp,name); 
     if (result!=NULL) return result; 
 
     temp=GetWindow(temp,GW_HWNDNEXT);
  }
  return 0; // не найден
}
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
08.03.2010, 12:13
Цитата Сообщение от BOR1K Посмотреть сообщение
Имхо, вот функция перебора окон.
это не перебор окон, а "спуск вниз" по первому попавшемуся окну.
кто сказал, что любое окно должно иметь лишь одно дочернее?
или что попавшееся дочернее будет именно то, которое надо?
попробуй лучше EnumChildWindows(), раз с FindWindowEx() у тебя не идет.
если верить документации, она перечисляет и дочерние дочерних тоже.
1
 Аватар для BOR1K
14 / 14 / 3
Регистрация: 19.09.2009
Сообщений: 289
08.03.2010, 12:17  [ТС]
Ты хорошо EnumChildWindows() знаешь? я что-то первый раз слышу, приведи пример использования если можешь?
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
08.03.2010, 12:21
а у меня и FindWindowEx прекрасно работает.
посмотри здесь
http://msdn.microsoft.com/en-u... 85%29.aspx
вот пример из MSDN
хотя и не для этой, а для EnumChildProc()
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#define ID_FIRSTCHILD  100 
#define ID_SECONDCHILD 101 
#define ID_THIRDCHILD  102 
 
LONG APIENTRY MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 
{ 
    RECT rcClient; 
    int i; 
 
    switch(uMsg) 
    { 
        case WM_CREATE: // creating main window  
 
            // Create three invisible child windows. 
 
            for (i = 0; i < 3; i++) 
            { 
                CreateWindowEx(0, 
                               "ChildWClass", 
                               (LPCTSTR) NULL, 
                               WS_CHILD | WS_BORDER, 
                               0,0,0,0, 
                               hwnd, 
                               (HMENU) (int) (ID_FIRSTCHILD + i), 
                               hinst, 
                               NULL); 
            }
 
            return 0; 
 
        case WM_SIZE:   // main window changed size 
 
            // Get the dimensions of the main window's client 
            // area, and enumerate the child windows. Pass the 
            // dimensions to the child windows during enumeration. 
 
            GetClientRect(hwnd, &rcClient); 
            EnumChildWindows(hwnd, EnumChildProc, (LPARAM) &rcClient); 
            return 0; 
 
        // Process other messages. 
    } 
    return DefWindowProc(hwnd, uMsg, wParam, lParam); 
} 
 
BOOL CALLBACK EnumChildProc(HWND hwndChild, LPARAM lParam) 
{ 
    LPRECT rcParent; 
    int i, idChild; 
 
    // Retrieve the child-window identifier. Use it to set the 
    // position of the child window. 
 
    idChild = GetWindowLong(hwndChild, GWL_ID); 
 
    if (idChild == ID_FIRSTCHILD) 
        i = 0; 
    else if (idChild == ID_SECONDCHILD) 
        i = 1; 
    else 
        i = 2; 
 
    // Size and position the child window.  
 
    rcParent = (LPRECT) lParam; 
    MoveWindow(hwndChild, 
               (rcParent->right / 3) * i, 
               0, 
               rcParent->right / 3, 
               rcParent->bottom, 
               TRUE); 
 
    // Make sure the child window is visible. 
 
    ShowWindow(hwndChild, SW_SHOW); 
 
    return TRUE;
}
1
 Аватар для BOR1K
14 / 14 / 3
Регистрация: 19.09.2009
Сообщений: 289
08.03.2010, 12:30  [ТС]
Что означают эти параметры?

WNDENUMPROC lpEnumFunc,
LPARAM lParam
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
08.03.2010, 12:36
WNDENUMPROC lpEnumFunc - указатель на функцию, которая вызывается для каждого дочернего окна.
LPARAM lParam - указатель типа void, передаваемый функции lpEnumFunc.
1
 Аватар для BOR1K
14 / 14 / 3
Регистрация: 19.09.2009
Сообщений: 289
08.03.2010, 12:37  [ТС]
WNDENUMPROC lpEnumFunc - указатель на функцию, которая вызывается для каждого дочернего окна.
А откуда я эту функцию возьму?О_о
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
08.03.2010, 12:50
Цитата Сообщение от BOR1K Посмотреть сообщение
А откуда я эту функцию возьму?
ты не понял. ты ее делаешь. пример-то посмотри.
функции серии EnumXXX() работают так:
сканируются все объекты(в зависимости от конкретной функции EnumXXX() это могут быть окна, драйвера, порты и пр.) и для каждого найденного объекта вызывается функция, которую ты передал в качестве параметра в EnumXXX().
а уже в этой своей функции, можешь написать:
C++
1
2
3
4
5
6
7
8
BOOL CALLBACK EnumChildProc(HWND hwndChild, LPARAM lParam) 
{ 
     char WindowText[1024];
     GetWindowText(hwndChild,WindowText,1023); 
     if (!strcmp(name,WindowText)) return true; 
     hWndSearched = hwndChild;// сохраняем в переменную вне функции
     return false;
}
2
 Аватар для bugbegone
0 / 0 / 0
Регистрация: 19.10.2009
Сообщений: 34
16.03.2010, 14:59
http://s0m.narod.ru/iws.html
http://msdn.microsoft.com/en-u... 85%29.aspx

GetWindow(hWnd,GW_CHILD);
GetWindow(hWnd,GW_HWNDNEXT);
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
16.03.2010, 17:45
bugbegone, ты обсуждение прочитай.
с этих функций все и начиналось...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.03.2010, 17:45
Помогаю со студенческими работами здесь

Тип хука для автоматического изменения размера дочернего окна
Какой типа хука необходимо задать в SetWindowsHookEx, если я хочу изменять размер дочернего окна, при изменении размера родителя, либо...

поиск Handle окна, зная ControlId окна
вопрос по сабжу

Получить handle дочернего окна
Есть следующее дерево окон (из Spy++): Пытаюсь получить хэндл дочернего окна следующим образом: hWnd = FindWindow(null,...

Как получить handle дочернего элемента если функция вызывается по событию?
Для задания координат подсказки для элементов div на все div с name=&quot;div2&quot; навешивается Listener который вызывает функцию mousemove_xy в...

Как получить размеры клиентской области окна-родителя в функции дочернего окна?
задание такое: имеется дочернее окно,которое &quot;убегает&quot; от курсора мыши в пределах родительского окна. я создала главное окно,и дочернее,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru