Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/41: Рейтинг темы: голосов - 41, средняя оценка - 4.88
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705

Как найти дескриптор действительно активного окна?

15.08.2012, 02:47. Показов 8381. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я поясню. Запускаю:

C++
1
2
3
4
5
6
7
8
9
#include <windows.h>
#include <stdio.h>
 
int main () {
 while (1) {
  Sleep (1000);
  printf ("%x\n", GetForegroundWindow ());
 }
}
А затем включаю текстовый редактор, например bred и наблюдаю его дескриптор. Но! Всё-то дело в том, что в текстовом редакторе да и во многих других программах, не одно окно, а несколько. Мне-то нужен дескриптор рабочей части, чтобы я потом мог программно написать что-нибудь в окне. А я получаю дескриптор, извиняюсь за выражение чуть ли не рамки бреда. А рамке посылать сообщение бесполезно, всё равно ничего не напечатается. Как быть? Спасибо, кто откликнется.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.08.2012, 02:47
Ответы с готовыми решениями:

Как получить дескриптор дочернего активного окна?
Есть дескриптор (HWND hWnd) какого-то окна (левого, не относящегося к моей программе). Нужно получить дескриптор дочернего окна, которое...

Нужно получить дескриптор окна имея дескриптор контрола
Нужно получить дескриптор окна имея дескриптор контрола, подскажите как

Как получить дескриптор активного окна?
Перебрать все открытые окна? Какой признак есть у активного окна?

10
 Аватар для alexey31415
60 / 60 / 7
Регистрация: 16.05.2010
Сообщений: 632
15.08.2012, 03:03
тут наверно дело в том,что в главном окне создаются дочерние окна,которые тебе и нужны,а ты находишь главное окно
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
15.08.2012, 03:19  [ТС]
Да, так. Вопрос открыт.
0
 Аватар для alexey31415
60 / 60 / 7
Регистрация: 16.05.2010
Сообщений: 632
15.08.2012, 04:20
тогда попытайтесь искать дочерние окна
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
17.08.2012, 01:51  [ТС]
Программа должна быть универсальной. Я могу, конечно, найти дескриптор рабочей области бреда. Но это будет уже программа написанная ПОД бред. А мне надо чтобы она определяла активное окно, какой бы программой оно ни было создано. Бредом, блокнотом, браузером, ещё чем-то.
0
 Аватар для alexey31415
60 / 60 / 7
Регистрация: 16.05.2010
Сообщений: 632
17.08.2012, 02:22
это вряд ли,каждая программа уникальна,у каждой своё кол-во дочерних окон и сделать универсальную программу будет тяжело
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
17.08.2012, 02:34  [ТС]
Да, но примеры же есть. Например Spy++ безошибочно определяет хэндл окна над которым стоит курсор.
0
 Аватар для alexey31415
60 / 60 / 7
Регистрация: 16.05.2010
Сообщений: 632
17.08.2012, 02:59
ну так вы сказали всё
Цитата Сообщение от kravam Посмотреть сообщение
определяет хэндл окна над которым стоит курсор
как я понял,вы просто хотите программно определять хэндл окна
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
17.08.2012, 11:07  [ТС]
Активного окна, добавлю
0
 Аватар для _Lamer
9 / 9 / 1
Регистрация: 16.11.2010
Сообщений: 33
17.08.2012, 21:22
kravam,
в теории можешь перебирать дочерние окна рамки и анализироать "видимость" и класс окна
C++
1
2
IsWindowVisible(hWnd)
GetClassName(hWnd, pszBuffer, BUFFLEN)
зная класс, можно предположить что это окно для ввода текста
Создашь список "известных" классов, если полученный есть в списке - то все ок
если нет то либо нет окна для ввода текста,
либо данный вид приложения "не поддерживается" твоей прогой.

Добавлено через 6 часов 20 минут
активное окно - это окно, которое имеет высший Z-порядок (если не ошибся)
узнать активно ли окно - по его Z-порядку
0
 Аватар для Kastaneda
5232 / 3206 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
18.08.2012, 09:14
Цитата Сообщение от kravam Посмотреть сообщение
Например Spy++ безошибочно определяет хэндл окна над которым стоит курсор.
Потому что есть WinAPI ф-ция получить хэндл окна под курсором.

Добавлено через 3 минуты
Точнее можно сделать так:
GetCursorPos()
WindowFromPoint()
запамятовал...

Добавлено через 6 минут
вот нагуглил
C++
1
2
hwnd = GetDesktopWindow();
focus = GetFocus(hwnd);
не проверял
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.08.2012, 09:14
Помогаю со студенческими работами здесь

Не получается найти дескриптор запущенного окна
открываю процесс с помощью функции CreateProcess(), далее пытаюсь определить дескриптор окна нового процесса FindWindowEx(), но не могу...

С помощью WinApi функции найти дескриптор окна
static extern IntPtr FindWindow ( string lpClassName, string lpWindowName ); static extern int gwt ( ...

Не получается найти дескриптор окна с одинаковым классом
Знаю, что нужно смотреть в сторону EnumChildWindows, но что то у меня не получаеться. Вот скриншот

Как узнать дескриптор окна приложения?
Здравствуйте, в user32.dll есть такая функция: SetForegroundWindow(hWnd) Понадобилось мне вывести окно наверх экрана. Дескриптор...

Как получить дескриптор дочернего окна?
Суть программы такова, есть диалоговое окно, реализовать такую функциональность, зажимаем левую кнопку мыши, тянем её, отпускаем и получаем...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru