Sayın Xearth,
Torry'nin kodu gayet yeterli fakat FindWindow ile handle'ı bulunan pencerelerin "EIFrame" olanları filitre etmiş. Dolasıyla önce bu filitlereleri kaldırmak gerek ki, bütün pencerelerin class isimlerine ulaşabilelim.
Kod: Tümünü seç
procedure TForm1.Button1Click(Sender: TObject);
var
Hx: THandle;
P: array[0..256] of Char;
Item: TListItem;
begin
ListView1.Items.Clear;
Hx := FindWindow(nil, nil);
GetClassName(Hx, P, SizeOf(P));
// if string(P) = 'IEFrame' then
// begin
Item := ListView1.Items.Add;
Item.SubItems.Add(IntToStr(Hx));
Item.Caption := GetText(Hx);
// end;
while Hx <> 0 do
begin
Hx := GetWindow(Hx, GW_HWNDNEXT);
GetClassName(Hx, P, SizeOf(P));
// if string(P) = 'IEFrame' then
// begin
Item := ListView1.Items.Add;
Item.SubItems.Add(IntToStr(Hx));
Item.Caption := GetText(Hx);
// end;
end;
end;
Buradan sonra yapacağımız değişiklik ise ListView'de çift buton basınca basılan pencerenin class ismini bulup Label'e yazdırmak .
Kod: Tümünü seç
procedure TForm1.ListView1DblClick(Sender: TObject);
var
s : string;
Hx: THandle;
P: array[0..256] of Char;
begin
with (Sender as TListView) do
begin
if Selected <> nil then
begin
s:= Selected.Caption;
Hx := FindWindow(nil, PAnsiChar(s)); // Seçilen pencenin Handle'ı bulacağız
GetClassName(Hx, P, SizeOf(P)); // Class'ı alacağız
Label1.Caption := String(p); // Label'e yazdıracağız.
end;
end;
end;
Kodu çalıştırmak için boş Delphi formuna 1 ListView, 1 Button ve 1 Label yerleştirmeniz yeterlidir.
Umarım yardımcı olabilmişimdir.
