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