Pobieranie textu z Label'a z innej aplikacji

0

Czesc,
chcialbym pobrac text labelk'i z innej aplikcaji. Chcialem to zrobic za pomoca funkcji WinAPI, ale gdzies w sieci wyczytalem se nie jest to mozliwe poniewaz komponenty typu label nie maja uchwytu :(. Jak inaczej mozna rozwiazac ten problem?

Z gory dzieki za pomoc.

0

kiedyś miałem taki prog szperacz okienkowy (czy coś na ształt tego) i on zdaje się dawał taką możliwość. chyba, bo to było dawno .

0

jak nie maja uchwytu? :|

Var
Uchwyt:     HWND;
Tekst:      array [0..255] of char;
begin
Uchwyt:=WindowFromPoint(Mouse.CursorPos);
SendMessage(Uchwyt, WM_GETTEXT, SizeOf(Tekst), integer(@Tekst));
Tekst;
result:= Tekst;
end;

W zmiennej tekst masz caption okna (czyli np. labela, memo itp.) pod kursorem...
(Czyli daj to np. do timera :) Albo pobierz sobie uchwyt i daj zamiast WindowFromPont(...))

0

Zrobilem jak mowiles, ale nie dostalem textu labela tylko caption okna w ktorym sie znajdowal. Z odczytem textu z EditBox czy StaticText nie bylo problemu.

0

Znalazlem cos takiego: "Komponenty graficzne nie mogą się znajdować w ognisku. Są pożyteczne dla złożonych formatek, które muszą wyświetlić wiele elementów sterujących. Nie posiadają uchwytu, dzięki czemu "zabierają" mało zasobów systemu. Przykładowymi elementami graficznymi są : etykiety, przyciski na pasku narzędzi, ikony." Znalazlem to na http://www.kaeii.weia.po.opole.pl/dyplomy/Delphi/lekcja_1/Etapy.htm

Jak mozna wywnioskowac Etykiety nie maja uchwytu :(, wiec jak mozna wyciagnac z nich text? Ma ktos jakis pomysl?

0

Tak to prawda elementy typu label nie posiadają uchwytu. Jeśli chcesz odczytać etykietę musiałbyś prawdopodobnie wyciągnąć ją z zasobów programu, ale nie z każdego programu się tak da, niestety.

0

Da sie odczytac zasoby tego programu, tylko problem tkwi w tym ze text tej labelki zmienia sie w zaleznosci od zaistnialych warunkow. Wymyslilem cos innego: zawartosc tej labelki musi siedziec gdzies w pamieci, tylko problem w tym jak bezposrednio odwolac sie do niej pod NT'kami zeby nie otrzymac zadnego bledu? Probowalem tak:

function CzytajZPamieci(segment_:word;offset_:dword):word;
begin
asm
mov ax, segment_;
mov esi, eax;
mov ebx, offset_;
mov al, byte ptr es:[ebx];
mov result,ax;
end;
end;

Ale konczylo sie to "Project Poroject2.exe raised exeption class EAccessVoilation with message 'Access voilation at address 004569A5 ..."
Tryb zgodnosci tez nic nie pomogl :(.</delphi>

0

Ma ktos jakis inny pomysl? (ten post pozyzej byl moj)

0

Kazdy element typu Label ma rowniez swoj uchwyt i jest calkowita mozliwosc jego pobrania.
Pobierz np programik Lofixa z jego strony chyba www.lofix.iglu.cz

0

Pod tym adresem sa same zdiecia z jakichs imprezek ;), mogl bys podac nazwe tego programu?

0

mozesz sprobowac zrobic printscreen formy z tym labelem i odczytac... na 4p jest prgoramik do odczytywania tekstu z obrazka :)

jak nie maja uchwytu?

a sprobuj pobrac: Tlabel.handle ??

0

Niektore aplikacje sa tak robione ze uchwytow kontrolki nie maja. Przewaznie maja jednak gdy sa standsrdowo robione w C++, Delphi itp i wykorzystuja tamtejsze kontrolki. No np IE nie ma uchwytow bo ma swoje kontrolki.
PS
Ten kod co Wasyl na poczatku napisal jest wystarczajacy aby zrobic co chcesz.

0

Niestety wydaje mi sie ze label w tej aplikacji nie posiada uchwytu, probowalem pobrac go metoda opisana przez Wasyla ale z marnym efektem. Probowalem tez za pomoca programu "Winspector" ale efekt tez byl zerowy. Probowalem jeszcze za pomoca enumwindows pobrac uchwyty wszystkich "obiektow" w tej aplikacji ale niestety wsrod nich nie bylo zadnego labela. Pomysl z tym programem co czyta text z obrazkow jest bardzo ciekawy, ale tez nie spelnia swojego zadania z 2 powodow: ten label siedzi na ciemnym tle, poza tym aplikacja w ktorej sie on znajduje w wiekszosci bedzie siedziala na trayu, wiec screena nie bedziej jak zrobic. :(
BTW na formie swojego programu wrzucilem labelka i ta metoda Wasyla tez nie dostalem uchwytu do niego tylko do calej formy. :(

Najlepszym rozwiazaniem byl by odczyt zawartosci tego labela bezposrednio w pamieci operacyjnej, gdzie na pewno bym go znalazl, ale program bedzie musial smigac pod NT'kami, gdzie bezposredni dostep do pamieci jest mocno "utrudniony" :(

Ma ktos jeszcze jakas inna koncepcje?

Znalazlem ciekawa rzecz: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/debug/base/readprocessmemory.asp moze to da jakis efekt :)

0

Wg mnie, to wszystko w windowsie posiada swoje uchwyty. Może ten label jest czymś przysłonięty. Tak jest np. w gg, w ustawieniach ,niektóre pola są jakoś dziwnie przysłonięte, że pobiera mi uchwyt np. GroupBox'a.

// czyli twierdzisz, że napis na canvasie ma swój uchwyt? - ŁF

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