Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
- QuerySettings.cs
- InstallerTypeAttribute.cs
- SafeCloseHandleCritical.cs
- HttpHandlersSection.cs
- AddInProcess.cs
- ObjectContext.cs
- RelatedImageListAttribute.cs
- SerializerProvider.cs
- ElementHost.cs
- TextDecorationUnitValidation.cs
- DependencyPropertyKey.cs
- DbParameterHelper.cs
- PointCollectionValueSerializer.cs
- TabControlCancelEvent.cs
- TagPrefixInfo.cs
- NCryptNative.cs
- TableColumn.cs
- PageAdapter.cs
- ImpersonateTokenRef.cs
- Ports.cs
- AttachedPropertyBrowsableForTypeAttribute.cs
- RoleServiceManager.cs
- ClientType.cs
- Control.cs
- WindowsListViewSubItem.cs
- MobileCapabilities.cs
- DataObjectCopyingEventArgs.cs
- OdbcStatementHandle.cs
- ChangeProcessor.cs
- SecureEnvironment.cs
- PatternMatcher.cs
- PeerCollaboration.cs
- URLAttribute.cs
- ReachIDocumentPaginatorSerializer.cs
- XmlUrlResolver.cs
- HttpAsyncResult.cs
- XmlCDATASection.cs
- ServiceDurableInstance.cs
- StyleSheetDesigner.cs
- UrlParameterReader.cs
- Line.cs
- EntitySet.cs
- RNGCryptoServiceProvider.cs
- FormsAuthenticationCredentials.cs
- EventMappingSettings.cs
- CutCopyPasteHelper.cs
- NetworkInterface.cs
- InternalPolicyElement.cs
- MemberJoinTreeNode.cs
- MissingSatelliteAssemblyException.cs
- ImageDesigner.cs
- TreeViewAutomationPeer.cs
- SoapHeaderAttribute.cs
- DbQueryCommandTree.cs
- NetMsmqBinding.cs
- TextBlock.cs
- DuplicateWaitObjectException.cs
- DBSqlParserTable.cs
- CodeTypeDeclaration.cs
- TimeoutValidationAttribute.cs
- SineEase.cs
- CatalogUtil.cs
- Validator.cs
- Matrix3D.cs
- SectionRecord.cs
- Container.cs
- securitycriticaldataClass.cs
- DependencyPropertyAttribute.cs
- NullableBoolConverter.cs
- EventPropertyMap.cs
- MessageQueueKey.cs
- UpWmlMobileTextWriter.cs
- WebSysDescriptionAttribute.cs
- DefaultTextStoreTextComposition.cs
- ChtmlCalendarAdapter.cs
- XamlReaderHelper.cs
- Shape.cs
- GraphicsPath.cs
- DecodeHelper.cs
- SafeCryptoHandles.cs
- CommandField.cs
- Int32Rect.cs
- TemplatedMailWebEventProvider.cs
- System.Data.OracleClient_BID.cs
- GrabHandleGlyph.cs
- FacetDescription.cs
- DetailsViewInsertedEventArgs.cs
- TypeDelegator.cs
- RectAnimationClockResource.cs
- RegistryKey.cs
- CompModSwitches.cs
- EmptyStringExpandableObjectConverter.cs
- SelectionRange.cs
- OutputCacheSection.cs
- Icon.cs
- GeneralTransform3DGroup.cs
- PersonalizationStateInfo.cs
- SecurityTokenContainer.cs
- Highlights.cs
- FormViewPagerRow.cs