2013-07-15 9 views
6

मैंने देखा है कि setforegroundwindow बहुत flaky हो सकता है - कोई फर्क नहीं पड़ता कि आप इसे कैसे करते हैं।यूआई ऑटोमेशन स्विच विंडो

मैंने देखा है कि जहां संभव हो, यूआईयूटोमेशन का उपयोग करके चीजों में सुधार होता है।

उदाहरण के लिए:

WindowPattern हो रही है और की तरह कुछ का उपयोग कर: मेरे सवालों

windowPattern.SetWindowVisualState(WindowVisualState.Normal); 

windowPattern.SetWindowVisualState(WindowVisualState.Maximized); 

अब है:

मुझे कैसे पता चलेगा कि क्या मैं यह अधिकतम या सामान्य बनाना चाहिए है। कार्य प्रबंधक, और स्वाभाविक रूप से दोनों ड्रैगन बोलते हैं कि यह कैसे करना है। यदि यह पिछले अधिकतम किया गया था, और फिर कम किया गया था, तो जब मैं इसे स्विच करता हूं तो मैं खिड़की को अधिकतम करना चाहता हूं। अगर इसे पहले अधिकतम नहीं किया गया था, तो मैं इसे "सामान्य" बनाना चाहता हूं।

कोई विचार?

उत्तर

2

स्वचालन के लिए सेटफोकस काम नहीं किया।

निम्नलिखित प्रश्न से: Get window state of another process

मैंने पाया कि GetPlacement एपीआई मुझे दिया है कि मैं क्या जरूरत:

 if ((windowplacement.flags & WPF_RESTORETOMAXIMIZED) > 0) 
    { 
     windowPattern.SetWindowVisualState(WindowVisualState.Maximized); 
    } 
    else 
    { 
     windowPattern.SetWindowVisualState(WindowVisualState.Normal); 
    } 
इस के साथ

विंडो को बड़ा करने के लिए बहाल करेगा कि क्या यह अधिकतम और सामान्य करने के लिए बहाल किया गया था अगर यह अधिकतम नहीं था।

1

ठीक है, मैंने सवाल को गलत समझा। मुझे विश्वास है कि आप जो चाहते हैं उसे करने की कुंजी AutomationElement.SetFocus() विधि का उपयोग करना है।

यहां एक मूल उदाहरण है।

//I assume you already have some way of getting the window's handle 
var wih = new System.Windows.Interop.WindowInteropHelper(window); 
IntPtr hWnd = wih.Handle; 

//get the automation element from the handle 
var ae = AutomationElement.FromHandle(hWnd); 

//this will bring the window into focus. 
ae.SetFocus(); 
+1

यह कुछ हद तक उपयोगी है, लेकिन मुझे पता है कि क्या visualState उपयोग करने के लिए के रूप में में पारित करने के लिए की आवश्यकता होगी। तो मान लें कि मैं एक कार्य स्विच आवेदन कर रहा हूं। मेरे पास hwnd है, और फिर उस विंडो के लिए ऑटोमेशन एलीमेंट जो वर्तमान में टास्कबार में कम हो गया है। मुझे नहीं पता कि खिड़की पहले अधिकतम या सामान्य स्थिति में क्या थी। तो मुझे नहीं पता कि मुझे इस समारोह में "सामान्य" या "अधिकतम" में गुजरना चाहिए या नहीं। – Derek

+0

@ डेरेक मैंने अपना जवाब अपडेट कर दिया है, और मुझे लगता है कि यह वही करता है जो आप बेहतर खोज रहे हैं। मैंने कुछ बहुत ही बुनियादी परीक्षण किया, और ऐसा लगता है कि कार्य प्रबंधक में "स्विच टू" काम किया गया था। – Gray

1

आप इस प्रकार अग्रभूमि करने के लिए खिड़की स्थापित करने के लिए WindowPattern उपयोग कर सकते हैं:

var p = 
(WindowPattern)_w.AutomationElement.GetCurrentPattern(WindowPattern.Pattern); 
p.SetWindowVisualState(WindowVisualState.Normal); 
संबंधित मुद्दे