Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
2 / 2 / 2
Регистрация: 15.11.2009
Сообщений: 100
1

Не находин хендел

23.05.2011, 16:27. Просмотров 1248. Ответов 14
Метки нет (Все метки)

сдрасте есть код,который не работает.
также есть окно с титлом Garena там же есть класс RichEdit20W
по сути должно работать .
А неработает
C++
1
2
if(FindWindowEx(NULL,NULL,L"RichEdit20W",L"Garena")!=NULL)
    ui->label->setText("SS");
C++
1
FindWindowEx(NULL,NULL,L"RichEdit20W",L"Garena")
вазращает нуль
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.05.2011, 16:27
Ответы с готовыми решениями:

Хендел консоли
Делаю вот такое: #include <iostream> #include <windows.h> using namespace std; void main()...

Передача сообщений через хендел
Здравствуйте. Как мне зная хендел окна передать сообщение Left, Top, Width, Height, WindowState?

Хендел окна на котором установлен фокус
Как узнать дескриптор окна на котором установлен фокус? И еще как обрабатывать нажатие кнопок если...


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

Или воспользуйтесь поиском по форуму:
14
Jesus loves me
Эксперт С++
5096 / 3110 / 351
Регистрация: 12.12.2009
Сообщений: 7,845
Записей в блоге: 2
24.05.2011, 09:34 2
А просто FindWindow() находит?
0
Делаю внезапно и красиво
Эксперт С++
1309 / 1224 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
24.05.2011, 12:00 3
Я так понимаю, что дочерние ищутся в родительском окне. Родительским указан "Рабочий стол", поэтому ищется в нём.
Кроме того, у Garena класс CWnd(вероятно), а не РичЕдит. Т.е. ты ищешь не то и не в том.
Сперва найди Garena, а в нём уже ищи РичЭдит.
0
2 / 2 / 2
Регистрация: 15.11.2009
Сообщений: 100
24.05.2011, 12:03  [ТС] 4
Так гарена я нашел,все классы ищет,а именно RichEdit20W2 нет че за фигня такая
0
Делаю внезапно и красиво
Эксперт С++
1309 / 1224 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
24.05.2011, 12:19 5
Это FindWindowEx(NULL,NULL,L"RichEdit20W",L"Garena") и не должно находить.
Повторяю, класс и имя не соответствуют друг-другу.
0
2 / 2 / 2
Регистрация: 15.11.2009
Сообщений: 100
24.05.2011, 12:27  [ТС] 6
что-то я не понял.
вот иерархия классов SkinWindow(Garena)-CMainWindow() -#32770()-RichEdit20W()
в скобочках назание титлов.

короче подскажите как в другую программу в текстовое поле(class "RichEdit20W" name "RichEdit20W2) передать текст.
C++
1
FindWindowEx(NULL,NULL,L"RichEdit20W",L"Garena")
мне сказали вот так вот надо,но я слишком криворукий еще что бы понять это
0
Делаю внезапно и красиво
Эксперт С++
1309 / 1224 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
24.05.2011, 12:54 7
Дескриптор родительского окна, в котором ищут. NULL - рабочий стол
Дескриптор дочернего окна, с которого начинать искать. NULL - с первого
Класс окна. Либо атомом, либо строкой. У тебя строкой.
Заголовок окна. У тебя "Гарена", а на самом деле заголовка у контрола вообще нет.
И чему ты удивляешься?
0
2 / 2 / 2
Регистрация: 15.11.2009
Сообщений: 100
24.05.2011, 12:59  [ТС] 8
Аа все понял. но опять же омг
C++
1
2
3
4
 HWND hw=FindWindowExA(NULL,NULL,"#32770",NULL);
    hw=FindWindowExA(hw,NULL,"RichEdit20",NULL);
    if(hw !=NULL)
        ui->label->setText("SSS");
первая строчка проходит,а вторая нет.
хотя класс RichEdit20 Находится в классе #32770
что тогда?
0
Делаю внезапно и красиво
Эксперт С++
1309 / 1224 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
24.05.2011, 13:18 9
hw=FindWindowExA(hw,NULL,"RichEdit20",NULL);
Почему не RichEdit20W ?
0
2 / 2 / 2
Регистрация: 15.11.2009
Сообщений: 100
24.05.2011, 13:28  [ТС] 10
Цитата Сообщение от Deviaphan Посмотреть сообщение
hw=FindWindowExA(hw,NULL,"RichEdit20",NULL);
Почему не RichEdit20W ?
слабо на кнопку нажал) не дописал W

Добавлено через 5 минут
Deviaphan, можешь аську дать ,я тебе всю суть обьсянсю ,а то на форуме как-то не могу,если ты не занят ну и хочешь помочь )
0
Делаю внезапно и красиво
Эксперт С++
1309 / 1224 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
24.05.2011, 13:41 11
Да я уже всё что знал - сказал.)
0
247 / 230 / 45
Регистрация: 05.02.2010
Сообщений: 3,283
24.05.2011, 15:59 12
копай в сторону EnumWindows и EnumChildWindows
перебирай все дочерние окна Garena и ищи имя своего рич едита , и если у дочернего будут тоже дочерние их тоже перебирай =) думаю идея понятна
так найдешь хендл

Добавлено через 46 минут
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
28
29
30
31
32
#include <windows.h>
#include <vector>
#include <iostream>
using namespace std;
 
char targetClass[]="RichEdit20W";
vector <HWND> target;
 
BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam)
{
    char txt[256]={0};
    char buff[256]={0};
    GetWindowText(hwnd,txt,255);
    GetClassName(hwnd,buff,255);
    CharToOem(txt,txt);
    cout<<hwnd<<" | "<<txt<<" | "<<buff<<endl;
    if(strstr(buff,targetClass)!=NULL)
    {
        target.push_back(hwnd);
 
    }
    return TRUE;
}
 
int main(int argc,char *argv[])
{
    HWND main = FindWindowW(NULL,L"Garena");
    EnumChildWindows(main,EnumChildProc,NULL);
    for(int i=0;i<target.size();i++)
        cout<<"\nTarget -> "<<target.at(i);
    return 0;
}
как то так....
кстати у меня нашло 2 рич едита
1
270 / 176 / 46
Регистрация: 12.03.2010
Сообщений: 494
24.05.2011, 16:22 13
Spy++ вам в помощь. Для началанужно найти родительское окно, а потом уже искать дочернее.
0
2 / 2 / 2
Регистрация: 15.11.2009
Сообщений: 100
24.05.2011, 18:20  [ТС] 14
я через Spy++ копал ,там как раз вся иерархия окон,классов .

Добавлено через 7 минут
Цитата Сообщение от m1Rr0r Посмотреть сообщение
кстати у меня нашло 2 рич едита
Да,да Да! там как раз 2 рич эдита,только я непойму
C++
1
2
3
GetWindowText(hwnd,txt,255);
        GetClassName(hwnd,buff,255);
        CharToOem(txt,txt);
разве txt и buff Не должны быть LPWSTR? у меня ругается компилятор
0
247 / 230 / 45
Регистрация: 05.02.2010
Сообщений: 3,283
24.05.2011, 19:00 15
zinador, покеж ошибки
в опциях проекта
выруби поддержку unicode
Character Set ->> Not Set
или сделай приведение типов
Цитата Сообщение от zinador Посмотреть сообщение
GetWindowText(hwnd,(LPWSTR)txt,255);
0
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.