Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / UIAutomation / UIAutomationClient / MS / Internal / Automation / WindowHideOrCloseTracker.cs / 1305600 / WindowHideOrCloseTracker.cs
//---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // // Description: Class used to track new UI appearing and make sure any events // are propogated to that new UI. // // History: // 11/20/2003 : Micw Created // //--------------------------------------------------------------------------- using System; using System.Text; using System.Windows.Automation; using MS.Win32; using System.Diagnostics; namespace MS.Internal.Automation { // WindowHideOrCloseTracker - Class used to track new UI appearing and make sure any events // are propogated to that new UI. internal delegate void WindowHideOrCloseHandler( IntPtr hwnd, AutomationElement rawEl, int[] runtimeId ); // Class used to track new UI appearing and make sure any events // are propogated to that new UI. internal class WindowHideOrCloseTracker : WinEventWrap { //----------------------------------------------------- // // Constructors // //----------------------------------------------------- #region Constructors internal WindowHideOrCloseTracker(WindowHideOrCloseHandler newUIHandler) : base(new int[] {NativeMethods.EVENT_OBJECT_DESTROY, NativeMethods.EVENT_OBJECT_HIDE}) { AddCallback(newUIHandler); } #endregion Constructors //------------------------------------------------------ // // Internal Methods // //----------------------------------------------------- #region Internal Methods internal override void WinEventProc(int eventId, IntPtr hwnd, int idObject, int idChild, uint eventTime) { // ignore any event not pertaining directly to the window if (idObject != UnsafeNativeMethods.OBJID_WINDOW) return; // Ignore if this is a bogus hwnd (shouldn't happen) if (hwnd == IntPtr.Zero) return; NativeMethods.HWND nativeHwnd = NativeMethods.HWND.Cast( hwnd ); // Purposefully including windows that have been destroyed (e.g. IsWindow will return // false here for EVENT_OBJECT_DESTROY) because we need that notification. if (eventId == NativeMethods.EVENT_OBJECT_HIDE && !SafeNativeMethods.IsWindow( nativeHwnd )) { return; } int[] runtimeId; AutomationElement rawEl; if (eventId == NativeMethods.EVENT_OBJECT_DESTROY) { // If the window has been destroyed just report the RuntimeId with the event. runtimeId = HwndProxyElementProvider.MakeRuntimeId( nativeHwnd ); rawEl = null; } else { // If the window is just being hidden then can create (and return as event src) a real element rawEl = AutomationElement.FromHandle( hwnd ); runtimeId = rawEl.GetRuntimeId(); } // Do the notify. Note that this handler is used to notify client-side UIAutomation providers of windows // being destroyed or hidden. The delegate called here is itself protected by a lock. This delegate may // call out to proxies but also calls ClientEventManager.RaiseEventInThisClientOnly which properly // queues the actual callout to client code. object[] handlers = GetHandlers(); Debug.Assert(handlers.Length <= 1, "handlers.Length"); if ( handlers.Length > 0 ) ( (WindowHideOrCloseHandler)handlers [0] )( hwnd, rawEl, runtimeId ); } #endregion Internal Methods //------------------------------------------------------ // // Private Fields // //------------------------------------------------------ #region Private Fields // no state #endregion Private Fields } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // // Description: Class used to track new UI appearing and make sure any events // are propogated to that new UI. // // History: // 11/20/2003 : Micw Created // //--------------------------------------------------------------------------- using System; using System.Text; using System.Windows.Automation; using MS.Win32; using System.Diagnostics; namespace MS.Internal.Automation { // WindowHideOrCloseTracker - Class used to track new UI appearing and make sure any events // are propogated to that new UI. internal delegate void WindowHideOrCloseHandler( IntPtr hwnd, AutomationElement rawEl, int[] runtimeId ); // Class used to track new UI appearing and make sure any events // are propogated to that new UI. internal class WindowHideOrCloseTracker : WinEventWrap { //----------------------------------------------------- // // Constructors // //----------------------------------------------------- #region Constructors internal WindowHideOrCloseTracker(WindowHideOrCloseHandler newUIHandler) : base(new int[] {NativeMethods.EVENT_OBJECT_DESTROY, NativeMethods.EVENT_OBJECT_HIDE}) { AddCallback(newUIHandler); } #endregion Constructors //------------------------------------------------------ // // Internal Methods // //----------------------------------------------------- #region Internal Methods internal override void WinEventProc(int eventId, IntPtr hwnd, int idObject, int idChild, uint eventTime) { // ignore any event not pertaining directly to the window if (idObject != UnsafeNativeMethods.OBJID_WINDOW) return; // Ignore if this is a bogus hwnd (shouldn't happen) if (hwnd == IntPtr.Zero) return; NativeMethods.HWND nativeHwnd = NativeMethods.HWND.Cast( hwnd ); // Purposefully including windows that have been destroyed (e.g. IsWindow will return // false here for EVENT_OBJECT_DESTROY) because we need that notification. if (eventId == NativeMethods.EVENT_OBJECT_HIDE && !SafeNativeMethods.IsWindow( nativeHwnd )) { return; } int[] runtimeId; AutomationElement rawEl; if (eventId == NativeMethods.EVENT_OBJECT_DESTROY) { // If the window has been destroyed just report the RuntimeId with the event. runtimeId = HwndProxyElementProvider.MakeRuntimeId( nativeHwnd ); rawEl = null; } else { // If the window is just being hidden then can create (and return as event src) a real element rawEl = AutomationElement.FromHandle( hwnd ); runtimeId = rawEl.GetRuntimeId(); } // Do the notify. Note that this handler is used to notify client-side UIAutomation providers of windows // being destroyed or hidden. The delegate called here is itself protected by a lock. This delegate may // call out to proxies but also calls ClientEventManager.RaiseEventInThisClientOnly which properly // queues the actual callout to client code. object[] handlers = GetHandlers(); Debug.Assert(handlers.Length <= 1, "handlers.Length"); if ( handlers.Length > 0 ) ( (WindowHideOrCloseHandler)handlers [0] )( hwnd, rawEl, runtimeId ); } #endregion Internal Methods //------------------------------------------------------ // // Private Fields // //------------------------------------------------------ #region Private Fields // no state #endregion Private Fields } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- XmlSchemaNotation.cs
- ActivityCodeDomSerializationManager.cs
- SessionStateUtil.cs
- SynchronizedRandom.cs
- GridItem.cs
- InnerItemCollectionView.cs
- SmtpFailedRecipientException.cs
- UrlPath.cs
- ProjectionQueryOptionExpression.cs
- ScrollItemPattern.cs
- CalloutQueueItem.cs
- BindingOperations.cs
- ListCollectionView.cs
- ForeignKeyConstraint.cs
- DbRetry.cs
- ScopelessEnumAttribute.cs
- RadioButton.cs
- path.cs
- SpeechDetectedEventArgs.cs
- AddInIpcChannel.cs
- MtomMessageEncodingElement.cs
- HttpApplicationStateBase.cs
- InputDevice.cs
- RsaKeyIdentifierClause.cs
- ValidationErrorInfo.cs
- TemplateColumn.cs
- XmlComplianceUtil.cs
- StorageFunctionMapping.cs
- EntityKeyElement.cs
- SoapFaultCodes.cs
- Collection.cs
- WhitespaceRuleReader.cs
- FullTextBreakpoint.cs
- CustomCategoryAttribute.cs
- LambdaCompiler.Statements.cs
- SignatureToken.cs
- BitmapCodecInfo.cs
- EnumMemberAttribute.cs
- EventProxy.cs
- SettingsProviderCollection.cs
- IssuanceLicense.cs
- ExtendedProperty.cs
- AnnotationObservableCollection.cs
- Cursor.cs
- GeneralTransform3DGroup.cs
- Route.cs
- DomNameTable.cs
- StyleSelector.cs
- StandardToolWindows.cs
- UrlMappingsSection.cs
- TransactionInterop.cs
- PropertyValueUIItem.cs
- TransactionManager.cs
- VideoDrawing.cs
- SqlProcedureAttribute.cs
- Attributes.cs
- objectquery_tresulttype.cs
- CheckoutException.cs
- FormViewDeleteEventArgs.cs
- Interlocked.cs
- DBNull.cs
- CommonEndpointBehaviorElement.cs
- StylusSystemGestureEventArgs.cs
- XPathException.cs
- Unit.cs
- PasswordDeriveBytes.cs
- ScaleTransform3D.cs
- RefreshResponseInfo.cs
- SqlCacheDependencyDatabase.cs
- ListItemParagraph.cs
- HtmlControlDesigner.cs
- CapabilitiesState.cs
- DataListItemEventArgs.cs
- DesignRelation.cs
- designeractionbehavior.cs
- UIntPtr.cs
- FtpWebResponse.cs
- SafeUserTokenHandle.cs
- VisualStyleTypesAndProperties.cs
- ListContractAdapter.cs
- SystemWebSectionGroup.cs
- RuntimeEnvironment.cs
- ContractDescription.cs
- AbstractSvcMapFileLoader.cs
- PassportAuthenticationModule.cs
- ToolStripSeparator.cs
- HttpRequest.cs
- ManipulationBoundaryFeedbackEventArgs.cs
- StringValidatorAttribute.cs
- OperatorExpressions.cs
- Trace.cs
- ISessionStateStore.cs
- StateMachineAction.cs
- Parser.cs
- XmlDataFileEditor.cs
- HttpCapabilitiesSectionHandler.cs
- RelOps.cs
- input.cs
- ListViewHitTestInfo.cs
- RuntimeHandles.cs