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 / WindowVisualStateTracker.cs / 1 / WindowVisualStateTracker.cs
//---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // // Description: Class used to track the visual appearance of Windows and make sure any events // are propogated to that new UI. // // History: // 01/05/2005 : Miw Created // //--------------------------------------------------------------------------- using System; using System.Windows.Automation; using MS.Win32; namespace MS.Internal.Automation { // Class used to track new UI appearing and make sure any events // are propogated to that new UI. internal class WindowVisualStateTracker : WinEventWrap { //----------------------------------------------------- // // Constructors // //----------------------------------------------------- #region Constructors internal WindowVisualStateTracker() : base(new int[] { NativeMethods.EVENT_OBJECT_LOCATIONCHANGE }) { // Intentionally not setting the callback for the base WinEventWrap since the WinEventProc override // in this class calls RaiseEventInThisClientOnly to actually raise the event to the client. } #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; } OnStateChange(hwnd, idObject, idChild); } #endregion Internal Methods //------------------------------------------------------ // // Private Methods // //------------------------------------------------------ #region Private Methods private void OnStateChange(IntPtr hwnd, int idObject, int idChild) { NativeMethods.HWND nativeHwnd = NativeMethods.HWND.Cast(hwnd); // Ignore windows that have been destroyed if (!SafeNativeMethods.IsWindow(nativeHwnd)) { return; } AutomationElement rawEl = AutomationElement.FromHandle(hwnd); // Raise this event only for elements with the WindowPattern. object patternObject; if (!rawEl.TryGetCurrentPattern(WindowPattern.Pattern, out patternObject)) return; Object windowVisualState = rawEl.GetPatternPropertyValue(WindowPattern.WindowVisualStateProperty, false); // if has no state value just return if (!(windowVisualState is WindowVisualState)) { return; } WindowVisualState state = (WindowVisualState)windowVisualState; // Filter... avoid duplicate events if (hwnd == _lastHwnd && state == _lastState) { return; } AutomationPropertyChangedEventArgs e = new AutomationPropertyChangedEventArgs( WindowPattern.WindowVisualStateProperty, null, state); ClientEventManager.RaiseEventInThisClientOnly(AutomationElement.AutomationPropertyChangedEvent, rawEl, e); // save the last hwnd/rect for filtering out duplicates _lastHwnd = hwnd; _lastState = state; } #endregion Private Methods //----------------------------------------------------- // // Private Fields // //------------------------------------------------------ #region Private Fields private WindowVisualState _lastState; // keep track of last visual state private IntPtr _lastHwnd; // and hwnd for dup checking #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 the visual appearance of Windows and make sure any events // are propogated to that new UI. // // History: // 01/05/2005 : Miw Created // //--------------------------------------------------------------------------- using System; using System.Windows.Automation; using MS.Win32; namespace MS.Internal.Automation { // Class used to track new UI appearing and make sure any events // are propogated to that new UI. internal class WindowVisualStateTracker : WinEventWrap { //----------------------------------------------------- // // Constructors // //----------------------------------------------------- #region Constructors internal WindowVisualStateTracker() : base(new int[] { NativeMethods.EVENT_OBJECT_LOCATIONCHANGE }) { // Intentionally not setting the callback for the base WinEventWrap since the WinEventProc override // in this class calls RaiseEventInThisClientOnly to actually raise the event to the client. } #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; } OnStateChange(hwnd, idObject, idChild); } #endregion Internal Methods //------------------------------------------------------ // // Private Methods // //------------------------------------------------------ #region Private Methods private void OnStateChange(IntPtr hwnd, int idObject, int idChild) { NativeMethods.HWND nativeHwnd = NativeMethods.HWND.Cast(hwnd); // Ignore windows that have been destroyed if (!SafeNativeMethods.IsWindow(nativeHwnd)) { return; } AutomationElement rawEl = AutomationElement.FromHandle(hwnd); // Raise this event only for elements with the WindowPattern. object patternObject; if (!rawEl.TryGetCurrentPattern(WindowPattern.Pattern, out patternObject)) return; Object windowVisualState = rawEl.GetPatternPropertyValue(WindowPattern.WindowVisualStateProperty, false); // if has no state value just return if (!(windowVisualState is WindowVisualState)) { return; } WindowVisualState state = (WindowVisualState)windowVisualState; // Filter... avoid duplicate events if (hwnd == _lastHwnd && state == _lastState) { return; } AutomationPropertyChangedEventArgs e = new AutomationPropertyChangedEventArgs( WindowPattern.WindowVisualStateProperty, null, state); ClientEventManager.RaiseEventInThisClientOnly(AutomationElement.AutomationPropertyChangedEvent, rawEl, e); // save the last hwnd/rect for filtering out duplicates _lastHwnd = hwnd; _lastState = state; } #endregion Private Methods //----------------------------------------------------- // // Private Fields // //------------------------------------------------------ #region Private Fields private WindowVisualState _lastState; // keep track of last visual state private IntPtr _lastHwnd; // and hwnd for dup checking #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
- FontStretchConverter.cs
- sqlser.cs
- GridViewRowCollection.cs
- EventItfInfo.cs
- StringValidatorAttribute.cs
- LayoutTableCell.cs
- _BufferOffsetSize.cs
- DecoderFallbackWithFailureFlag.cs
- Pair.cs
- QueryCacheEntry.cs
- SimpleHandlerBuildProvider.cs
- HttpConfigurationContext.cs
- WorkflowServiceHost.cs
- PersonalizationProvider.cs
- ThreadTrace.cs
- GridViewSortEventArgs.cs
- TextEditorCharacters.cs
- ByteStack.cs
- AppSettingsExpressionBuilder.cs
- DeclaredTypeElementCollection.cs
- UIAgentAsyncBeginRequest.cs
- FullTextState.cs
- XmlJsonWriter.cs
- XmlSchemaImporter.cs
- InfoCardUIAgent.cs
- FtpCachePolicyElement.cs
- List.cs
- COM2ComponentEditor.cs
- XmlConverter.cs
- PathTooLongException.cs
- PerfCounterSection.cs
- MethodExpr.cs
- util.cs
- LinqDataSourceInsertEventArgs.cs
- StructuredTypeEmitter.cs
- XmlAttributeHolder.cs
- QueryOutputWriter.cs
- CompareValidator.cs
- EventData.cs
- WorkflowApplicationUnhandledExceptionEventArgs.cs
- WorkflowRuntimeServiceElementCollection.cs
- COM2PictureConverter.cs
- FontFamily.cs
- SrgsDocument.cs
- ResourceProperty.cs
- _ContextAwareResult.cs
- HostingEnvironmentException.cs
- RTTypeWrapper.cs
- AlternateViewCollection.cs
- OpenTypeLayout.cs
- ClientBuildManagerTypeDescriptionProviderBridge.cs
- ConfigXmlElement.cs
- HttpConfigurationSystem.cs
- System.Data_BID.cs
- OleDbDataReader.cs
- ContactManager.cs
- DbMetaDataFactory.cs
- FunctionMappingTranslator.cs
- ApplicationActivator.cs
- TagNameToTypeMapper.cs
- QuaternionKeyFrameCollection.cs
- X509CertificateCollection.cs
- LabelAutomationPeer.cs
- Cursor.cs
- XAMLParseException.cs
- AssemblyAttributes.cs
- FontStretches.cs
- FusionWrap.cs
- CryptographicAttribute.cs
- PeerResolverMode.cs
- FaultCode.cs
- Base64Encoding.cs
- SByteConverter.cs
- UnsafeNativeMethodsPenimc.cs
- OdbcConnectionString.cs
- BatchServiceHost.cs
- EntityDesignerUtils.cs
- Adorner.cs
- PageContentAsyncResult.cs
- ColumnTypeConverter.cs
- ProfilePropertyNameValidator.cs
- ClientConvert.cs
- FlowNode.cs
- MediaTimeline.cs
- MouseCaptureWithinProperty.cs
- ExpressionConverter.cs
- FileIOPermission.cs
- FixedLineResult.cs
- DateTimeFormat.cs
- MethodImplAttribute.cs
- EventDrivenDesigner.cs
- altserialization.cs
- ExpressionHelper.cs
- PerfService.cs
- FlowLayoutPanel.cs
- SchemaImporterExtensionsSection.cs
- MemberDescriptor.cs
- DataSourceDesigner.cs
- BindingList.cs
- PasswordPropertyTextAttribute.cs