Trudności z uchwytem :/

0

Mam malutki problem, a mianowicie, chciałbym wiedzieć czy da się, a jak jżs ię da to jak zrobić, by nacisnąć dowolny przycisk w aplikacji, ale nie mojej. Szykałem duzo na forum, ale nic :( Chciałbym np.: zakmnąć Windows Media Player'a, ale przedtem, pobrać tekst, który wyświetla się w nim na Label'u. Czy jest to <ort>w ogóle</ort> możliwe ? Za wszelką pomoc serdecznie i z góry dziękuję.

0

OK, co do zamknięcia okna to w SPACJA końcu znalazłem: FindWindow, ale jak pobrać tekst, który wyświetla się na Label'u ? :/

0

chodzi ci o zrobienie programu który będzie działał tak jak np "ClickOff" ??

0

Mam malutki problem, a mianowicie, chciałbym wiedzieć czy da się, a jak jżs ię da to jak zrobić, by nacisnąć dowolny przycisk w aplikacji, ale nie mojej. Szykałem duzo na forum, ale nic :( Chciałbym np.: zakmnąć Windows Media Player'a, ale przedtem, pobrać tekst, który wyświetla się w nim na Label'u. Czy jest to w ogóle możliwe ? Za wszelką pomoc serdecznie i z góry dziękuję.

Jak najbardziej jest to możliwe...
Najpierw musisz znaleźć uchwyt samej aplikacji MediaPlayer, np używając:

var
 h : longint;

 h:=FindWindow(nil,'Windows Media Player'); // klasa okna, caption okna

Następnie, mając uchwyt głównego okna aplikacji musisz znaleźć uchwyt okna potomnego, twojego labela... Jak znajdziesz uchwyt okna na ktorym sobie ten label lezy to:
np:

HChild := GetWindow(UchwytOknaGlownego, GW_CHILD);// zwroci ci uchwyt twojej kontrolki

//Do pobrania tekstu tego labela, mozewsz uzyc tego:

Function GetCaption(Handle:THandle):String;
Var 
  S:Array[0..MAX_PATH] Of Char;
Begin
   GetWindowText(Handle,S,MAX_PATH);
   Result:=StrPas(S);
End;

A zeby nacisnoc jakis przycisk w innej aplikacji to tak samo... Musisz obsluzyc odpowiedni komunikat dla okna ktorego uchwyt znasz. np:

procedure TForm1.NaciskajKlawisze(klawiszX, KlawiszY: Integer); // musisz podac wspolrzedne jakiegos punktu na przycisku, zeby go nacisnoc...
var
  Msg:TMessage;
begin
msg.LParamLo:=klawiszX;
msg.LParamHi:=KlawiszY;
sendmessage(h,WM_LBUTTONDOWN,msg.lparam,msg.lparam);
sendmessage(h,WM_LBUTTONUP,msg.lparam,msg.lparam);
end;

To tyle... Pokombinuj, moze cos Ci wyjdzie.
Pozdr

0

Kurcze kombinowałem, ale nic niemoge wymyślić :( Wszystko mam już ort! tego tekstu z Label'a tzn.: chciałbym pobrać ten tekst i wyświetlić na Label'u już w mojej aplikacji. Mam takie dane o tym Label'u:

Class Name: Static
Uchwyt: 852914
ParentClass: #32770
Par. Uchwyt: 918502
Is Child: Yes

Może się przydadzą, Wam, żeby mi pomóc...

0

Kurcze kombinowałem, ale nic niemoge wymyślić :( Wszystko mam już oprucz tego tekstu z Label'a tzn.: chciałbym pobrać ten tekst i wyświetlić na Label'u już w mojej aplikacji. Mam takie dane o tym Label'u:

Class Name: Static
Uchwyt: 852914
ParentClass: #32770
Par. Uchwyt: 918502
Is Child: Yes

Może się przydadzą, Wam, żeby mi pomóc...

No przeciez jak masz te dane to co za problem... Pisalem powyzej, skorzystaj z tej funkcji. Musi działać:

function GetCaption(Handle:THandle):string; // podajesz uchwyt, czyli label1.caption:=GetCaption(TwojUchwyt);
var 
 S:array[0..MAX_PATH] of Char;
begin
  GetWindowText(Handle,S,MAX_PATH);
  Result:=StrPas(S);
end;

Pozdr, Pepe

0

Kurcze kombinowałem, ale nic niemoge wymyślić :( Wszystko mam już oprucz tego tekstu z Label'a tzn.: chciałbym pobrać ten tekst i wyświetlić na Label'u już w mojej aplikacji. Mam takie dane o tym Label'u:

Class Name: Static
Uchwyt: 852914
ParentClass: #32770
Par. Uchwyt: 918502
Is Child: Yes

Może się przydadzą, Wam, żeby mi pomóc...

No przeciez jak masz te dane to co za problem... Pisalem powyzej, skorzystaj z tej funkcji. Musi działać:

function GetCaption(Handle:THandle):string; // podajesz uchwyt, czyli label1.caption:=GetCaption(TwojUchwyt);
var 
 S:array[0..MAX_PATH] of Char;
begin
  GetWindowText(Handle,S,MAX_PATH);
  Result:=StrPas(S);
end;

Pozdr, Pepe

Eh, niestety, widocznie Uchwyt się zmienia... a może jak by pobrać go z pozycji okna, ponieważ okno gdzie jest ten label jest nierozciągalne tzn. Label bedize zawsze w tej samem pozycji... Proszę już o ostatnie koło ratunkowe :)

0

Eh, niestety, widocznie Uchwyt się zmienia... a może jak by pobrać go z pozycji okna, ponieważ okno gdzie jest ten label jest nierozciągalne tzn. Label bedize zawsze w tej samem pozycji... Proszę już o ostatnie koło ratunkowe :)

Ekspertem nie jestem, ale uchwyt po zamknieciu aplikacji(mediaplayera) i otwarciu sie zmienia. Wiec musisz do tego dojsc po kolei, tzn, pobierasz uchwyt glownego okna, potem childa, i tak dalej az dojdziesz do swojego labela. (w mojej aplikacji musialem pobrac 6 razy uchyt okin az doszedlem do mojego labela(pobieralem temperature procesora z aplikacji AsusProbe)) Wtedy zawsze otrzymasz poprawny jego uchwyt i wywolujoc te funkcje GetCaption dostaniesz prawidlowy wynik...
Pozdr
Pepe

0

Tzn.: mam uchwyt okna głównego i tego Label'a, ale niewiem jak to wykorzystać, tzn.: zaraz się dowiem :)

Text Label'a tego okna:

Class Name: Static
Uchwyt: 852914
ParentClass: #32770
Par. Uchwyt: 918502
Is Child: Yes

Okno główne:

Class Name: #32770
Uchwyt: 918502
ParentClass: #32770
Par. Uchwyt: 0
Is Child: No

I teraz ostateczne pytanie, jak przejść jak to Ty mówileś z Okna głównego do Label'a, żeby pobrać jego stringa ? Mi się już pomysły skończyły :(

0

Tzn.: mam uchwyt okna głównego i tego Label'a, ale niewiem jak to wykorzystać, tzn.: zaraz się dowiem :)

Text Label'a tego okna:

Class Name: Static
Uchwyt: 852914
ParentClass: #32770
Par. Uchwyt: 918502
Is Child: Yes

Okno główne:

Class Name: #32770
Uchwyt: 918502
ParentClass: #32770
Par. Uchwyt: 0
Is Child: No

I teraz ostateczne pytanie, jak przejść jak to Ty mówileś z Okna głównego do Label'a, żeby pobrać jego stringa ? Mi się już pomysły skończyły :(

Hmm, trudno mi cos pisac, bo nie wiem co ty tam chcesz pobrac i skod... A mam takie pytanie - skąd masz uchwyt do tego twojego TStatic, przeciez on sie zmienia po wyloczeniu aplikacji...skoro nie robiles tego po kolei... Moze napisz co dokladnie chcesz pobrac, przetestuje u siebie na kompie, bo przeciez MediaPlayera mam ;)

0

Te dane pobrałem programem, którego źródełko znalazłem z kodach źródłowych 4p a jego nazwa to: ClassViewer. Te dane były pobrane z innego okna, ale chciałem to na 2 przetestować w tym Windows Media Player'ze. To chyba trudne nie jest, chodzi mi o to dokładnie: Wyświetla mi się okienko powiedźmy, że przyszedł nowy meil w programie pocztowym. Wtedy chce z okienka wiadomści pobrać Label z nazwą Odbiorcy i pzresłać go do mojej aplikacji. Chyba jasne prawda, tylko problem jest w tych pobieraniach :/

0

Chyba jasne prawda, tylko problem jest w tych pobieraniach :/

Napisalem co wiedzialem... proboj to pobierac jak pisalem po kolei, az dojdziesz do interesujocego cie labela. Inaczej sie chyba nie da...
Oblukaj te funkcje, wiecej nie wiem, powodzenia:
h:=FindWindow('KlasaOkna','CaptionOkna'); // szuka uchwyt programu
h:=FindWindowEx(h,0,nil,nil); // szuka uchwyt okna znajoc uchwyt programu
HChild := GetWindow(h, GW_CHILD); // szuka potomka rodzica
HChild := GetWindow(HChild, GW_HWNDNEXT); //szuka nastepnego potomka rodzica - to mozna do petli wrzucic i szukac...
Reszte znajdziesz w pomocy, jak cos nie jasne w tych funkcjach

Pozdr
Pepe

1 użytkowników online, w tym zalogowanych: 0, gości: 1