Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- CqlLexer.cs
- Table.cs
- TableParaClient.cs
- RequestCachingSection.cs
- TemplatedWizardStep.cs
- InfiniteIntConverter.cs
- BaseResourcesBuildProvider.cs
- XmlSchemaValidationException.cs
- QueueProcessor.cs
- AmbiguousMatchException.cs
- MemberRelationshipService.cs
- CodeGenHelper.cs
- WCFServiceClientProxyGenerator.cs
- SamlAttribute.cs
- CssClassPropertyAttribute.cs
- CompressedStack.cs
- XmlSchemaSimpleContentRestriction.cs
- RangeValidator.cs
- ProjectionCamera.cs
- NoneExcludedImageIndexConverter.cs
- Overlapped.cs
- OracleMonthSpan.cs
- SQLConvert.cs
- WindowsGraphics2.cs
- SafeMemoryMappedViewHandle.cs
- WindowsNonControl.cs
- COM2EnumConverter.cs
- SystemIPGlobalProperties.cs
- Selector.cs
- ComplexLine.cs
- Byte.cs
- EntityCollection.cs
- CryptoKeySecurity.cs
- EntityCommand.cs
- HtmlControlPersistable.cs
- CacheSection.cs
- Pipe.cs
- ValueSerializer.cs
- NamespaceInfo.cs
- PlatformCulture.cs
- WindowsSlider.cs
- ServiceModelDictionary.cs
- SetStoryboardSpeedRatio.cs
- ContainerControl.cs
- SqlEnums.cs
- VersionPair.cs
- Unit.cs
- SizeF.cs
- FrameworkTemplate.cs
- XmlRawWriter.cs
- DecimalStorage.cs
- _ConnectStream.cs
- MaskInputRejectedEventArgs.cs
- COM2PropertyPageUITypeConverter.cs
- Mutex.cs
- AttachmentService.cs
- OTFRasterizer.cs
- GlyphInfoList.cs
- PriorityChain.cs
- StatusBarItem.cs
- FormDesigner.cs
- LiteralControl.cs
- mansign.cs
- IOThreadScheduler.cs
- ThreadSafeList.cs
- Util.cs
- ByeMessageApril2005.cs
- EnumType.cs
- XmlSchemaObject.cs
- ArgumentNullException.cs
- OAVariantLib.cs
- AuthenticationModuleElementCollection.cs
- MarginCollapsingState.cs
- WpfKnownMemberInvoker.cs
- DesignerTransaction.cs
- TableRowCollection.cs
- BehaviorService.cs
- ResourceAssociationType.cs
- CompositeDuplexElement.cs
- Section.cs
- FontNamesConverter.cs
- DocumentPage.cs
- RemoteDebugger.cs
- GlyphRunDrawing.cs
- VarRemapper.cs
- EnumValidator.cs
- GeneralTransform3DTo2D.cs
- CommonProperties.cs
- OutputCacheProfile.cs
- CatalogZoneBase.cs
- Codec.cs
- AnnotationHighlightLayer.cs
- Canvas.cs
- Timer.cs
- IDictionary.cs
- AsmxEndpointPickerExtension.cs
- WorkflowRuntimeEndpoint.cs
- EmptyEnumerable.cs
- TextBox.cs
- DispatcherTimer.cs