.exe - classname bakmak?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
Shou
Üye
Mesajlar: 260
Kayıt: 26 Ağu 2011 02:00

.exe - classname bakmak?

Mesaj gönderen Shou »

Merhabalar masaüstü bir kaç program war ben onları delphi 7 de button yapıp seç button tıklayıp o .exe leri seçip label1 da classname : xx diye yazdırtmak istiyorum ama beceremedım yardımcı olursanız sevinirim buldugum kaynaklar ;

http://www.swissdelphicenter.ch/torry/s ... hp?id=1901
http://www.delphitricks.com/source-code ... e_pos.html

bildigime göre önce handle nosunu bulup sonra classname bakılacakmış ama yapamıyorum malesef..

Kod: Tümünü seç

*GetClassName(hWnd, aName, 256)
bu kod classname verıyorda benim seçtigim .exe class namesi bakmam gerekıyor?
dpcmsx
Üye
Mesajlar: 22
Kayıt: 06 Eyl 2011 04:25

Re: .exe - classname bakmak?

Mesaj gönderen dpcmsx »

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. :D

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. :D
Kullanıcı avatarı
Shou
Üye
Mesajlar: 260
Kayıt: 26 Ağu 2011 02:00

Re: .exe - classname bakmak?

Mesaj gönderen Shou »

Abi listwiew içi boş gözüküyor proje olarak eklersen bi bakayım? şimdiden tşkler.
dpcmsx
Üye
Mesajlar: 22
Kayıt: 06 Eyl 2011 04:25

Re: .exe - classname bakmak?

Mesaj gönderen dpcmsx »

Delphi7 ile deneyebilirsiniz.
Dosya ekleri
Get Window Classname.rar
(4.91 KiB) 103 kere indirildi
Kullanıcı avatarı
Shou
Üye
Mesajlar: 260
Kayıt: 26 Ağu 2011 02:00

Re: .exe - classname bakmak?

Mesaj gönderen Shou »

hocam çok teşekkür ettim sorunsuz çalışıyor fakat hocam birşey daha sormak istiyorum form içinde exe açmayı bılıyormusunuz?
dpcmsx
Üye
Mesajlar: 22
Kayıt: 06 Eyl 2011 04:25

Re: .exe - classname bakmak?

Mesaj gönderen dpcmsx »

hocam çok teşekkür ettim sorunsuz çalışıyor fakat hocam birşey daha sormak istiyorum form içinde exe açmayı bılıyormusunuz?

Rica ederim,

Sorduğunuz soruya daha önce yanıt verilmişti. Adnan Sırca arkadaşımın verdiği örnek sorunuzun tam olarak cevabıdır :

viewtopic.php?f=2&t=29616#p162967
Cevapla