2010-01-02 18 views
6

Uygulamamı masaüstünde gösterirken/en aza indirgeme/küçültme tüm pencereleri simge durumuna küçültülmüş simge durumuna küçültün C#Uygulamayı masaüstünü gösterirken/tüm pencereleri simge durumuna küçültmeyi en aza indirirken nasıl bildirebilirim?

+0

Merhaba, netleştirmek isteyebilirsiniz şimdi: bazı WinAPI çağrılarını kullanmanız nedeniyle, görev çubuğunun "Hızlı Başlatma" sında simgesine tıklamak ... normalde tüm pencereleri otomatik olarak gizleyen ... uygulamanızın hala görünür durumda kalmasını sağlıyor mu? Uygulamanızın "gizlenmesi" (görünmez kılma), uygulamanızın (en üstteki pencere gibi davranıp davranmadığı) olup olmadığı ve uygulamanızın hiç bir zaman minimuma indirilmiş olup olmadığı arasında ayrım yapmak önemlidir. – BillW

+0

@BillW evet Uygulamam, masaüstü düğmesinin tıklatılmasından sonra bile görülebilir, ancak uygulamam en üst pencere değil, uygulamayı gizlemek istemiyorum. Uygulamamdaki bir formu gizlemek/göstermek istiyorum. (form en üstteki pencereden daha küçük boyuttadır) –

+0

Merhaba, bu konuda size yardımcı olamayacağım, ama SO üzerinde bazı gerçek api guruları var! Gerçekten ne soruyor olursanız olacağımı merak ediyorum: "Uygulamamın, çalışma zamanındaki ..." Masaüstü Göster "simgesini tıkladığında nasıl bilgilendirilebileceğimi (kısaltılmış, altında -hood, aslında) tüm uygulama pencerelerini gizler? " Sonuçta, bir bildirim alırsanız, uygulamanızın formlarını/pencerelerini istediğiniz gibi yapılandırabilirsiniz. Umarım bu yararlı bir yorumdur; Bu yorum, sorduğun şeyin sadece bir bölümünü ele alabilir, bence. – BillW

cevap

2

Aşağıdakiler başlamanıza neden olabilir. Bu sadece üzerinde bir liste kutusu (adlandırılmış listMessages) ile standart bir formdur. Bir masaüstü simge durumuna küçült/showall gerçekleştirdiğimde, form WM_SIZE iletilerini yakalar ve Message m değerlerini ListBox'a gönderir. Formunuz, tipik en aza indirgeme ve olayları en üst düzeye çıkarma konusunda yanıt vermeyebilir, ancak bu iletileri windows ileti pompasından almalıdır. Bildiğim kadarıyla herhangi başka bir pencere bu biraz daha karmaşık ama aynı zamanda yapılabilir gösterilmiştir eğer aşağıdaki kullanabilirsiniz tüm pencereleri en aza indirmek için ....

using System; 
using System.Windows.Forms; 

namespace MinimizeAll 
{ 
    public partial class Form1 : Form 
    { 
     private const int WmSize = 5; 
     private const int SizeRestored = 0; 
     private const int SizeMinimized = 1; 
     private const int SizeMaximized = 2; 
     private const int SizeShow = 3; 
     private const int SizeHide = 4; 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     protected override void WndProc(ref Message m) 
     { 
      try 
      { 
       if (m.Msg == WmSize) 
       { 
        var wparam = m.WParam.ToInt32(); 

        switch (wparam) 
        { 
         case SizeRestored: 
         case SizeMinimized: 
         case SizeMaximized: 
         case SizeShow: 
         case SizeHide: 
          var output = string.Format("{0}{1:X} {2:X} {3:X} {4:X} {5:X}", prefix, m.Msg, m.WParam.ToInt32(), m.LParam.ToInt32(), m.HWnd.ToInt32(), m.Result.ToInt32()); 
          listMessages.Items.Add(output); 
          break; 
         default: 
          // this is just a demo (code police)... 
          base.WndProc(ref m); 
          return; 
        } 
       } 
       else 
       { 
        base.WndProc(ref m); 
       } 
      } 
      catch (Exception) 
      { 
       listMessages.Items.Add("err"); 
       base.WndProc(ref m); 
      } 
     } 
    } 
} 
+1

http://www.pinvoke.net/index.aspx söz konusu olduğunda paha biçilmez bir kaynaktır Bu tür bir işi yapmak ve sizlere de eşlik edebilir. –

0

So ... tespitinin:

"Microsoft Shell Denetimleri ve Otomasyonu" COM başvurusuna projenize ekleyin (Referanslar => Ekle => COM).

sonra folowing yapın:

Shell32.ShellClass shell = new Shell32.ShellClass(); 
shell.MinimizeAll(); // can also do: shell.UndoMinimizeAll(); 

veya geç bağlama ile

:
Object shell; 
shell = CreateObject("Shell.Application"); 
shell.MinimizeAll(); 

Şimdi size bazı olayları (AllMinimized gibi) bu COM kullanabilirsiniz emin değilim. .. Bir WinForm uygulamasının en aza indirilmesini engellemek için (Simge durumuna küçült düğmesiyle):

void Form1_Resize(object sender, System.EventArgs e) // Handles Form1.Resize 
{ 
    if (this.WindowState == FormWindowState.Minimized) 
     this.WindowState = FormWindowState.Normal; 
} 

Ayrıca buradan bir göz atabilirsiniz: Amacıyla http://pinvoke.net/default.aspx/user32.EnumDesktopWindows

0

size uygulama için Küçültülmüş haber verilmesini (masaüstü/tüm minimize nasıl en olası olay/minimize tüm pencereleri, Sen gerek uygulamanızın güncel formunun

this.WindowState

mülkiyet kontrol edin. O zaman en aza eğer Düzenlendi

FormWindowState.Minimized

eşit olmalıdır: bu deneyin:

foreach (Process proc in Process.GetProcesses()) 
{ 
    /// check proc.StartInfo.ProcessWindowStyle here 
    /// it Gets window state to use when the process is started. 
} 

http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo_properties.aspx

+0

i kodlarını göstermek için, pencere devlet –

+0

bütün cevabı düzenlenmiş diğer uygulamaları izlemek isteyen iyi bu deneyin:
{
/// onay proc (Process.GetProcesses() içinde Süreç proc)
foreach .StartInfo.ProcessWindowStyle burada
/// İşlem başlatıldığında kullanılacak pencere durumunu alır.
}
http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo_properties.aspx – AceMark

+0

Ben biçimlendirmek ve daha iyi lüzum kodlarını göstermek için önceki cevabı düzenledim. – AceMark

1

tamamen Ian Boyd'un yorum katılıyorum. Hiçbir şekilde tanımlanmış sistem davranışını atlatmaya çalışmayın. Ancak, tanımlanmış sistem davranışına uymak ve hala aradığınız şeyi almak (belki), ana pencereniz için gizlemek istemediğiniz appbars'u kullanmak isteyebilirsiniz. Bir uygulama çubuğu, görev çubuğu gibidir, tam ekran uygulamasının çalışması dışında tüm zaman görünür kalır.

1

Kullanım COM yılında Microsoft Shell Controls And Automation ait Add Reference Namespace Shell32

Kod: Doğru diyorsun: İstediğiniz halde

Shell32.Shell s32 = new Shell32.Shell(); 

Çağrı s32 nesne ..

İlgili konular