2013-03-26 10 views
6

में स्विच एप्लिकेशन मैं सी # एप्लिकेशन लिखना चाहता हूं जो कुछ चल रहे अनुप्रयोगों के बीच स्विच करेगा। इसे विंडोज़ में Alt + Tab जैसी सटीक कार्यक्षमता करना चाहिए। मैं विंडोज एपीआई से SetForegroundWindow() फ़ंक्शन का उपयोग करता हूं, लेकिन यदि विंडोज़ टास्क बार पर एप्लिकेशन कम हो जाता है तो यह ठीक से काम नहीं करता है। तो मैंने ShowWindow() फ़ंक्शन जोड़ा, लेकिन एक समस्या है कि विंडो को मूल आकार में विंडो दिखाने के लिए संभव नहीं है जिसे उपयोगकर्ता सेट किया गया है।सी # जैसे टास्क मैनेजर

[DllImport("user32.dll")] 
public static extern bool SetForegroundWindow(IntPtr hWnd); 

[DllImport("user32.dll")] 
public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); 

उदाहरण: मैं विंडो को अधिकतम करता हूं, फिर मैं इसे टास्क बार में छोटा करता हूं। जब मैं फोन:

ShowWindow(processWindowHandle, ShowWindowCmd.SW_NORMAL); 
WindowsApi.SetForegroundWindow(processWindowHandle); 

विंडो को बड़ा नहीं है। मैंने ShowWindowCmd.SW_NORMAL पैरामीटर के साथ खेलने का प्रयास किया लेकिन उसी परिणाम के साथ।

+2

आप SW_RESTORE की कोशिश की है? – David

+0

हां मैंने SW_RESTORE की कोशिश की। जिस अनुप्रयोग को अधिकतम किया गया था और उसके बाद न्यूनतम किया गया था तब अधिकतम नहीं किया गया (अपेक्षित के रूप में)। यह खिड़की के रूप में दिखाया गया है जो स्क्रीन के अधिकतम आकार के आकार का आकार कम है। –

+0

मैं हर बार विंडो को अधिकतम नहीं करना चाहता हूं। मैं उसी स्थिति में खिड़की दिखाना चाहता हूं जो कि मैं खिड़की को किसी अन्य के साथ छुपाता हूं या इसके लिए मैं इसे टास्क बार में छोटा करता हूं ... –

उत्तर

2

मैंने पहले यह किया है, आप सब कुछ खोलने, सबकुछ कम करने, और उसके बाद फिर से दोबारा प्रत्येक प्रोग्राम की तुलना में पुन: स्थापित करना चाहते हैं, और फिर उसे पुनर्स्थापित करना चाहते हैं। आपको उस विंडो को पहचानने के लिए एक तरीका चाहिए जिसे आप बहाल करना चाहते हैं, मैं मेनविंडो टिटल का उपयोग करता था क्योंकि मेरे पास पर्यावरण पर नियंत्रण था, और इसलिए गारंटी दे सकती है कि प्रत्येक मेनविंडो टिटल अद्वितीय होगा, तो आपके पास वह लक्जरी नहीं हो सकता है।

कोड मैं इस लिए अतीत में प्रयोग कम होता है तो यह अच्छी तरह से काम किया:

[DllImport("user32.dll")] 
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); 

void SwitchDatabase(string mainWindowTitle) 
{ 
     try 
     { 
      bool launched = false; 

      Process[] processList = Process.GetProcesses(); 

      foreach (Process theProcess in processList) 
      { 
       ShowWindow(theProcess.MainWindowHandle, 2); 
      } 

      foreach (Process theProcess in processList) 
      { 
       if (theProcess.MainWindowTitle.ToUpper().Contains(mainWindowTitle.ToUpper())) 
       { 
        ShowWindow(theProcess.MainWindowHandle, 9); 
        launched = true; 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      ThrowStandardException(ex); 
     } 
} 
+0

हम्म। तुम सही हो, मुझे लगता है। केवल एक छोटा सा नुकसान है। अगर मैं अपनी खिड़की को न्यूनतम नहीं करता हूं और इस कोड को कॉल करता हूं तो अधिकतम विंडो को न्यूनतम और अधिकतम आकार में बहाल नहीं किया जाता है। शायद इस तरह कुछ कोड होना चाहिए: 'अगर (न्यूनतम) { शोविंडो (Therocess.MainWindowHandle, 9); } अन्य { SetForegroundWindow (processWindowHandle); } ' –

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