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 / WindowInteractionStateTracker.cs / 1 / WindowInteractionStateTracker.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: // 01/05/2005 : Created // //--------------------------------------------------------------------------- using System; using System.Globalization; using System.Text; using System.Windows.Automation; using System.Diagnostics; 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 WindowInteractionStateTracker : WinEventWrap { //----------------------------------------------------- // // Constructors // //----------------------------------------------------- #region Constructors internal WindowInteractionStateTracker() : base(new int[] { NativeMethods.EVENT_OBJECT_STATECHANGE }) { // 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); try { rawEl.GetCurrentPattern(WindowPattern.Pattern); } catch (InvalidOperationException) { // Only raise this event for elements with the WindowPattern. return; } Object windowInteractionState = rawEl.GetPatternPropertyValue(WindowPattern.WindowInteractionStateProperty, false); // if has no state value just return if (!(windowInteractionState is WindowInteractionState)) { return; } WindowInteractionState state = (WindowInteractionState)windowInteractionState; // Filter... avoid duplicate events if (hwnd == _lastHwnd && state == _lastState) { return; } AutomationPropertyChangedEventArgs e = new AutomationPropertyChangedEventArgs( WindowPattern.WindowInteractionStateProperty, hwnd == _lastHwnd ? _lastState : WindowInteractionState.Running, 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 WindowInteractionState _lastState; // keep track of last interaction 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 new UI appearing and make sure any events // are propogated to that new UI. // // History: // 01/05/2005 : Created // //--------------------------------------------------------------------------- using System; using System.Globalization; using System.Text; using System.Windows.Automation; using System.Diagnostics; 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 WindowInteractionStateTracker : WinEventWrap { //----------------------------------------------------- // // Constructors // //----------------------------------------------------- #region Constructors internal WindowInteractionStateTracker() : base(new int[] { NativeMethods.EVENT_OBJECT_STATECHANGE }) { // 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); try { rawEl.GetCurrentPattern(WindowPattern.Pattern); } catch (InvalidOperationException) { // Only raise this event for elements with the WindowPattern. return; } Object windowInteractionState = rawEl.GetPatternPropertyValue(WindowPattern.WindowInteractionStateProperty, false); // if has no state value just return if (!(windowInteractionState is WindowInteractionState)) { return; } WindowInteractionState state = (WindowInteractionState)windowInteractionState; // Filter... avoid duplicate events if (hwnd == _lastHwnd && state == _lastState) { return; } AutomationPropertyChangedEventArgs e = new AutomationPropertyChangedEventArgs( WindowPattern.WindowInteractionStateProperty, hwnd == _lastHwnd ? _lastState : WindowInteractionState.Running, 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 WindowInteractionState _lastState; // keep track of last interaction 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
- IIS7WorkerRequest.cs
- WebMessageFormatHelper.cs
- Utility.cs
- TextBlock.cs
- DependencyPropertyHelper.cs
- RtfNavigator.cs
- SettingsPropertyValue.cs
- Visual.cs
- Button.cs
- PathSegmentCollection.cs
- LinearGradientBrush.cs
- PixelFormats.cs
- CodeGenerator.cs
- TextFormatter.cs
- EdmPropertyAttribute.cs
- XsdBuilder.cs
- JsonMessageEncoderFactory.cs
- EventSinkHelperWriter.cs
- FlowDocument.cs
- ValidationError.cs
- OleDbInfoMessageEvent.cs
- WebAdminConfigurationHelper.cs
- ImageClickEventArgs.cs
- OAVariantLib.cs
- WsdlImporterElementCollection.cs
- ZoneButton.cs
- ProviderConnectionPoint.cs
- AnnotationObservableCollection.cs
- OdbcHandle.cs
- RawTextInputReport.cs
- TextWriterTraceListener.cs
- DbMetaDataCollectionNames.cs
- Int64Converter.cs
- UIElementHelper.cs
- COM2ExtendedTypeConverter.cs
- DataGridViewColumnTypeEditor.cs
- BrowserDefinition.cs
- HtmlWindow.cs
- Boolean.cs
- InfoCardBaseException.cs
- NotifyInputEventArgs.cs
- AccessKeyManager.cs
- QilUnary.cs
- AnnotationHelper.cs
- SchemaMapping.cs
- Stack.cs
- EntityKeyElement.cs
- DbProviderFactories.cs
- BitmapScalingModeValidation.cs
- DataServiceEntityAttribute.cs
- XmlSchemaImporter.cs
- MetadataItem.cs
- RulePatternOps.cs
- SQLDecimalStorage.cs
- EventManager.cs
- DictionaryEntry.cs
- SqlReferenceCollection.cs
- InputReport.cs
- StylusTouchDevice.cs
- TextParentUndoUnit.cs
- PersonalizationProviderHelper.cs
- FrameAutomationPeer.cs
- SmiGettersStream.cs
- CollectionChangeEventArgs.cs
- InheritanceAttribute.cs
- SvcMapFileLoader.cs
- StrokeCollection2.cs
- WorkflowExecutor.cs
- WorkflowDataContext.cs
- DataGridCaption.cs
- BooleanConverter.cs
- TrustVersion.cs
- DeleteCardRequest.cs
- DataSourceSelectArguments.cs
- Color.cs
- SelectionUIHandler.cs
- PrintController.cs
- PreviewPageInfo.cs
- ListControlConvertEventArgs.cs
- StringCollection.cs
- EmbeddedMailObject.cs
- AssertSection.cs
- ErrorProvider.cs
- SchemaImporter.cs
- CompoundFileStorageReference.cs
- ActiveDocumentEvent.cs
- StyleXamlTreeBuilder.cs
- Panel.cs
- FileUtil.cs
- DefaultDiscoveryServiceExtension.cs
- WindowsRichEdit.cs
- DBCommand.cs
- ListControl.cs
- ProfileProvider.cs
- PointF.cs
- ClientScriptManager.cs
- ZipFileInfo.cs
- ObjectDataSourceStatusEventArgs.cs
- DataGridViewColumnConverter.cs
- LinqDataSourceStatusEventArgs.cs