С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/74: Рейтинг темы: голосов - 74, средняя оценка - 4.95
 Аватар для Gremlin
519 / 307 / 58
Регистрация: 30.07.2008
Сообщений: 607

FindWindowEx

14.07.2010, 00:16. Показов 14490. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня вопрос, вот я хочу узнать значение Edit`a из CPU-Z, но не могу добраться до него, так как

FindWindowEx(Handle, NULL, "#32770 (Dialog)", NULL);

несколько таких, и не могу выбрать тот, который нужен

например на форме 2 кнопки, с одинаковыми названиями/классами - как добраться до 2й?
то же самое и тут, есть несколько TAB листов, как добраться до 2го, или 3го?


Как можно перебирать элементы в чужом окне?


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    HWND Handle; // глобальное
    char caption[64]; // глобальное
//----
    Handle = FindWindow(NULL, "CPU-Z "); // получаю хендл окна по его заголовку
    Handle = FindWindowEx(Handle, NULL, "SysTabControl32", NULL); // ...
    Handle = FindWindowEx(Handle, NULL, "#32770 (Dialog)", NULL); //!!!!!!!!!!!!!!!!!!!!
    Handle = FindWindowEx(Handle, NULL, "Static", NULL);
 
    if(IsWindow(Handle))
    {
        SendMessage(Handle, WM_GETTEXT, sizeof(caption), (LPARAM)caption);
        Edit1->Text = caption;
    }
//----
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.07.2010, 00:16
Ответы с готовыми решениями:

FindWindowEx
Использую: HWND FindWindowEx(HWND hwndParent,HWND hwndChildAfter,LPCTSTR lpszClass, LPCTSTR lpszWindow ); - Ищет окно, производит...

FindWindowEx и 2 одинаковых компонента
Всем доброго дня! На форме создал два окна для ввода IP адресов таким образом INITCOMMONCONTROLSEX CommCtrl; CommCtrl.dwSize...

FindWindowEx() и переименовать текст с Win32API
Здрасте ребят! Мне нужен помощ! Так вот, я хочу найти окна с помощию FindWindowEx() ну как найти родителское окна знаю но вот на...

10
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
14.07.2010, 00:26
Gremlin, тут вам нужна прога(spy++ вроде бы называется или ей подобные), которая разложит прогу на окна и там уже по именам можно добраться до любого компонента...
0
Эксперт С++
 Аватар для MikeSoft
3956 / 1811 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
14.07.2010, 00:32
Gremlin, попробуйте получить всё, что есть в данном окне, может найдёте детали искомого элемента.

Прикладываю к теме свой простенький энумератор всех окон.
В принципе, её несложно переделать для поиска по конкретному окну.
Вложения
Тип файла: rar EnumWindows.rar (405.6 Кб, 466 просмотров)
2
 Аватар для Gremlin
519 / 307 / 58
Регистрация: 30.07.2008
Сообщений: 607
14.07.2010, 00:33  [ТС]
Цитата Сообщение от Lord_Voodoo Посмотреть сообщение
Gremlin, тут вам нужна прога(spy++ вроде бы называется или ей подобные), которая разложит прогу на окна и там уже по именам можно добраться до любого компонента...
да да... все есть... но там одинаковые значения класса... яб просто брал Текст из едита, но не имеет смысле, так как он постоянно меняется...

как то еще давно тоже, что то делал и не мог где то на третью кнопку нажать... тоже класс одинаковый значение одинаковое, поэтому и хотелось бы узнать как перебрать дочерние элементы окна

там идет
Изображения
 
0
 Аватар для Gremlin
519 / 307 / 58
Регистрация: 30.07.2008
Сообщений: 607
14.07.2010, 00:40  [ТС]
MikeSoft, там идет: но все равно спасибо
Миниатюры
FindWindowEx  
0
Эксперт С++
 Аватар для MikeSoft
3956 / 1811 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
14.07.2010, 00:45
Gremlin, появилась идея... как я понял, рядом с необходимым Edit'ом присутствует ещё и StaticText ... можно попробовать получить его координаты с помощью GetWindowRect.

C++
1
2
RECT rcWindow;
GetWindowRect(hWnd, &rcWindow );
И при нахождении ближайшего Edit'a - выводить его содержимое.
0
 Аватар для Gremlin
519 / 307 / 58
Регистрация: 30.07.2008
Сообщений: 607
14.07.2010, 00:59  [ТС]
MikeSoft, ну да, я узнаю рект, а как по ректу получить хендл?
0
Эксперт С++
 Аватар для MikeSoft
3956 / 1811 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
14.07.2010, 01:05
Gremlin, сначала программа в любом случае получит все дескрипторы. Их нужно сохранить в массив! И потом просто перебрать.
0
 Аватар для Gremlin
519 / 307 / 58
Регистрация: 30.07.2008
Сообщений: 607
14.07.2010, 03:38  [ТС]
незнаю почему, но в CPU-Z вкладки идут по счету справа на лево...

Ура!!! Побродил по интернету... обшарил кучу сайтов... в итоге написал небольшую ф-цию для перебора элементов

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
//---------------------------------------------------------------------------
HWND NextByClass(HWND h, AnsiString class_name, int level)
{
    // тут перебираю элементы по классу
    HWND h2 = NULL;
    for(int i = 0; i < level; i++)
    {
        h2 = FindWindowEx(h, h2, class_name.c_str(), NULL);
    }
    return h2;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    HWND Handle;
    char caption[64];
    Handle = FindWindow(NULL, "CPU-Z "); // получаю хэндл окна
    Handle = FindWindowEx(Handle, NULL, "SysTabControl32", NULL);
    Handle = NextByClass(Handle, "#32770", 7); // беру 7ую вкладку
    Handle = NextByClass(Handle, "Static", 13); // беру Static 13ую
    if (IsWindow(Handle))
    {
        SendMessage(Handle, WM_GETTEXT, sizeof(caption), (LPARAM)caption);
        Edit1->Text = caption;
    }
}
//---------------------------------------------------------------------------
0
 Аватар для Gremlin
519 / 307 / 58
Регистрация: 30.07.2008
Сообщений: 607
14.07.2010, 03:58  [ТС]
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
//---------------------------------------------------------------------------
HWND NextWindowElement(HWND h, LPCTSTR fasdClass, LPCTSTR fasdWindow, int level)
{
    HWND h2 = NULL;
    for(int i = 0; i < level; i++)
    {
        h2 = FindWindowEx(h, h2, fasdClass, fasdWindow);
    }
    return h2;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    HWND Handle;
    char caption[64];
    Handle = FindWindow(NULL, "CPU-Z "); // хэндл окна
    Handle = FindWindowEx(Handle, NULL, "SysTabControl32", NULL);
    Handle = NextWindowElement(Handle, "#32770", NULL, 7); // Беру 7ую вкладку
    Handle = NextWindowElement(Handle, "Static", NULL, 13); // Беру Static 13
    if (IsWindow(Handle))
    {
        SendMessage(Handle, WM_GETTEXT, sizeof(caption), (LPARAM)caption);
        Edit1->Text = caption;
    }
}
//---------------------------------------------------------------------------
1
 Аватар для iama
1360 / 988 / 119
Регистрация: 30.07.2010
Сообщений: 5,297
01.08.2010, 13:19
Можно ещё получить хендл текущего TWinControl
C++
1
2
Controls::TWinControl* c = Screen->ActiveControl;
ShowMessage(c->ClassName());
Если вдруг поможет
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.08.2010, 13:19
Помогаю со студенческими работами здесь

FindWindowEx - найти конкретно Memo1
Не получается найти конкретно Memo1: hWnd=FindWindow(NULL, Named_window.c_str()); hWnd = FindWindowEx(hWnd, NULL,...

нахожу окна с помошю FindWindow(); и FindWindowEx(); (ето тачнее кнопка программы) как можно его программно нажать?
Вот опять я, Здравстуйте люди добрые ;) У меня вопрос: вот нахожу окна с помошю FindWindow(); и FindWindowEx(); (ето тачнее кнопка...

FindWindowEx
Всем привет. Хочу написать программу, которая нажимает кнопку 4 на калькуляторе. Вот код: HWND calc =...

WinAPI FindWindowEx
public static class WinowsFind { public static extern IntPtr FindWindow(string lpClassName, string...

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru