2010-01-02 6 views
6

डेस्कटॉप दिखाते समय मेरे एप्लिकेशन को सूचित करने के लिए/सी #डेस्कटॉप दिखाते समय मेरे आवेदन को कैसे सूचित करें/सभी/सभी विंडो को कम से कम करें?

+0

नमस्ते, आपको स्पष्ट करना चाहते हो सकता है अब यह है कि: कुछ WinAPI कॉल के उपयोग के कारण, जो टास्कबार के "त्वरित लॉन्च" में आइकन पर क्लिक कर रहा है ... जो आमतौर पर स्वचालित रूप से सभी विंडो छुपाता है ... आपका एप्लिकेशन अभी भी दिखाई दे रहा है? बीच में अंतर करने के लिए महत्वपूर्ण है कि क्या आप अपने आवेदन को छिपाने के बारे में बात कर रहे हैं (इसे दिखाई नहीं दे रहा है), चाहे आपका आवेदन "शीर्षतम विंडो" के रूप में व्यवहार करता है या नहीं, और चाहे आपका आवेदन किसी भी परिस्थिति में कम हो। – BillW

+0

@ बिलवा हां मेरा डेस्कटॉप शो बटन क्लिक करने के बाद भी दिखाई देता है लेकिन मेरा एप्लिकेशन शीर्षतम विंडो नहीं है, मैं अपना आवेदन छिपाना नहीं चाहता हूं। मैं सिर्फ अपने आवेदन में एक फॉर्म छिपाना/दिखाना चाहता हूं। (फॉर्म आकार में एक छोटा सा है जो सबसे ऊपर की खिड़की है) –

+0

हाय, मैं इसके साथ आपकी मदद करने में सक्षम नहीं हूं, लेकिन SO पर कुछ वास्तविक एपी गुरु हैं! मुझे आश्चर्य है कि आप वास्तव में क्या पूछ रहे हैं यह हो सकता है: "मैं अपना आवेदन अधिसूचित कैसे कर सकता हूं ... रन-टाइम पर ... जब उपयोगकर्ता 'डेस्कटॉप दिखाएं' आइकन पर क्लिक करता है (यह एक छोटा सा कट है, अंडर-द - वास्तव में, वास्तव में) जो आमतौर पर सभी अनुप्रयोग विंडोज़ छुपाता है? " आखिरकार, यदि आप एक अधिसूचना प्राप्त कर सकते हैं, तो आप अपने आवेदन के रूपों/खिड़कियों को अपनी पसंद के अनुसार कॉन्फ़िगर कर सकते हैं। उम्मीद है कि यह एक सहायक टिप्पणी है; यह टिप्पणी आप जो पूछ रहे हैं उसके केवल एक हिस्से को संबोधित कर सकती है, मुझे लगता है। – BillW

उत्तर

2

का उपयोग करके कम से कम सभी/सभी विंडो को कम से कम करें। निम्नलिखित आरंभ करने के बाद आप निम्नलिखित आरंभ कर सकते हैं। यह केवल एक मानक रूप है जिसमें एक सूची बॉक्स (नाम सूचीबद्ध सूची) है। जब मैं डेस्कटॉप को छोटा/शोल करता हूं, तो फॉर्म WM_SIZE संदेशों को पकड़ता है और संदेश एम मान को सूची बॉक्स में आउटपुट करता है। आपका फॉर्म सामान्य न्यूनतम और घटनाओं को अधिकतम करने का जवाब नहीं दे सकता है लेकिन इसे इन संदेशों को विंडोज संदेश पंप से प्राप्त करना चाहिए। जहाँ तक आदेश सभी खिड़कियां आप निम्नलिखित का उपयोग कर सकते कम करने के लिए

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 एक अमूल्य संसाधन है जब यह आता है इस तरह के काम कर रहे हैं और साथ ही साथ आप आगे भी हो सकते हैं। –

0

तो ... पता लगाने यदि कोई अन्य विंडो दिखाया गया है कि एक सा और अधिक शामिल है, लेकिन के रूप में अच्छी तरह से किया जा सकता है .... के रूप में:

अपनी परियोजना में "माइक्रोसॉफ्ट शैल कंट्रोल एंड ऑटोमेशन" COM संदर्भ (संदर्भ => जोड़ें => COM) जोड़ें।

तो folowing कार्य करें:

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

या लेट बाइंडिंग के साथ:

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

अब मैं अगर आप कुछ घटनाओं (AllMinimized) की तरह इस कॉम की उपयोग कर सकते हैं यकीन नहीं है। ..

WinForm एप्लिकेशन को कम करने से कम करने के लिए (न्यूनतम बटन के माध्यम से):

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

आप यहां एक बार देख ले सकते हैं: आप आवेदन के लिए http://pinvoke.net/default.aspx/user32.EnumDesktopWindows

0

आदेश में पता करने के लिए जब यह कम से कम है (कैसे डेस्कटॉप/सभी को कम से कम के लिए सबसे संभावित घटना/सभी खिड़कियां कम से कम, आप की जरूरत है अपने आवेदन की मौजूदा फार्म के

this.WindowState

संपत्ति पर की जाँच करें। अगर यह तो कम से कम है यह

FormWindowState.Minimized

संपादित करने के लिए बराबर होना चाहिए: इस आजमा कर देखें:

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

मैं अन्य अनुप्रयोगों की निगरानी के लिए खिड़की राज्य –

+0

पूरे जवाब संपादित, कोड दिखाना चाहते बेहतर बाहर इस प्रयास करें:
foreach
{
/// जांच proc (Process.GetProcesses() में प्रक्रिया PROC) .StartInfo.ProcessWindowStyle यहां
/// यह प्रक्रिया शुरू होने पर उपयोग करने के लिए विंडो स्थिति प्राप्त करता है।
}
http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo_properties.aspx – AceMark

+0

मैं स्वरूपित और कोड आप बेहतर की जरूरत को दिखाने के लिए अपने पिछले जवाब संपादित किया है। – AceMark

1

मैं पूरी तरह से इयान बॉयड की टिप्पणी से सहमत हैं। किसी भी तरह से परिभाषित सिस्टम व्यवहार को रोकने की कोशिश नहीं करनी चाहिए। हालांकि, परिभाषित सिस्टम व्यवहार का पालन करने के लिए और फिर भी (शायद) जो आप खोज रहे हैं उसे प्राप्त करने के लिए, हो सकता है कि आप अपनी मुख्य विंडो के लिए appbars का उपयोग करना चाहें, जिसे आप छिपाना नहीं चाहते हैं। एक ऐपबार, टास्कबार की तरह है, यह पूरे समय दिखाई देता है जब एक पूर्णस्क्रीन एप्लिकेशन चल रहा है।

1

कॉम में Microsoft Shell Controls And Automation के संदर्भ जोड़े उपयोग Namespace Shell32

कोड: आप सही कह रहे हैं: अपने वांछित राज्य में

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

कॉल S32 वस्तु ..

संबंधित मुद्दे