Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/43: Рейтинг темы: голосов - 43, средняя оценка - 4.53
10 / 10 / 0
Регистрация: 02.08.2011
Сообщений: 28

FindWindow

08.08.2011, 13:10. Показов 8523. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как вы надеюсь знаете есть такая функция FindWindow. Насколько я понял она возвращает HWND найденного окна, которое можно искать как по заголовку, так и по "классу окна". Так же есть функция GetClassName, которая пишет имя класса окна в предоставленную переменную, руководствуясь переданным HWND.
Тогда почему:
C++
1
2
3
4
5
6
7
LPSTR classname[MAX_CHAR];
HWND hWnd_caption=FindWindow(NULL,"WindowName");
GetClassName(hWnd_caption,classname,MAX_CHAR);
HWND hWnd_classname=FindWindow(classname,NULL)ж
 
if(hWnd_caption!= hWnd_classname)
   MessageBox("wtf?o_O");
дескрипторы не совпадают, а окно которое мне действительно нужно находится "правильно" по заголовку.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.08.2011, 13:10
Ответы с готовыми решениями:

Функция FindWindow ()
Здравствуйте . Возникли проблемы с функцией FindWindow () . Есть такая программа: ищется окно программы-получителя , считывается и...

Запрещено использовать FindWindow()
Уважаемые знатоки! Внимание, вопрос : нужно одной прогой закрыть окно созданное другой... 1 вариант : есть имя окна -- ...

Связка FindWindow+ShowWindow
Есть код: HWND handle = FindWindow(...) //находим нужный хэндл //далее проверка на сущность описателя ShowWindow(handle,...

6
Brainsbreaker
 Аватар для Digit@ll
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
08.08.2011, 13:41
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
    TCHAR classname[MAX_PATH];
    HWND hWnd_caption = FindWindow (NULL, "WindowName");
    GetClassName (hWnd_caption, classname, MAX_PATH);
    HWND hWnd_classname = FindWindow (classname, NULL);
    if (hWnd_caption != hWnd_classname)
    {
        MessageBox (0, "Да, не совпадают", "Болт", MB_ICONHAND);
        break;
    }
    else
    {
        wsprintf (textBuffer, "%s", classname);
        MessageBox (0, textBuffer, "ClassName", 0);
    }
}
0
10 / 10 / 0
Регистрация: 02.08.2011
Сообщений: 28
08.08.2011, 13:55  [ТС]
Меня интересует почему так происходит (Дескрипторы разные), как вывести мессаджбокс я знаю, в коде упущены параметры для наглядности.
0
Brainsbreaker
 Аватар для Digit@ll
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
08.08.2011, 14:04
Пройдись дебагом - поймешь.

Цитата Сообщение от gCorn Посмотреть сообщение
в коде упущены параметры для наглядности.
А потом думай - чего же они хочут? Код надо правильно вылаживать, чтоб проблем лишних не создавать...
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
08.08.2011, 14:14
Может быть потому что имена окон и имена классов могут быть одинаковыми у разных окон!?
0
10 / 10 / 0
Регистрация: 02.08.2011
Сообщений: 28
09.08.2011, 07:12  [ТС]
Все, я разобрался. Вдруг кому будет полезно...

Вот код, который я компилировал =).
Дело оказалось совсем в другом. Здесь все работает правильно и любое окно, в принципе, он найдет правильно (проверил на "Калькуляторе"). Однако у меня вопросы возникли когда я пытался найти окно своего приложения. Приложение было основано на диалоговом окне. Вобщем, как мне показалось, все диалоги имеют одинаковый класснэйм ("#32770"), проверил еще пару диалогов с помощью спай ++.

Поправьте если что не так.

C++
1
2
3
4
5
6
7
8
9
10
11
12
TCHAR classname[100];
HWND hWnd_caption = FindWindow (NULL, _T("Caption"));
GetClassName (hWnd_caption, classname, 100);
HWND hWnd_classname = FindWindow (classname, NULL);
if (hWnd_caption != hWnd_classname)
{
    MessageBox (0, _T("Да, не совпадают"), _T("Болт"), MB_ICONHAND);
}
else
{
    MessageBox (0, classname, _T("ClassName"), 0);
}
1
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,863
09.08.2011, 20:43
Цитата Сообщение от gCorn Посмотреть сообщение
Вобщем, как мне показалось, все диалоги имеют одинаковый класснэйм ("#32770")
насколько я помню это действительно так
даже имени у этого класса нет
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.08.2011, 20:43
Помогаю со студенческими работами здесь

Функции FindWindow (FindWindowEx)
Доброго времени суток. Есть браузер - Mozilla Firefox. В нем открыта вкладка "Google". Как передать сигнал нажатия клавиши конкретно...

Не находит окно фукция FindWindow
Не могу понять почему не находит окно FindWindow. Вот код программы #include "stdafx.h" #include <iostream> #include...

Не работают функции FindWindow и GetWindowThreadProcessId
HWND hWnd; DWORD dwId; HANDLE hProcess; if(FindWindow(NULL, TEXT("GTA:SA:MP"))) { GetWindowThreadProcessId( hWnd, &dwId ); ...

FindWindow, поиск по части заголовка
есть функция FindWindow(NULL,"блокнот"); возможно ли сделать так чтобы она искала по ключевому слову (не знаю как написать еще) ...

FindWindow на Windows x64 не находит окна
Почему то на x64 винде не находит окна. На х32 винде работает: int main() { HWND hwnd = FindWindow(L"dwm",...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru