2010-05-12 32 views
13

Notepad.exe'nin açıldığını ve pencerenin etkin olmadığını varsayın. Etkinleştirmek için bir uygulama yazacağım. Nasıl yapılır?Bir uygulamanın penceresini bulup etkinleştirin

Güncelleme: Pencere başlığı undefined. Bu yüzden, pencerenin başlığına dayalı FindWindow'u kullanmayı sevmiyorum.

Uygulamam Winform C# 2.0. Teşekkürler.

cevap

22

SetForegroundWindow() öğesini P/invoke etmeniz gerekir. Process.MainWindowHandle size ihtiyacınız olacak kolu verebilir. Örneğin:

using System; 
using System.Diagnostics; 
using System.Runtime.InteropServices; 

class Program { 
    static void Main(string[] args) { 
     var prc = Process.GetProcessesByName("notepad"); 
     if (prc.Length > 0) { 
      SetForegroundWindow(prc[0].MainWindowHandle); 
     } 
    } 
    [DllImport("user32.dll")] 
    private static extern bool SetForegroundWindow(IntPtr hWnd); 
} 

Not Not Defteri çalışan birden fazla kopya var ise belirsizlik.

+0

Vay Ben de aradığım şey bu! ama pencere durumu en aza indirilirse işe yaramıyor! nasıl çözülür? – ACE

+0

Hmya, ön plana küçültülmüş bir pencere koymak iyi bir fikir değildir. Soru Sor düğmesini tıklayın. –

+0

neden !? Çözümü verebilir misiniz? – ACE

0

FindWindow ve veya EnumWindows ve GetWindowText (başlık için) gibi Windows API çağrılarını PInvoke etmeniz gerekir. İdeal olarak, GeWindowThreadProcessId'yi de kullanmak isteyebilirsiniz, böylece bunu gerçek sürece bağlayabilirsiniz.

+0

Not: Pencere başlığı tanımlanmamış. Bu yüzden, pencerenin başlığına dayalı FindWindow'u kullanmayı sevmiyorum. –

+0

FindWindow vuruldu veya kaçırıldı. EnumWindows'u, sürece özgü işlemlerle birlikte kullanın. Uygulamanın ana penceresini bulmayı ve bir alt pencereyi görmediğinizden emin olmak isteyebilirsiniz, bunun için stilleri kontrol edin. – Lloyd

0

Bunlardan birleşimini kullanmak zorunda -

Toggle Process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden at runtime

ve Pencerenin sınıfını bulup bir arama yapmanız gereken

Bring another processes Window to foreground when it has ShowInTaskbar = false

. Read more about it here.

Sadece bilgi için, Not Defteri'nin sınıf adı "Not Defteri" dir (tırnak işaretleri olmadan). Spy ++ kullanarak doğrulayabilirsiniz.

Not: no'lu pencerede numaralı pencereyle çalıştırılmışsa, uygulamanın penceresini etkinleştiremezsiniz. API here'da daha fazla seçenek okuyun.

+0

Çok teşekkür ederim, ama FindWindow undefined bir uygulama penceresi (pencere tanıtıcı) bulmak için bana yardımcı olabilir merak ediyorum. Teşekkürler. –

+0

Cevabımı doğru okumadınız. Evet, 'FindWindow' bunu yapabilir. – Nayan

İlgili konular