10 / 10 / 0
Регистрация: 02.08.2011
Сообщений: 28
1

FindWindow

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

Author24 — интернет-сервис помощи студентам
Как вы надеюсь знаете есть такая функция 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.08.2011, 13:10
Ответы с готовыми решениями:

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

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

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

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

6
Brainsbreaker
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
08.08.2011, 13:41 2
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  [ТС] 3
Меня интересует почему так происходит (Дескрипторы разные), как вывести мессаджбокс я знаю, в коде упущены параметры для наглядности.
0
Brainsbreaker
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
08.08.2011, 14:04 4
Пройдись дебагом - поймешь.

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

Вот код, который я компилировал =).
Дело оказалось совсем в другом. Здесь все работает правильно и любое окно, в принципе, он найдет правильно (проверил на "Калькуляторе"). Однако у меня вопросы возникли когда я пытался найти окно своего приложения. Приложение было основано на диалоговом окне. Вобщем, как мне показалось, все диалоги имеют одинаковый класснэйм ("#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
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,512
09.08.2011, 20:43 7
Цитата Сообщение от gCorn Посмотреть сообщение
Вобщем, как мне показалось, все диалоги имеют одинаковый класснэйм ("#32770")
насколько я помню это действительно так
даже имени у этого класса нет
0
09.08.2011, 20:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.08.2011, 20:43
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru