फिलिप श्मिड की पोस्ट पर विस्तार करने के लिए, मैं एक छोटे से डेमो ऊपर मार पड़ी है। आपको UIAutomationClient
और UIAutomationTypes
पर संदर्भ जोड़ने की आवश्यकता है।
एक संभावित सुधार (या मैं, यदि आप चाहें) प्रारंभ में विंडो को छिपाना है, केवल सही टैब के बाद इसे दिखा रहा है। मुझे यकीन नहीं है कि यह काम करेगा, हालांकि, मुझे यकीन नहीं है कि
AutomationElement.FromHandle
एक छिपी हुई विंडो ढूंढ पाएगा।
संपादित करें: कम से कम अपने कंप्यूटर पर (विंडोज 7, 32 बिट, .NET Framework 4.0), निम्नलिखित कोड शुरू में एक छिपे हुए कार्य प्रबंधक बनाता है और बाद सही टैब चयनित किया गया है यह पता चलता है। मैं प्रदर्शन टैब का चयन करने के बाद विंडो को स्पष्ट रूप से नहीं दिखाता, इसलिए शायद ऑटोमेशन लाइनों में से एक साइड-इफेक्ट के रूप में करता है।
using System;
using System.Diagnostics;
using System.Windows.Automation;
namespace ConsoleApplication2 {
class Program {
static void Main(string[] args) {
// Kill existing instances
foreach (Process pOld in Process.GetProcessesByName("taskmgr")) {
pOld.Kill();
}
// Create a new instance
Process p = new Process();
p.StartInfo.FileName = "taskmgr";
p.StartInfo.CreateNoWindow = true;
p.Start();
Console.WriteLine("Waiting for handle...");
while (p.MainWindowHandle == IntPtr.Zero) ;
AutomationElement aeDesktop = AutomationElement.RootElement;
AutomationElement aeForm = AutomationElement.FromHandle(p.MainWindowHandle);
Console.WriteLine("Got handle");
// Get the tabs control
AutomationElement aeTabs = aeForm.FindFirst(TreeScope.Children,
new PropertyCondition(AutomationElement.ControlTypeProperty,
ControlType.Tab));
// Get a collection of tab pages
AutomationElementCollection aeTabItems = aeTabs.FindAll(TreeScope.Descendants, new PropertyCondition(AutomationElement.ControlTypeProperty,
ControlType.TabItem));
// Set focus to the performance tab
AutomationElement aePerformanceTab = aeTabItems[3];
aePerformanceTab.SetFocus();
}
}
}
मैं कार्य प्रबंधक के पिछले उदाहरणों क्यों नष्ट करते हैं? जब कोई उदाहरण पहले से खुला होता है, तो द्वितीयक उदाहरण खुल जाएंगे लेकिन तुरंत बंद हो जाएंगे। मेरा कोड इस के लिए जांच नहीं करता है, इसलिए विंडो संभाल पाता है जो कोड फ्रीज हो जाएगा।
स्रोत
2011-08-08 19:18:32
में रजिस्ट्री के माध्यम से अंतिम सक्रिय टैब को बदलने के लिए त्वरित समाधान के लिए धन्यवाद होगा। यह जानकर कि यह 'तकनीकी रूप से' किया जा सकता है, मैं स्वचालन में थोड़ा और अधिक देखूंगा और देख सकता हूं कि मैं क्या कर सकता हूं। –
खुशी है कि मैं मदद कर सकता हूं। उपर्युक्त कोड उत्पादन के उपयोग के लिए उपयुक्त होना चाहिए, जब तक आप कुछ त्रुटि जांच जोड़ते हैं। आपके प्रश्न से पहले, मुझे वास्तव में इन प्रबंधित स्वचालन उपकरण के बारे में कोई जानकारी नहीं थी। तो, गलती से मुझे उनको परिचय देने के लिए धन्यवाद :) –
इसके अलावा, यदि आप मेरे कोड का उपयोग करते हैं, तो थोड़ी देर के साथ लूप को प्रतिस्थापित करना सुनिश्चित करें ... कुछ बेहतर। उसमें हमेशा के लिए लूप की संभावना है –