shellexecute fonksiyonu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
cunsey
Üye
Mesajlar: 31
Kayıt: 13 Haz 2003 10:03

shellexecute fonksiyonu

Mesaj gönderen cunsey »

Arkadaşlar
Merhaba birden fazla oluşturduğum oluşturduğum exe ler var Bir tanesini ana menu gibi düşünün orda butonlar var her biri ayrı exe yi çalıştırıyo exe leri açmakta bir sorunum yok ama bir exe çalışıyosa onu tekrar çardığımda aynı exe bi de oluşturuyo fakat ben o formu açık ve minimize ise maximize etmesi ve aktif yapmasını istiyorum bunun için bir sayaç koymayı denedim ama olmadı butonlara bastığımda exe ilk çalışıyosa sayaç 1 değerini alıyor işte burda demek istediğimde sayaç1 den farklı ise o formu maximize et gibi....

VAR
S:integer=1;
path:string;
begin
path:=EDİT1.TEXT
if say=1 then begin
ShellExecute(handle, nil, (PChar(path)), nil, nil, SW_NORMAL);
say:=say+1;
end
else begin
ShellExecute(handle, nil, (PChar(path)), nil, nil, W_SHOWMAXIMIZED);
end;

end;
En son cunsey tarafından 19 Mar 2004 01:32 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Selam...

- Öncelikle forum kurallarında tamamı büyük harf olan başlık/mesaj konusundaki hatırlatmamı yapmak isterim... Mesajınızın sağ üstünde göreceğiniz Edit Web butonuna basarak bunu düzeltiniz...

- Çözümünüze gelince;

1. (Bu satırı bize yardımcı olacak ek bilgi olarak kabul edin.)Windows her çalışan programa Handle adı verilen bir numara verir...

2. FindWindow( ) fonksiyonu ile bir programın çalışıp çalışmadığını (aslında penceresinin mecut olup olmadığını) öğrenebiliriz... Dönen değer ise o program penceresinin Handle numarasıdır.

3. Arama yaptırdığınızda bu Handle rakamı 0 (sıfır) ise henüz çalışmamıştır, siz rahatlıkla ShellExecute edebilirsiniz...

4. Bu handle rakamı bir değer dönerse o zaman program penceri mevcuttur, yapmanız gereken şey ise SetForegroundWindow( ) fonksiyonu ile bu pencereyi öne taşıyarak görünür kılarsınız...

- Şimdi bu anlattıklarımı örnekleyelim...

Kod: Tümünü seç

Var
 WindowsNumarasi : THandle;
 WindowsAdi      : String;
 ProgAdi         : String;
begin
  WindowsAdi := 'SciCalc';
  ProgAdi    := 'Calc.exe';
  WindowsNumarasi := FindWindow(PChar(WindowsAdi), Nil);
  If IntToStr(WindowsNumarasi) = '0'
     then  WinExec( pChar(ProgAdi) , SW_MAXIMIZE)
     else  SetForegroundWindow(WindowsNumarasi);
end;
- Yukardaki örnekte hesap makinası çalıştırılır, varsa öne taşınır...

- Sizin programınızın EXE adını ProgAdi'na, bu program çalıştığında formunun sınıf adını ise WindowsAdi'na atayın...

- Yok ben bilemem formun başlığını (Form Caption) aracılığıyla bulucam derseniz o zaman o satırdaki Nil ile PChar()'ı aşağıdaki şekilde yer değiştirin...

Kod: Tümünü seç

FindWindow(Nil, PChar(WindowsAdi));
- Sonra da WindowsAdi değişkenine çalıştıracağınız EXE'nin çalışınca çıkacak form başlığını yazın. Sonuçta bulunması gereken bir referans lazım. Bu ya Sınıf Adı (Class Name) ya Form Başlığı (Form Caption) veya her ikisi de olmalıdır..
Resim
Resim ....Resim
Kullanıcı avatarı
Shou
Üye
Mesajlar: 260
Kayıt: 26 Ağu 2011 02:00

Re: shellexecute fonksiyonu

Mesaj gönderen Shou »

Abi verdigin kodu çalıştıramadım birde şöyle açıklıyım ben formun içinde açmak istiyorum exe'yi formu kapatınca içinde çalışan exe'de kapanacak o yüzden , yardımcı olursanız sevinirim.
Cevapla