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ę.
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 ? :/
chodzi ci o zrobienie programu który będzie działał tak jak np "ClickOff" ??
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
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...
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: YesMoż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
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: YesMoż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 :)
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
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 :(
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: YesOkno główne:
Class Name: #32770
Uchwyt: 918502
ParentClass: #32770
Par. Uchwyt: 0
Is Child: NoI 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 ;)
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 :/
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