Açık olan bir uygulamayı ön plana getirme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
adelphiforumz
Üye
Mesajlar: 602
Kayıt: 01 Nis 2008 05:38
Konum: İstanbul

Açık olan bir uygulamayı ön plana getirme

Mesaj gönderen adelphiforumz »

Selamlar

Windowsta çalışan bir uygulamayı delphi içinden bulup bu uygulamayı
minimize yada başka formların altında ise nasıl tekrar ekranın ön planına getirebilirim.

Teşekkürler


aşağıdaki fonksiyonu kullanarak çalışan uygulamayı buluyorum

Kod: Tümünü seç

function fn_ProgramCalisiyormu(ExeFileName: string): Boolean;
  const
    PROCESS_TERMINATE = $0001;
  var
    ContinueLoop: BOOL;
    FSnapshotHandle: THandle;
    FProcessEntry32: TProcessEntry32;
  begin
    try
        Result := False;
        FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
        FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
        ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);

        while Integer(ContinueLoop) <> 0 do
        begin
          if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase(ExeFileName)) or
              (UpperCase(FProcessEntry32.szExeFile) = UpperCase(ExeFileName))) then
            Result := True;
          ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
        end;
        CloseHandle(FSnapshotHandle);
    except
    end;
   end;
   
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Kullanıcı avatarı
loaded
Üye
Mesajlar: 122
Kayıt: 12 Eki 2010 09:45
Konum: Konya
İletişim:

Re: Açık olan bir uygulamayı ön plana getirme

Mesaj gönderen loaded »

Selam

Kod: Tümünü seç

SetForegroundWindow(Hwnd);
ShowWindow(Hwnd, SW_MAXIMIZE);
Kalk ve işe yarar bir şey yap! Çünkü Allah (c.c.) yeniden başlayanların yardımcısıdır.
Kullanıcı avatarı
adelphiforumz
Üye
Mesajlar: 602
Kayıt: 01 Nis 2008 05:38
Konum: İstanbul

Re: Açık olan bir uygulamayı ön plana getirme

Mesaj gönderen adelphiforumz »

loaded yazdı:Selam

Kod: Tümünü seç

SetForegroundWindow(Hwnd);
ShowWindow(Hwnd, SW_MAXIMIZE);
Selamlar hocam
Bu iki fonksiyonuda denedim fakat olmadı ekran yine arka planda kalıyor.
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
ertank
Kıdemli Üye
Mesajlar: 1657
Kayıt: 12 Eyl 2015 12:45

Re: Açık olan bir uygulamayı ön plana getirme

Mesaj gönderen ertank »

Merhaba,

Windows 7 ve sonrasında "A" uygulamasının "B" uygulamasını ön plana getirmesi ile ilgili önlemler alınmaya başlandı. Windows 10 ile birlikte had safhaya ulaştı. Zira işletim sisteminin kendisi dahi bazı pencereleri ön plana getirmiyor (dosya kopyalama işlemleri mesaj verse dahi arka planda kalıyor). Bunu kullanıcının yapmasını tercih ediyor işletim sistemi.

Bu anlamda istediğiniz işlemi gerçekleştirmeniz çok kolay olmayabilir.

https://msdn.microsoft.com/en-us/librar ... s.85).aspx

Remarks kısmında açıkça sistemin hangi uygulamanın fonksiyonu kullanabileceğini kısıtladığı yazıyor. Hangi koşullar gerçekleşir ise işlemin çalışacağı maddeler halinde sıralanmış.

Bununla birlikte Sertaç Akyüz tarafından önerilen aşağıdaki yöntem ile diğer uygulamanın ön plana gelip fokus alabildiğini teyid eden cevaplar var. Ancak bu kod minimize edilmiş uygulamalarda çalışmayacağı yine Sertaç Akyüz tarafından not olarak belirtilmiş.

Kod: Tümünü seç

var
  Input: TInput;
begin
  ZeroMemory(@Input, SizeOf(Input));
  SendInput(1, Input, SizeOf(Input)); // don't send anyting actually to another app..
  SetForegroundWindow(Handle);
Kaynak: http://stackoverflow.com/questions/1294 ... -the-front
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Açık olan bir uygulamayı ön plana getirme

Mesaj gönderen thelvaci »

SwitchToThisWindow API'sini kullanabilirsiniz.
Cevapla