Strona 1 z 1

Pobieranie chwytu do obiektów o tej samej nazwie klasy.

Nowy postNapisane: piątek, 21 grudnia 2012, 19:49
przez Cyfrowy Baron
Za pomocą funkcji FindWindowEx pobieram uchwyt do obiektu typu Edit. Wszystko działa poprawnie, ale problem w tym, że są tam trzy identyczne obiekty Edit, a uchwyt jest pobierany zawsze do pierwszego. Jak mogę pobrać uchwyt do kolejnych?

Re: Pobieranie chwytu do obiektów o tej samej nazwie klasy.

Nowy postNapisane: piątek, 21 grudnia 2012, 20:31
przez Mironas
Po nazwie - parametr lpWindowName

A jeśli nie znasz ich nazw to ja bym przeszukał całe okno używając właściwości ComponentCount/Components[x], jeśli trzeba to rekurencyjnie i sprawdzał czy dany komponent jest klasy "TEdit".

Re: Pobieranie chwytu do obiektów o tej samej nazwie klasy.

Nowy postNapisane: piątek, 21 grudnia 2012, 20:43
przez polymorphism
W drugim parametrze podajesz uchwyt do okna, od którego rozpoczyna się poszukiwanie okien. Czyli za pierwszym razem dajesz NULL, w następnych wywołaniach uchwyt ostatnio znalezionego okna.

Re: Pobieranie chwytu do obiektów o tej samej nazwie klasy.

Nowy postNapisane: piątek, 21 grudnia 2012, 21:38
przez Cyfrowy Baron
Nie zrozumieliście. Chodzi o obiekty Edit, wszystkie są tego samego typu Edit, nazwa każdego jest identyczna. Gdy już pobiorę uchwyt do pierwszego Edit'a nie ma sposobu na przejście do kolejnego, gdyż wszystkie znajdują się na tym samym oknie, więc funkcja FindWindowEx pobiera uchwyt zawsze do pierwszego napotkanego i nie szuka dalej.

Re: Pobieranie chwytu do obiektów o tej samej nazwie klasy.

Nowy postNapisane: piątek, 21 grudnia 2012, 22:08
przez Mironas
Cyfrowy Baron napisał(a):wszystkie są tego samego typu Edit, nazwa każdego jest identyczna.

Identyczna nazwa komponentów w tym samym oknie? To jest możliwe?

Re: Pobieranie chwytu do obiektów o tej samej nazwie klasy.

Nowy postNapisane: piątek, 21 grudnia 2012, 22:13
przez Cyfrowy Baron
To nie jest moja aplikacja, lecz inna, nie ma możliwości sprawdzenia jakiej nazwy użyto dla obiektu.
Przykładowe parametry jednego okna Edit:
winid.png

Re: Pobieranie chwytu do obiektów o tej samej nazwie klasy.

Nowy postNapisane: piątek, 21 grudnia 2012, 23:03
przez polymorphism
Czy zrobiłeś tak, jak napisałem?

Re: Pobieranie chwytu do obiektów o tej samej nazwie klasy.

Nowy postNapisane: sobota, 22 grudnia 2012, 01:08
przez Cyfrowy Baron
Przecież napisałem to na początku. Za pomocą FindWindow pobieram uchwyt do okna na którym są 3 obiekty typu Edit, potem za pomocą FindWindowEx pobieram uchwyt do Edit i na tym koniec, dalej nie ma już innych uchwytów, gdyż jest tylko okno z 3 Edit'ami. Nie ma problemu z pobraniem uchwytu do Edit, ale jak pobrać uchwyt do drugiego Edit'a skoro znajduje się dokładnie na tym samym oknie co pierwszy?

Napisz dokładnie o co tobie chodzi, bo ja już ciebie nie rozumiem.

Re: Pobieranie chwytu do obiektów o tej samej nazwie klasy.

Nowy postNapisane: sobota, 22 grudnia 2012, 11:35
przez Cyfrowy Baron
Z tym problemem poradziłem sobie tak, że pobieram pozycję okna, potem zmieniam pozycję kursora względem okna przesuwając go do pozycji pożądanego pola Edit, po czym pobieram uchwyt do obiektu pod kursorem. Póki co nie mam innego pomysłu. Mam jednak pytanie jak pobrać zawartość pola Edit?

Re: Pobieranie chwytu do obiektów o tej samej nazwie klasy.

Nowy postNapisane: sobota, 22 grudnia 2012, 12:09
przez Cyfrowy Baron
Po drobnej poprawce okazało się, że aby pobrać uchwyt do obiektu w wybranej pozycji za pomocą funkcji WindowFromPoint wcale nie muszę przesuwać tam kursora, wystarczy podać pozycję. Okno musi być oczywiście na wierzchu.

Re: Pobieranie chwytu do obiektów o tej samej nazwie klasy.

Nowy postNapisane: sobota, 22 grudnia 2012, 12:11
przez polymorphism
Napisz dokładnie o co tobie chodzi, bo ja już ciebie nie rozumiem.

Wydawało mi się, że dość jasno pisałem sposób użycia FindWindowEx. Spróbuj tego:
KOD cpp:     UKRYJ  
HWND hwndParent = ... ;
HWND hwndChild = NULL;

while(hwndChild = FindWindowEx(hwndParent, hwndChild, KLASA_SZUKANEGO_OKNA, NULL))
{
        cout << hwndChild << '\n';
}
 

Re: Pobieranie chwytu do obiektów o tej samej nazwie klasy.

Nowy postNapisane: sobota, 22 grudnia 2012, 13:35
przez Cyfrowy Baron
To niczego nie zmienia. Ten problem już obszedłem, ale wciąż nie wiem jak pobrać zawartość z tego Edit'a.

Re: Pobieranie chwytu do obiektów o tej samej nazwie klasy.

Nowy postNapisane: sobota, 22 grudnia 2012, 14:26
przez polymorphism
A te Edity mają tego samego rodzica?

jak pobrać zawartość z tego Edit'a

Użyj komunikatu WM_GETTEXT, bo GetWindowText działa tylko dla okien, które należą do procesu, z którego wywołana jest ta funkcja.

Re: Pobieranie chwytu do obiektów o tej samej nazwie klasy.

Nowy postNapisane: sobota, 22 grudnia 2012, 22:00
przez Cyfrowy Baron
polymorphism napisał(a):GetWindowText działa tylko dla okien, które należą do procesu, z którego wywołana jest ta funkcja.


Z tym się nie do końca zgodzę. Udało mi się za pomocą tej funkcji pobrać zawartość belki tytułowej okna obcego programu, ale nie dało się już pobrać zawartości kontrolek na tym oknie.