WindowAutomationPeer.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / System / Windows / Automation / Peers / WindowAutomationPeer.cs / 1305600 / WindowAutomationPeer.cs

                            using System; 
using System.Runtime.InteropServices;
using System.Security;
using System.Security.Permissions;
using System.Text; 
using System.Windows;
using System.Windows.Interop; 
using System.Windows.Media; 
using System.ComponentModel;
 
using MS.Internal;
using MS.Win32;

// Used to support the warnings disabled below 
#pragma warning disable 1634, 1691
 
 
namespace System.Windows.Automation.Peers
{ 

    ///
    public class WindowAutomationPeer : FrameworkElementAutomationPeer
    { 
        ///
        public WindowAutomationPeer(Window owner): base(owner) 
        {} 

        /// 
        override protected string GetClassNameCore()
        {
            return "Window";
        } 

        /// 
        ///  
        ///     Critical: As this accesses Handle
        ///     TreatAsSafe: Returning the Window Title is considered safe - discussed on Automation TA review 
        /// 
        [SecurityCritical,SecurityTreatAsSafe]
        override protected string GetNameCore()
        { 
            string name = base.GetNameCore();
 
            if(name == string.Empty) 
            {
                Window window = (Window)Owner; 

                if(!window.IsSourceWindowNull)
                {
 
                    StringBuilder sb = new StringBuilder(512);
                    UnsafeNativeMethods.GetWindowText(new HandleRef(null, window.CriticalHandle), sb, sb.Capacity); 
                    name = sb.ToString(); 

                    if (name == null) 
                        name = string.Empty;
                }
            }
 
            return name;
        } 
 
        ///
        override protected AutomationControlType GetAutomationControlTypeCore() 
        {
            return AutomationControlType.Window;
        }
 

 
        /// 
        ///
        ///     Critical as this method accesses critical data. 
        ///     TreatAsSafe - window bounds by themselves is considered safe.
        ///
        [SecurityCritical, SecurityTreatAsSafe ]
        override protected Rect GetBoundingRectangleCore() 
        {
            Window window = (Window)Owner; 
            Rect bounds = new Rect(0,0,0,0); 

            if(!window.IsSourceWindowNull) 
            {

                NativeMethods.RECT rc = new NativeMethods.RECT(0,0,0,0);
                IntPtr windowHandle = window.CriticalHandle; 
                if(windowHandle != IntPtr.Zero) //it is Zero on a window that was just closed
                { 
                    try { SafeNativeMethods.GetWindowRect(new HandleRef(null, windowHandle), ref rc); } 
// Allow empty catch statements.
#pragma warning disable 56502 
                    catch(Win32Exception) {}
// Disallow empty catch statements.
#pragma warning restore 56502
                } 
                bounds = new Rect(rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top);
            } 
 
            return bounds;
        } 

    }
}
 


// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK