Odczyt tesktu z innego okna - nie moge znaleźć :(

0

Pewnie już to było, ale przejrzałem FAQ i nie mam :( Nie wiem, pod jakim hasłem szukać... O co się mnie biega ;-)
Jest jakiś programik, który w swoje okienko w stylu TMemo wypluwa komunikaty. Chciałbym przechwytywać je i dalej mailować (mniejsza z tym, dlaczego ;) ). FindWindow znajduje mi ten program, ale dalej zima, nie wiem, jak sie za to zabrać. Czego mam szukać na forum, jakiego hasła?

Sorry...

Jacek

0

przechwytywania komunikatow... zabaw sie z funkcjami: SendMeesage i PostMessage. poszukaj tez pod haslem HOOK.

0

Pewnie już to było, ale przejrzałem FAQ i nie mam :( Nie wiem, pod jakim hasłem szukać... O co się mnie biega ;-)
Jest jakiś programik, który w swoje okienko w stylu TMemo wypluwa komunikaty. Chciałbym przechwytywać je i dalej mailować (mniejsza z tym, dlaczego ;) ). FindWindow znajduje mi ten program, ale dalej zima, nie wiem, jak sie za to zabrać. Czego mam szukać na forum, jakiego hasła?

Jacek

FindWindow nie znajduje programow tylko okna.

Jezeli masz juz uchwyt tego memo to GetWindowText. A jezeli tylko okna na ktorym lezy to moze jeszcze EnumChildWindows.

A tak poza tym to nie probujesz krasc hasel ?

// bez przesadyzmu... nie próbujesz aby polować na czarownice? [mf]

0

FindWindow nie znajduje programow tylko okna.

Jezeli masz juz uchwyt tego memo to GetWindowText. A jezeli tylko okna na ktorym lezy to moze jeszcze EnumChildWindows.

Dzięki za podpowiedzi. Już znalazłem, zaraz się pochwalę, co zrobiłem ;-)

A tak poza tym to nie probujesz krasc hasel ?

Tak i przelewać je na własne konto ;)

No więc zrobiłem i działa, jakby komuś było potrzebne - to poniżej:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TMainForm = class(TForm)
    btnGetText: TButton;
    lbMyListBox: TListBox;
    procedure btnGetTextClick(Sender: TObject);
  private
  public
  end;

var
  MainForm: TMainForm;

implementation

{$R *.dfm}

function EnumChildWnd(WindowHandle : HWND; P : Pointer) : Boolean; stdcall;
var
  WndName,
  ClsName : array[0..128] of char;
  TextFromWindow: string;
  TextLength,
  lbCount,
  i: integer;
begin
  Result := True;
  GetWindowText(WindowHandle, WndName, 128);
  GetClassName(WindowHandle, ClsName, 128);
  // wynalazlem wczesniej, ze to nie TListBox, a ListBox- jakies C++ czy co? ;-)
  if ClsName = 'ListBox' then
  begin
    // ile elementow w ListBoxie
    lbCount := SendMessage(WindowHandle, LB_GETCOUNT, 0, 0);
    for i := 0 to lbCount - 1 do
    begin
      // Dlugosc jednego elementu
      TextLength := SendMessage(WindowHandle, LB_GETTEXTLEN, i, 0);
      Inc(TextLength);
      SetLength (TextFromWindow, TextLength);
      // Odczyt tekstu
      SendMessage(WindowHandle, lb_GetText, i, LongInt(@TextFromWindow[1]));
      MainForm.lbMyListBox.Items.Append(TextFromWindow);
    end;
  end;
end;

procedure TMainForm.btnGetTextClick(Sender: TObject);
var
  H_WND: HWND;
begin
  H_WND := FindWindow(nil, 'Programik do przechwytywania');
  EnumChildWindows(H_WND, @EnumChildWnd, 0)
end;

end.

Nie wiem, czy to czytelne i czy dobrze przekopiowałem (literówki), w każdym razie u mnie działa.

Jestem zielony jak szczypiorek w Delphi, ale coraz bardziej mi się to podoba... Zwariowałem na starość ;-)

Dzięki i pozdrowienia,
Jacek

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