Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/63: Рейтинг темы: голосов - 63, средняя оценка - 4.73
1 / 1 / 0
Регистрация: 18.07.2010
Сообщений: 9
1

Как получить имя класса окна?

18.07.2010, 13:16. Показов 13183. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет! Написал вот такой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "stdafx.h"
#include <windows.h>
#pragma comment(lib, "User32.lib")
 
int _tmain()
{
    void Find(){
        HWND hWnd;
        hWnd = FindWindow(NULL, "Калькулятор");
        if(hWnd){
            char buff[100];
            GetClassName(hWnd,buff,100);
            ShowMessage(buff);
        }
    }
}
Жму компилировать и появляется вот такая ошибка:
Компиляция...
GetClassName.cpp
c:\documents and settings\дима\мои документы\visual studio 2008\projects\getclassname\getclassname\getclassname.cpp(10) : error C2601: Find: недопустимые локальные определения функций
c:\documents and settings\дима\мои документы\visual studio 2008\projects\getclassname\getclassname\getclassname.cpp(9): эта строка содержит '{', которая пока не имеет парной
c:\documents and settings\дима\мои документы\visual studio 2008\projects\getclassname\getclassname\getclassname.cpp(12) : error C2664: FindWindowW: невозможно преобразовать параметр 2 из 'const char [12]' в 'LPCWSTR'
Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
c:\documents and settings\дима\мои документы\visual studio 2008\projects\getclassname\getclassname\getclassname.cpp(15) : error C2664: GetClassNameW: невозможно преобразовать параметр 2 из 'char [100]' в 'LPWSTR'
Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
Журнал построения был сохранен в "file://c:\Documents and Settings\Дима\Мои документы\Visual Studio 2008\Projects\GetClassName\GetClassName\Debug\BuildLog.htm"
GetClassName - ошибок 3, предупреждений 0
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
Помогите пожалуйста! Вроде все правильно сделал, что еще не так не пойму.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.07.2010, 13:16
Ответы с готовыми решениями:

Как получить значение поля класса Окна в классе Контроллера для этого окна?
Доброго всем времени суток. Есть вот такая ситуация. Создаю окна, путем загрузки разметки из fxml...

Как получить имя активного окна?
Здравствуйте, у меня такой вопрос: Как получить имя процесса активного окна

Как получить полное квалификационное имя класса
Как получить полное квалификационное имя класса в Intelliji IDEA, например в eclipse для этого...

Как получить имя класса, которому принадлежит поле
Есть метод с одним out-параметром, принимающим string. Как с помощью рефлексии в этом методе...

12
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
18.07.2010, 13:32 2
описывать одну функцию в другой - не очень удачная мысль
0
1 / 1 / 0
Регистрация: 18.07.2010
Сообщений: 9
18.07.2010, 13:42  [ТС] 3
Цитата Сообщение от alex_x_x Посмотреть сообщение
описывать одну функцию в другой - не очень удачная мысль
Ну я удалил функцию Find(), все равно не компилится.
0
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
18.07.2010, 13:47 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void Find(){
        HWND hWnd = FindWindow(NULL, _T("Калькулятор"));
        if(hWnd){
             TCHAR buff[100];
                        GetClassName(hWnd,buff,100);
                        ShowMessage(buff);
        }
}
 
int _tmain()
{
     Find();
     return 0;
}
возможно так
0
Эксперт С++
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
18.07.2010, 13:48 5
Цитата Сообщение от Dimazsever Посмотреть сообщение
Ну я удалил функцию Find(), все равно не компилится.
Удалил - приложи код. Не компилится - выложи список ошибок.
0
1 / 1 / 0
Регистрация: 18.07.2010
Сообщений: 9
18.07.2010, 14:03  [ТС] 6
Цитата Сообщение от alex_x_x Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void Find(){
        HWND hWnd = FindWindow(NULL, _T("Калькулятор"));
        if(hWnd){
             TCHAR buff[100];
                        GetClassName(hWnd,buff,100);
                        ShowMessage(buff);
        }
}
 
int _tmain()
{
     Find();
     return 0;
}
возможно так
Уже лучше! Теперь только одна ошибка:
c:\documents and settings\дима\мои документы\visual studio 2008\projects\getclassname\getclassname\getclassname.cpp(13) : error C3861: ShowMessage: идентификатор не найден
Может еще что то нужно подключить?
0
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
18.07.2010, 14:08 7
C++
1
2
3
4
5
6
MessageBox(
  NULL,
  buff,
  _T("class name"), 
  MB_OK
);
вместо sendmessage
0
1 / 1 / 0
Регистрация: 18.07.2010
Сообщений: 9
18.07.2010, 16:25  [ТС] 8
Цитата Сообщение от alex_x_x Посмотреть сообщение
C++
1
2
3
4
5
6
MessageBox(
  NULL,
  buff,
  _T("class name"), 
  MB_OK
);
вместо sendmessage
Ураааа!!! Теперь все работает! Спасибо огромное!

Добавлено через 2 часа 13 минут
Вот еще что хотел спросить. Эта программа находит поле ввода Калькулятора. А как же тогда найти остальные кнопки, например кнопки с цифрами?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "stdafx.h"
#include <windows.h>
#pragma comment(lib, "User32.lib")
 
void Find(){
        HWND hWnd = FindWindow(_T("SciCalc"), _T("Калькулятор"));
        HWND hWnd2 = GetWindow(hWnd, GW_CHILD);
        if(hWnd){
             TCHAR buff[100];
                        GetClassName(hWnd2,buff,100);
                        MessageBox(NULL, buff,_T("class name"), MB_OK);
        }
}
int _tmain()
{
    Find();
    return 0;
}
0
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
18.07.2010, 16:31 9
можно устроить перебор всех элементов окна по их типам, и подписи их проверять используя EnumChildWindows
ну примеры поищите сами
0
Эксперт С++
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
18.07.2010, 16:37 10
Dimazsever, просмотри окно с помощью Spy++.
0
1 / 1 / 0
Регистрация: 18.07.2010
Сообщений: 9
18.07.2010, 16:48  [ТС] 11
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Dimazsever, просмотри окно с помощью Spy++.
Скачал с сайта Майкрософта, запустил, но она ничего не находит. Написано:
No managed processes running.
Select View->Refresh.

Добавлено через 2 минуты
Цитата Сообщение от alex_x_x Посмотреть сообщение
можно устроить перебор всех элементов окна по их типам, и подписи их проверять используя EnumChildWindows
ну примеры поищите сами
Ок! Попробую.
0
1 / 1 / 0
Регистрация: 18.07.2010
Сообщений: 9
18.07.2010, 19:40  [ТС] 12
Все, разобрался. Открыл прогу "Калькулятор" с помощью программы Reshack. Reshack позволяет открывать .exe, .dll и некоторые другие файлы. В ней можно посмотреть имена классов окон и кнопок, и много чего еще полезного. Оказалось все остальные кнопки имеют имя класса "BUTTON", но разные заголовки. Можете посмотреть скрин программы Reshack. А вот код моей программы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "stdafx.h"
#include <windows.h>
#pragma comment(lib, "User32.lib")
 
void Find(){
        HWND hWnd = FindWindow(_T("SciCalc"), _T("Калькулятор"));
        HWND hWnd2 = FindWindowEx(hWnd, NULL, NULL, _T("MC"));
        if(hWnd){
             TCHAR buff[100];
                        GetClassName(hWnd2,buff,100);
                        MessageBox(NULL, buff,_T("class name"), MB_OK);
        }
}
int _tmain()
{
    Find();
    return 0;
}
Просто вводишь в параметре название кнопки и она показывает имя класса, т.е. "BUTTON".
Миниатюры
Как получить имя класса окна?  
0
Эксперт С++
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
18.07.2010, 20:35 13
Цитата Сообщение от Dimazsever Посмотреть сообщение
Скачал с сайта Майкрософта, запустил, но она ничего не находит. Написано:
No managed processes running.
Select View->Refresh.
Не знаю, что ты скачал, но видимо не то, что нужно. Данная утилита поставлятся вместе с MSVS и прекрасно работает.
Миниатюры
Как получить имя класса окна?  
0
18.07.2010, 20:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.07.2010, 20:35
Помогаю со студенческими работами здесь

Возможно ли как-то, зная имя класса, вернуть в каком-либо методе имя класса?
Добрый день! Интересуюсь. Есть Обобщенный метод, например: Add&lt;T&gt;(string nameElement). ...

Как получить Class окна в коде по типу класса в Spy++?
В Spy++, Window Info и еще нескольких подобных программах можно кроме тайтла и хендла посмотреть...

Как из класса получить доступ к элементу дочернего окна главной формы?
Есть структура MDI - Главная форма-дочерняя. И есть класс. Из класса мне нужно получить данные о...

Имя класса окна Photoshop
Всем привет! Пишу программу, которая ищет хендлы открытых программ.И вот не знаю класс окна...


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

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