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
- SpellerError.cs
- MenuItemAutomationPeer.cs
- PolicyManager.cs
- NativeCppClassAttribute.cs
- GlobalizationSection.cs
- _ConnectionGroup.cs
- FixedSOMElement.cs
- TitleStyle.cs
- ProviderManager.cs
- ProcessHostConfigUtils.cs
- SyndicationElementExtension.cs
- RequestSecurityTokenResponse.cs
- typedescriptorpermission.cs
- ObjectDesignerDataSourceView.cs
- ObjectItemCollection.cs
- PerfService.cs
- StorageFunctionMapping.cs
- WindowsListViewGroupHelper.cs
- FileSecurity.cs
- DirectoryObjectSecurity.cs
- MarkupExtensionParser.cs
- ClientOperation.cs
- BooleanSwitch.cs
- SplineKeyFrames.cs
- PersonalizationState.cs
- OneOfElement.cs
- ChannelManagerService.cs
- SystemIPAddressInformation.cs
- DataKeyPropertyAttribute.cs
- SendMailErrorEventArgs.cs
- ApplicationHost.cs
- BackgroundWorker.cs
- TreeNodeConverter.cs
- MarkupCompilePass2.cs
- NativeMethods.cs
- formatter.cs
- LogRecordSequence.cs
- MessageContractExporter.cs
- CellIdBoolean.cs
- NativeMethods.cs
- CqlWriter.cs
- HttpModule.cs
- Set.cs
- CaseInsensitiveComparer.cs
- Pair.cs
- BitmapPalette.cs
- ToolStripSeparator.cs
- DbDataAdapter.cs
- TextEditorParagraphs.cs
- InheritedPropertyChangedEventArgs.cs
- _NtlmClient.cs
- CodeObject.cs
- MenuItemBindingCollection.cs
- PropertyStore.cs
- RootDesignerSerializerAttribute.cs
- GestureRecognizer.cs
- WebPartDeleteVerb.cs
- Vector3DConverter.cs
- Thumb.cs
- PanelDesigner.cs
- BmpBitmapEncoder.cs
- BitmapFrameDecode.cs
- TextDecorationCollectionConverter.cs
- WebPartTransformerAttribute.cs
- DataExchangeServiceBinder.cs
- WorkflowQueue.cs
- NopReturnReader.cs
- FontSource.cs
- StrongNameKeyPair.cs
- DataStreamFromComStream.cs
- SelectionItemPattern.cs
- FormsAuthenticationConfiguration.cs
- SystemException.cs
- ScaleTransform3D.cs
- AppSettingsReader.cs
- Control.cs
- ParameterModifier.cs
- MatcherBuilder.cs
- OrderedDictionary.cs
- DataGridRelationshipRow.cs
- NameValueCollection.cs
- ButtonFlatAdapter.cs
- SystemIcmpV6Statistics.cs
- HttpRuntime.cs
- XsdDuration.cs
- DesignTimeTemplateParser.cs
- PrintPreviewControl.cs
- PingOptions.cs
- FileDialogPermission.cs
- AsymmetricKeyExchangeFormatter.cs
- InstanceDataCollectionCollection.cs
- BinHexEncoder.cs
- SendingRequestEventArgs.cs
- UpdateManifestForBrowserApplication.cs
- DnsPermission.cs
- TimeoutHelper.cs
- ArraySortHelper.cs
- EDesignUtil.cs
- PerformanceCounterPermissionAttribute.cs
- WindowsClientCredential.cs