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

dział ogólny

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

Nowy postprzez Cyfrowy Baron » piątek, 21 grudnia 2012, 19:49

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?
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4719
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

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

Nowy postprzez Mironas » piątek, 21 grudnia 2012, 20:31

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".
Avatar użytkownika
Mironas
Programista I
Programista I
 
Posty: 427
Dołączył(a): poniedziałek, 2 stycznia 2012, 19:02
Podziękował : 17
Otrzymał podziękowań: 61
System operacyjny: Windows 10
Kompilator: C++Builder 10.3 Rio
TMS Components Pack
Gadu Gadu: 0
    Windows XPChrome

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

Nowy postprzez polymorphism » piątek, 21 grudnia 2012, 20:43

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.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2157
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 19
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

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

Nowy postprzez Cyfrowy Baron » piątek, 21 grudnia 2012, 21:38

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.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4719
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

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

Nowy postprzez Mironas » piątek, 21 grudnia 2012, 22:08

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?
Avatar użytkownika
Mironas
Programista I
Programista I
 
Posty: 427
Dołączył(a): poniedziałek, 2 stycznia 2012, 19:02
Podziękował : 17
Otrzymał podziękowań: 61
System operacyjny: Windows 10
Kompilator: C++Builder 10.3 Rio
TMS Components Pack
Gadu Gadu: 0
    Windows XPChrome

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

Nowy postprzez Cyfrowy Baron » piątek, 21 grudnia 2012, 22:13

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
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4719
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

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

Nowy postprzez polymorphism » piątek, 21 grudnia 2012, 23:03

Czy zrobiłeś tak, jak napisałem?
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2157
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 19
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

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

Nowy postprzez Cyfrowy Baron » sobota, 22 grudnia 2012, 01:08

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.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4719
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

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

Nowy postprzez Cyfrowy Baron » sobota, 22 grudnia 2012, 11:35

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?
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4719
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

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

Nowy postprzez Cyfrowy Baron » sobota, 22 grudnia 2012, 12:09

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.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4719
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

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

Nowy postprzez polymorphism » sobota, 22 grudnia 2012, 12:11

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';
}
 
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2157
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 19
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

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

Nowy postprzez Cyfrowy Baron » sobota, 22 grudnia 2012, 13:35

To niczego nie zmienia. Ten problem już obszedłem, ale wciąż nie wiem jak pobrać zawartość z tego Edit'a.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4719
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

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

Nowy postprzez polymorphism » sobota, 22 grudnia 2012, 14:26

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.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2157
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 19
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

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

Nowy postprzez Cyfrowy Baron » sobota, 22 grudnia 2012, 22:00

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.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4719
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 6 gości

cron