Ĺadny brzuch
Jakim sposobem uzyskać uchwyt edita lub innej kontrolki, z okna innej aplikacji? Zakładając, ze posiadam uchwyt tego okna.
Funkcją GetWindow(), z drugim parametrem GW_CHILD. Jeśli nie zwróci tego okna co chcesz to tą samą funkcją przeszukuj dalej ten sam poziom. (parametr GW_HWNDNEXT)
Lub możesz zastosować EnumChildWindow, wtedy wylistujesz sobie wszystkie okna potomne.
może pomoże ci to.
@down: ta funkcja pobiera również handle komponentu, nad którym jest kursor.
Użytkownik DJ_ProG edytował ten post 23 czerwiec 2006, 12:24
Ja już potrafię zdobyc uchwyt danego okna, ale jak uzyskać tekst wpisany w edicie w tym oknie?
var wartosc : string; Buffer : array[0..255] of char; begin GetWindowText(Handle, Buffer, SizeOf(Buffer)); wartosc := Buffer; end;
Wtedy pobierze mi nazwę okna, a nie tekst w edicie.
Wtedy pobierze mi nazwę okna, a nie tekst w edicie. Twój nick mówi sam za siebie :rolleyes:
Handle - uchwyt edita, a funkcja GetWindowText pobiera jego zawartość
Wtedy pobierze mi nazwę okna, a nie tekst w edicie.
A przeczytaliście pierwsze zdanies mojego pytania? "Jakim sposobem uzyskać uchwyt edita lub innej kontrolki, z okna innej aplikacji?"? To znaczy, że nie wiem jak uzyskać uchwyt edita. I edit nie jest w tej samej aplikacji, więc eit1.handle odpada.
Poprostu źle się zrozumielismy ;)
@bartolomeo4:
Sorki, ale dopiero teraz zauważyłem twój post ;). Próbowałem zrobić coś takiego:
procedure TForm1.Button1Click(Sender: TObject); var buf:array [0..256] of char; begin handl:=getwindow(handl,GW_CHILD); while handl<>0 do begin getwindowtext(handl,buf,Sizeof(buf)); richedit1.lines.add(buf); handl:=getwindow(handl,GW_HWNDNEXT); end; end;
Ta funkcja powinna mi wyświetlić wszystkie teksty ze wszystkich editów? Jeśli tak, to nie działa ;(
Użytkownik Lama edytował ten post 24 czerwiec 2006, 09:03
omg. Weź ty chłopie na spokojnie przeczytaj wszystko.
Weź do Timera bądź po zrobieniu globalnego skrótu, do jego wywołania wrzuć to, tylko uchwyt komponentu (czyli zmienną) daj jako globalną.
Następnie dzięki procedurze z postu #6 pobieraj wartość tekstu z uchwytu.
...
Fajnie, działa, tylko ja bym wolał bardziej, aby przy tym pobieraniu tekstu, program nie wymagał interakcji ze strony użytkownika (przeniesienie kursora nad edit).
procedure TForm1.Button1Click(Sender: TObject); var buf:array [0..256] of char; begin handl:=getwindow(handl,GW_CHILD); while handl<>0 do begin getwindowtext(handl,buf,Sizeof(buf)); richedit1.lines.add(buf); handl:=getwindow(handl,GW_HWNDNEXT); end; end;
Mi ta procedura działa, może sprawdź na innej aplikacji?
PS. Lama, jesteś z tej Lubszy koło Brzegu?
Użytkownik Stephanek edytował ten post 24 czerwiec 2006, 09:19
Na innej aplikacji działa. Jednak z tą co bym chciał nie. Próbowałem wyszukiwać okno po klase TEdit, ale też nie znajduje. :(
@Stephanek: Tak, jestem z TEJ lubszy ;]
Użytkownik Lama edytował ten post 24 czerwiec 2006, 12:58
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Funkcją GetWindow(), z drugim parametrem GW_CHILD. Jeśli nie zwróci tego okna co chcesz to tą samą funkcją przeszukuj dalej ten sam poziom. (parametr GW_HWNDNEXT)
Lub możesz zastosować EnumChildWindow, wtedy wylistujesz sobie wszystkie okna potomne.
może pomoże ci to.
@down: ta funkcja pobiera również handle komponentu, nad którym jest kursor.
Użytkownik DJ_ProG edytował ten post 23 czerwiec 2006, 12:24
Ja już potrafię zdobyc uchwyt danego okna, ale jak uzyskać tekst wpisany w edicie w tym oknie?
var wartosc : string; Buffer : array[0..255] of char; begin GetWindowText(Handle, Buffer, SizeOf(Buffer)); wartosc := Buffer; end;
Wtedy pobierze mi nazwę okna, a nie tekst w edicie.
Wtedy pobierze mi nazwę okna, a nie tekst w edicie. Twój nick mówi sam za siebie :rolleyes:
Handle - uchwyt edita, a funkcja GetWindowText pobiera jego zawartość
Wtedy pobierze mi nazwę okna, a nie tekst w edicie.
A przeczytaliście pierwsze zdanies mojego pytania? "Jakim sposobem uzyskać uchwyt edita lub innej kontrolki, z okna innej aplikacji?"? To znaczy, że nie wiem jak uzyskać uchwyt edita. I edit nie jest w tej samej aplikacji, więc eit1.handle odpada.
Poprostu źle się zrozumielismy ;)
@bartolomeo4:
Sorki, ale dopiero teraz zauważyłem twój post ;). Próbowałem zrobić coś takiego:
procedure TForm1.Button1Click(Sender: TObject); var buf:array [0..256] of char; begin handl:=getwindow(handl,GW_CHILD); while handl<>0 do begin getwindowtext(handl,buf,Sizeof(buf)); richedit1.lines.add(buf); handl:=getwindow(handl,GW_HWNDNEXT); end; end;
Ta funkcja powinna mi wyświetlić wszystkie teksty ze wszystkich editów? Jeśli tak, to nie działa ;(
Użytkownik Lama edytował ten post 24 czerwiec 2006, 09:03
omg. Weź ty chłopie na spokojnie przeczytaj wszystko.
Weź do Timera bądź po zrobieniu globalnego skrótu, do jego wywołania wrzuć to, tylko uchwyt komponentu (czyli zmienną) daj jako globalną.
Następnie dzięki procedurze z postu #6 pobieraj wartość tekstu z uchwytu.
...
Fajnie, działa, tylko ja bym wolał bardziej, aby przy tym pobieraniu tekstu, program nie wymagał interakcji ze strony użytkownika (przeniesienie kursora nad edit).
procedure TForm1.Button1Click(Sender: TObject); var buf:array [0..256] of char; begin handl:=getwindow(handl,GW_CHILD); while handl<>0 do begin getwindowtext(handl,buf,Sizeof(buf)); richedit1.lines.add(buf); handl:=getwindow(handl,GW_HWNDNEXT); end; end;
Mi ta procedura działa, może sprawdź na innej aplikacji?
PS. Lama, jesteś z tej Lubszy koło Brzegu?
Użytkownik Stephanek edytował ten post 24 czerwiec 2006, 09:19
Na innej aplikacji działa. Jednak z tą co bym chciał nie. Próbowałem wyszukiwać okno po klase TEdit, ale też nie znajduje. :(
@Stephanek: Tak, jestem z TEJ lubszy ;]
Użytkownik Lama edytował ten post 24 czerwiec 2006, 12:58