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
- FileSystemInfo.cs
- brushes.cs
- ProcessHostMapPath.cs
- TemplateComponentConnector.cs
- TypeBrowser.xaml.cs
- ProgressiveCrcCalculatingStream.cs
- SapiGrammar.cs
- GridViewColumnCollection.cs
- InternalDispatchObject.cs
- DurableOperationContext.cs
- FormViewRow.cs
- StylusLogic.cs
- PropertyValueChangedEvent.cs
- ClrPerspective.cs
- Compiler.cs
- AggregatePushdown.cs
- printdlgexmarshaler.cs
- ResourceContainer.cs
- XNameConverter.cs
- ListControlDesigner.cs
- AssemblySettingAttributes.cs
- ErrorTableItemStyle.cs
- SqlDataSourceConfigureSelectPanel.cs
- DbSetClause.cs
- RepeaterCommandEventArgs.cs
- NetCodeGroup.cs
- ValidationEventArgs.cs
- EventLogConfiguration.cs
- ByteArrayHelperWithString.cs
- XmlDataCollection.cs
- AutomationIdentifier.cs
- EventMappingSettings.cs
- LinqDataSourceDeleteEventArgs.cs
- FieldNameLookup.cs
- CommentGlyph.cs
- DragDropManager.cs
- NamedPipeAppDomainProtocolHandler.cs
- HiddenField.cs
- BindableAttribute.cs
- WindowsFormsHost.cs
- BaseDataListActionList.cs
- ScrollBar.cs
- EmptyControlCollection.cs
- ExcCanonicalXml.cs
- CreateRefExpr.cs
- PauseStoryboard.cs
- ToolStripTextBox.cs
- WebBrowser.cs
- RowParagraph.cs
- TcpSocketManager.cs
- FormViewModeEventArgs.cs
- XMLDiffLoader.cs
- _Rfc2616CacheValidators.cs
- EditingCommands.cs
- SortedSet.cs
- ServiceBuildProvider.cs
- PopupControlService.cs
- BooleanFacetDescriptionElement.cs
- DependencyObject.cs
- PhysicalAddress.cs
- InheritedPropertyChangedEventArgs.cs
- PrintDialogException.cs
- Grid.cs
- PeerNameRecordCollection.cs
- RightsManagementEncryptedStream.cs
- SmuggledIUnknown.cs
- HostedBindingBehavior.cs
- ManualResetEvent.cs
- AspNetPartialTrustHelpers.cs
- KnownAssembliesSet.cs
- RectangleHotSpot.cs
- SoapCodeExporter.cs
- Helpers.cs
- OperatingSystemVersionCheck.cs
- WebHttpBehavior.cs
- ExpressionCopier.cs
- Timer.cs
- KeyGestureValueSerializer.cs
- SizeF.cs
- InvalidWMPVersionException.cs
- TdsParameterSetter.cs
- ContextMenuStrip.cs
- SqlReferenceCollection.cs
- ConsoleCancelEventArgs.cs
- MenuScrollingVisibilityConverter.cs
- COM2FontConverter.cs
- _ShellExpression.cs
- DataGridViewComboBoxEditingControl.cs
- ObjectStateEntryDbUpdatableDataRecord.cs
- UrlUtility.cs
- DataSourceControlBuilder.cs
- ManipulationInertiaStartingEventArgs.cs
- Compress.cs
- IgnoreFlushAndCloseStream.cs
- TTSEngineTypes.cs
- HttpProfileBase.cs
- JoinSymbol.cs
- SafeFileHandle.cs
- ItemsPresenter.cs
- NavigationService.cs