आपको WPF से विंडो की जेड ऑर्डर जानकारी नहीं मिल सकती है, इसलिए आपको Win32 का सहारा लेना होगा।
var topToBottom = SortWindowsTopToBottom(Application.Current.Windows.OfType<Window>());
...
public IEnumerable<Window> SortWindowsTopToBottom(IEnumerable<Window> unsorted)
{
var byHandle = unsorted.ToDictionary(win =>
((HwndSource)PresentationSource.FromVisual(win)).Handle);
for(IntPtr hWnd = GetTopWindow(IntPtr.Zero); hWnd!=IntPtr.Zero; hWnd = GetNextWindow(hWnd, GW_HWNDNEXT)
if(byHandle.ContainsKey(hWnd))
yield return byHandle[hWnd];
}
const uint GW_HWNDNEXT = 2;
[DllImport("User32")] extern IntPtr GetTopWindow(IntPtr hWnd);
[DllImport("User32")] extern IntPtr GetNextWindow(IntPtr hWnd, uint wCmd);
तरीका यह काम करता है::
कुछ इस तरह चाल करना चाहिए
- यह खिड़की संभाल द्वारा दिए गए खिड़कियों सूचकांक करने के लिए एक शब्दकोश का उपयोग करता है, इस तथ्य का उपयोग करने में कि डब्ल्यूपीएफ के विंडोज कार्यान्वयन, विंडो का प्रस्तुति स्रोत हमेशा HwndSource है।
- यह उचित आदेश खोजने के लिए सभी अनपेक्षित विंडो शीर्ष से नीचे स्कैन करने के लिए Win32 का उपयोग करता है।
स्रोत
2010-08-13 04:33:32
और हां, क्षमा करें, इसके लिए अप्रबंधित कोड अनुमति ("पूर्ण विश्वास") की आवश्यकता है। –
मैं इसे फिर भी स्वीकार करूंगा, क्योंकि अब तक यह एकमात्र उत्तर है। –
क्या आप कृपया मेरे नवीनतम प्रश्न को देख सकते हैं? मुझे वास्तव में समस्या पर अपना कोण देखना पसंद है। http://stackoverflow.com/questions/3642763/static-verification-of- बाइंडिंग –