Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / wpf / src / UIAutomation / UIAutomationClient / MS / Internal / Automation / WindowHideOrCloseTracker.cs / 1 / 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
- Point3DConverter.cs
- AliasedSlot.cs
- SiteMapProvider.cs
- WinFormsSecurity.cs
- PropertyToken.cs
- BooleanAnimationUsingKeyFrames.cs
- WorkflowRuntimeServicesBehavior.cs
- WindowsPen.cs
- ItemMap.cs
- ZipIOCentralDirectoryDigitalSignature.cs
- ScriptingScriptResourceHandlerSection.cs
- Win32Native.cs
- ConfigurationProperty.cs
- PropertyValue.cs
- DoubleConverter.cs
- PersonalizationStateInfo.cs
- CodeDefaultValueExpression.cs
- RowsCopiedEventArgs.cs
- MouseGestureValueSerializer.cs
- FixedSOMPageConstructor.cs
- DefinitionBase.cs
- XmlException.cs
- RegexFCD.cs
- VisualStyleTypesAndProperties.cs
- xdrvalidator.cs
- FileLevelControlBuilderAttribute.cs
- XmlWrappingReader.cs
- NoPersistScope.cs
- Soap.cs
- LayoutExceptionEventArgs.cs
- ViewManager.cs
- XPathMultyIterator.cs
- KnownBoxes.cs
- GridItemProviderWrapper.cs
- MeasureItemEvent.cs
- MissingMemberException.cs
- SqlOuterApplyReducer.cs
- SignedInfo.cs
- SqlCommandSet.cs
- TemplatePropertyEntry.cs
- QueueException.cs
- DPTypeDescriptorContext.cs
- MenuTracker.cs
- TableStyle.cs
- StateMachineWorkflowDesigner.cs
- AsyncResult.cs
- ListBoxItem.cs
- ResolvedKeyFrameEntry.cs
- LocalBuilder.cs
- RankException.cs
- ObjectStorage.cs
- ExtensionElementCollection.cs
- FacetDescription.cs
- QueryStringParameter.cs
- BasicExpandProvider.cs
- HostingPreferredMapPath.cs
- RadioButtonRenderer.cs
- ContentElementAutomationPeer.cs
- CatalogZone.cs
- PrintEvent.cs
- ConstrainedDataObject.cs
- PageAsyncTaskManager.cs
- XPathNodePointer.cs
- AnnotationStore.cs
- SqlParameterizer.cs
- UnknownBitmapEncoder.cs
- CompressEmulationStream.cs
- XmlElementList.cs
- DataRecordInternal.cs
- ListViewDeletedEventArgs.cs
- StickyNoteHelper.cs
- KeyValuePairs.cs
- RayHitTestParameters.cs
- smtpconnection.cs
- CompiledXpathExpr.cs
- SafeMILHandle.cs
- GcHandle.cs
- PartManifestEntry.cs
- MissingMethodException.cs
- ResourceDisplayNameAttribute.cs
- AssertSection.cs
- BevelBitmapEffect.cs
- RightsManagementInformation.cs
- DataListItem.cs
- FieldMetadata.cs
- DispatcherExceptionEventArgs.cs
- EntityDataSourceMemberPath.cs
- GuidTagList.cs
- ReflectionPermission.cs
- URLIdentityPermission.cs
- PrimitiveSchema.cs
- HttpInputStream.cs
- CodeChecksumPragma.cs
- FormsAuthenticationEventArgs.cs
- SymbolUsageManager.cs
- MessageSmuggler.cs
- PointLightBase.cs
- KnownTypes.cs
- ClientProxyGenerator.cs
- CopyAction.cs