Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / UIAutomation / UIAutomationClient / MS / Internal / Automation / WindowInteractionStateTracker.cs / 1305600 / 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
- TypeUtil.cs
- SelectedDatesCollection.cs
- ParserHooks.cs
- ShutDownListener.cs
- LoadedOrUnloadedOperation.cs
- ContentDisposition.cs
- EventHandlerList.cs
- RuntimeConfig.cs
- CryptoHelper.cs
- MetadataPropertyAttribute.cs
- DrawingImage.cs
- View.cs
- Bidi.cs
- CanonicalFontFamilyReference.cs
- DynamicValidatorEventArgs.cs
- RequestStatusBarUpdateEventArgs.cs
- AppSettingsSection.cs
- DashStyle.cs
- TargetException.cs
- TabPage.cs
- InstancePersistenceEvent.cs
- TextAdaptor.cs
- WindowsBrush.cs
- RelationshipEndMember.cs
- ArgIterator.cs
- UIElementAutomationPeer.cs
- unsafenativemethodstextservices.cs
- WebPartConnectionsConnectVerb.cs
- CannotUnloadAppDomainException.cs
- BitmapMetadataBlob.cs
- ExecutedRoutedEventArgs.cs
- ContainerUtilities.cs
- FormatConvertedBitmap.cs
- KeySplineConverter.cs
- Frame.cs
- OleDbStruct.cs
- AssemblyAttributesGoHere.cs
- WarningException.cs
- IndexedGlyphRun.cs
- TransformPattern.cs
- _UriSyntax.cs
- ListViewCommandEventArgs.cs
- CompoundFileIOPermission.cs
- HttpDebugHandler.cs
- Select.cs
- DataExpression.cs
- ImageListImageEditor.cs
- SrgsDocumentParser.cs
- FixUp.cs
- SmtpTransport.cs
- XPathBinder.cs
- ReadContentAsBinaryHelper.cs
- DiscoveryInnerClientAdhoc11.cs
- SlotInfo.cs
- TextChange.cs
- SSmlParser.cs
- Pen.cs
- PlainXmlWriter.cs
- FillErrorEventArgs.cs
- WebPartVerbCollection.cs
- ImageSource.cs
- CompiledQueryCacheEntry.cs
- DeflateEmulationStream.cs
- TextDecorationUnitValidation.cs
- CacheChildrenQuery.cs
- StreamUpdate.cs
- ReferentialConstraint.cs
- RectAnimationUsingKeyFrames.cs
- validationstate.cs
- XmlSchemaGroupRef.cs
- DocumentXPathNavigator.cs
- InternalEnumValidatorAttribute.cs
- QuinticEase.cs
- ProxyFragment.cs
- DeclaredTypeElement.cs
- MasterPage.cs
- SchemaTypeEmitter.cs
- XmlSchemaAttributeGroupRef.cs
- MenuBase.cs
- GridLengthConverter.cs
- TemplateNameScope.cs
- BindingMemberInfo.cs
- PropertyBuilder.cs
- LongAverageAggregationOperator.cs
- DashStyles.cs
- ExpressionSelection.cs
- Help.cs
- IOException.cs
- NotifyIcon.cs
- EndPoint.cs
- ProxyHwnd.cs
- TrackingMemoryStreamFactory.cs
- ExcludePathInfo.cs
- DiffuseMaterial.cs
- InnerItemCollectionView.cs
- DiscoveryMessageSequence11.cs
- FrameworkReadOnlyPropertyMetadata.cs
- OleServicesContext.cs
- DbTransaction.cs
- ImportContext.cs