Kopiowanie zawartosci aktywnego okna

Odpowiedz Nowy wątek
miror
2011-02-15 18:47
miror
0

Witam wszystkich problem jak w temacie niemam problemu przy np notatniku ale gdy proboje skopiowac text np z worda lub okna rozmowy gg to widze tylko ew. nazwy kontrolek ponizej podam kod ktory dziala na notatniku. Wiem ze trzeba uzyc LB_gettext tylko nigdzie nie moglem znalesc jakiegos konretnego przykladu z uzyciem.


Uchwyt:= GetForegroundWindow();
TxtLength := SendMessage(Uchwyt, WM_GETTEXTLENGTH, 0, 0);
txtlength := txtlength + 1;
 setlength (buffer, TxtLength);
      SendMessage (Uchwyt, WM_GETTEXT, txtlength,longint(@buffer[1]));
  memo1.Lines.Add('Tekst: '+buffer);

Dzieki z gory za pomoc

Pozostało 580 znaków

2011-02-15 19:16
Moderator

Rejestracja: 11 lat temu

Ostatnio: 3 miesiące temu

Lokalizacja: Szczecin

0

Bo tekst można pobrać tylko z kontrolek edycyjnych, a nie wiem jak są traktowane te w Wordzie, bo używam
Open Office na codzień. Możliwe też, że wszystkie kontrolki w oknie są pod jedną klasą i uchwytem - tak jak
ma to miejsce w Operze na przykład. Jeżeli chcesz wyciągnąć tekst z kontrolki, z ktorej się da go wyciągnąć,
a jest ona na innym oknie rodzicu to użyej EnumChildWindows, przykłady są w google. Natomiast pobranie
tekstu z kontrolki (da się nawet z Panelu w Delphi albo Labela - jak teraz się upewniłem) to zrobisz kodem:

//...
var
  ControlText : array[0..255] of Char;
begin
  //....
  SendMessage(AHandle, WM_GETTEXT, SizeOf(ControlText), integer(@ControlText));
  //...
end;

I w zmiennej CóntrolText będzie tekst z kontrolki. Można zwiększyć wielkośc tej tablicy, ale sprawdziłem w
tej chwili i z OpenOffice nie da się tak pobrać tekstu, bo wszystkie elementy okna programu są widoczne, a
przynajmniej w prostym podglądaczu TDWinInfo, jako jedno okno, z taką samą nazwą klasy. A w starszych
wersjach GG dało się wyodrębnić komponenty w oknie rozmowy, nie wiem jak teraz bo GG ssie od dawna i
zacząłem używać AQQ, w którym również elementy okna rozmowy są osobno, ale to dlatego, że AQQ jest
napisane w Delphi. W przypadku większości aplikacji tekst da się wyciągnąć, lecz bywają też właśnie takie, w
w ktorych tego zrobić się nie da. Jeżeli chcesz wyciągać dane akurat z Worda to służą do tego metody OLE.


edytowany 3x, ostatnio: olesio, 2011-02-15 19:18

Pozostało 580 znaków

miror
2011-02-15 20:17
miror
0

Tak WM_GETTEXT z edycyjnych ale np z list boxa mozna LB_GETTEXT tylko nie wiem jak jej uzyc bo uzywam np tak:

Var
Count,I:Integer;
    Item:PChar;
      hOkno:integer;
Begin
 hOkno:= GetForegroundWindow();
  Count:=SendMessage(hOkno,LB_GETCOUNT,0,0);
  GetMem(Item,255);
  For I:=0 To Count-1 Do
  Begin
    SendMessage(hokno,LB_GETTEXT,I,Integer(Item));
    ListBox1.Items.Append(StrPas(Item));
  End;
  FreeMem(Item);

i nic sie nie dzieje ;/ taka ciekawostka ze jak robie WM_GETTEXT np z gg to jak najezdzam na pole do wpisania to inputpanel jak na rozmowe to chatview wiec pobiera nazwe kontrolki ten pierwszy kod co napisalem w pierwszym poscie. Jeli rozmowa z gg to listbox to chyba da rade zczytac zniego sadze tym LB .

Pozostało 580 znaków

2011-02-15 22:43
Moderator

Rejestracja: 11 lat temu

Ostatnio: 3 miesiące temu

Lokalizacja: Szczecin

0

Oczywiście w google wpisać Delphi LB_GETTEXT to nie mogleś?
http://www.swissdelphicenter.ch/torry/showcode.php?id=1335


Pozostało 580 znaków

Odpowiedz

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