Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / wpf / src / UIAutomation / UIAutomationClient / MS / Internal / Automation / WindowShowOrOpenTracker.cs / 1 / WindowShowOrOpenTracker.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: // 06/17/2003 : BrendanM Ported to WCP // 11/20/2003 : Micw renamed NewUITracker.cs to WindowShowOrOpenTracker.cs // //--------------------------------------------------------------------------- using System; using System.Globalization; using System.Text; using System.Windows.Automation; using System.Diagnostics; using MS.Win32; namespace MS.Internal.Automation { // WindowShowOrOpenTracker - Class used to track new UI appearing and make sure any events // are propogated to that new UI. internal delegate void WindowShowOrOpenHandler( IntPtr hwnd, AutomationElement rawEl ); // Class used to track new UI appearing and make sure any events // are propogated to that new UI. internal class WindowShowOrOpenTracker : WinEventWrap { //----------------------------------------------------- // // Constructors // //----------------------------------------------------- #region Constructors internal WindowShowOrOpenTracker(WindowShowOrOpenHandler newUIHandler) : base(new int[] {NativeMethods.EventObjectUIFragmentCreate, NativeMethods.EVENT_OBJECT_CREATE, NativeMethods.EVENT_OBJECT_SHOW}) { 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 ); // Ignore windows that have been destroyed if (! SafeNativeMethods.IsWindow( nativeHwnd )) return; // Ignore invisible windows (IsWindowVisible takes the hwnd ancestor // visibility into account) if (! SafeNativeMethods.IsWindowVisible( nativeHwnd )) return; if (eventId == NativeMethods.EVENT_OBJECT_CREATE) { // Ignore WCP hwnd creates; we get eventId EventObjectUIFragmentCreate for those // string str = ProxyManager.GetClassName(nativeHwnd); if (String.Compare(str, 0, _wcpClassName, 0, _wcpClassName.Length, StringComparison.OrdinalIgnoreCase) == 0) return; } AutomationElement rawEl = AutomationElement.FromHandle( hwnd ); // 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) ((WindowShowOrOpenHandler)handlers[0])( hwnd, rawEl ); } #endregion Internal Methods //------------------------------------------------------ // // Private Fields // //------------------------------------------------------ #region Private Fields static readonly string _wcpClassName = "HwndWrapper"; #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: // 06/17/2003 : BrendanM Ported to WCP // 11/20/2003 : Micw renamed NewUITracker.cs to WindowShowOrOpenTracker.cs // //--------------------------------------------------------------------------- using System; using System.Globalization; using System.Text; using System.Windows.Automation; using System.Diagnostics; using MS.Win32; namespace MS.Internal.Automation { // WindowShowOrOpenTracker - Class used to track new UI appearing and make sure any events // are propogated to that new UI. internal delegate void WindowShowOrOpenHandler( IntPtr hwnd, AutomationElement rawEl ); // Class used to track new UI appearing and make sure any events // are propogated to that new UI. internal class WindowShowOrOpenTracker : WinEventWrap { //----------------------------------------------------- // // Constructors // //----------------------------------------------------- #region Constructors internal WindowShowOrOpenTracker(WindowShowOrOpenHandler newUIHandler) : base(new int[] {NativeMethods.EventObjectUIFragmentCreate, NativeMethods.EVENT_OBJECT_CREATE, NativeMethods.EVENT_OBJECT_SHOW}) { 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 ); // Ignore windows that have been destroyed if (! SafeNativeMethods.IsWindow( nativeHwnd )) return; // Ignore invisible windows (IsWindowVisible takes the hwnd ancestor // visibility into account) if (! SafeNativeMethods.IsWindowVisible( nativeHwnd )) return; if (eventId == NativeMethods.EVENT_OBJECT_CREATE) { // Ignore WCP hwnd creates; we get eventId EventObjectUIFragmentCreate for those // string str = ProxyManager.GetClassName(nativeHwnd); if (String.Compare(str, 0, _wcpClassName, 0, _wcpClassName.Length, StringComparison.OrdinalIgnoreCase) == 0) return; } AutomationElement rawEl = AutomationElement.FromHandle( hwnd ); // 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) ((WindowShowOrOpenHandler)handlers[0])( hwnd, rawEl ); } #endregion Internal Methods //------------------------------------------------------ // // Private Fields // //------------------------------------------------------ #region Private Fields static readonly string _wcpClassName = "HwndWrapper"; #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
- LineSegment.cs
- ComplexPropertyEntry.cs
- SchemaInfo.cs
- RIPEMD160Managed.cs
- Geometry.cs
- OletxVolatileEnlistment.cs
- SqlClientWrapperSmiStreamChars.cs
- SoapEnumAttribute.cs
- QilTargetType.cs
- PropertyGridCommands.cs
- FeatureSupport.cs
- FrameworkElementFactory.cs
- XPathNode.cs
- MultiplexingFormatMapping.cs
- NamespaceEmitter.cs
- BezierSegment.cs
- DbDataAdapter.cs
- DataGridViewRowsAddedEventArgs.cs
- ObjectDataSourceFilteringEventArgs.cs
- Selection.cs
- ConsumerConnectionPoint.cs
- XmlElementCollection.cs
- EntityViewContainer.cs
- SqlCacheDependency.cs
- OptionUsage.cs
- Helpers.cs
- XmlSchemaSubstitutionGroup.cs
- AuthenticationException.cs
- FilteredXmlReader.cs
- LexicalChunk.cs
- ImageListStreamer.cs
- RequestStatusBarUpdateEventArgs.cs
- DataGridViewTextBoxEditingControl.cs
- ProxyWebPartManager.cs
- EditorPartCollection.cs
- Transform3D.cs
- PatternMatcher.cs
- MatrixTransform3D.cs
- SqlDataSourceDesigner.cs
- PageParser.cs
- LogPolicy.cs
- SafeNativeMethods.cs
- OperandQuery.cs
- webeventbuffer.cs
- FontUnitConverter.cs
- AnimatedTypeHelpers.cs
- CoTaskMemSafeHandle.cs
- StyleCollection.cs
- FieldToken.cs
- ProcessThreadDesigner.cs
- ListCollectionView.cs
- DocumentApplicationDocumentViewer.cs
- StringDictionaryWithComparer.cs
- WizardPanelChangingEventArgs.cs
- CancellableEnumerable.cs
- BrowserDefinition.cs
- MessageAction.cs
- TreeNodeStyle.cs
- XmlSchemaValidator.cs
- DataTablePropertyDescriptor.cs
- EncryptedReference.cs
- GeneralTransformCollection.cs
- MethodAccessException.cs
- SchemaMerger.cs
- SrgsRuleRef.cs
- IArgumentProvider.cs
- WindowsProgressbar.cs
- PhoneCall.cs
- ImageMap.cs
- HebrewCalendar.cs
- ColorConverter.cs
- MediaElementAutomationPeer.cs
- DragEvent.cs
- SamlNameIdentifierClaimResource.cs
- ServiceBuildProvider.cs
- MULTI_QI.cs
- DataObject.cs
- CommonServiceBehaviorElement.cs
- FormsAuthenticationModule.cs
- StorageMappingFragment.cs
- OleDragDropHandler.cs
- RemotingConfigParser.cs
- TypographyProperties.cs
- OciLobLocator.cs
- MetadataPropertyAttribute.cs
- Cursor.cs
- StrokeCollection2.cs
- DataGridSortCommandEventArgs.cs
- MissingFieldException.cs
- GroupBoxRenderer.cs
- PointUtil.cs
- TypeNameParser.cs
- XmlSchemaComplexType.cs
- XmlBufferReader.cs
- KeyedHashAlgorithm.cs
- EventBuilder.cs
- ISAPIRuntime.cs
- VectorCollectionConverter.cs
- RuntimeConfig.cs
- CompilerScopeManager.cs