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 / 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
- SqlXml.cs
- DefaultWorkflowSchedulerService.cs
- PropertyEmitterBase.cs
- CustomLineCap.cs
- DataServices.cs
- FilterQuery.cs
- SecurityRequiresReviewAttribute.cs
- SimpleTypeResolver.cs
- VectorAnimation.cs
- WindowsEditBox.cs
- Parameter.cs
- EntitySqlQueryState.cs
- TranslateTransform.cs
- _LoggingObject.cs
- DisposableCollectionWrapper.cs
- URLMembershipCondition.cs
- IsolatedStorageException.cs
- ContentElementCollection.cs
- reliableinputsessionchannel.cs
- TagElement.cs
- BufferBuilder.cs
- WsdlContractConversionContext.cs
- ImageFormat.cs
- TdsParserHelperClasses.cs
- NavigatingCancelEventArgs.cs
- ContentOperations.cs
- ListViewTableCell.cs
- GridEntry.cs
- DataKeyArray.cs
- Util.cs
- MethodRental.cs
- IListConverters.cs
- SerializationStore.cs
- StylusPointPropertyInfo.cs
- SupportsEventValidationAttribute.cs
- DefaultValueTypeConverter.cs
- GenericUI.cs
- RequestCachingSection.cs
- HyperLinkStyle.cs
- DrawingAttributesDefaultValueFactory.cs
- DropTarget.cs
- SignedPkcs7.cs
- CompositeFontInfo.cs
- CounterCreationData.cs
- AlgoModule.cs
- DateTime.cs
- PlanCompiler.cs
- GenerateScriptTypeAttribute.cs
- Oid.cs
- TextElementCollection.cs
- UnmanagedMemoryStreamWrapper.cs
- Expr.cs
- Pair.cs
- XamlReaderHelper.cs
- InputScopeAttribute.cs
- EastAsianLunisolarCalendar.cs
- CopyAttributesAction.cs
- FixedLineResult.cs
- Parser.cs
- VideoDrawing.cs
- HttpProtocolImporter.cs
- DataGridViewDataErrorEventArgs.cs
- VirtualizingPanel.cs
- PrintDialog.cs
- RuntimeArgumentHandle.cs
- Switch.cs
- ExpressionBuilder.cs
- ScrollData.cs
- EntityContainerAssociationSet.cs
- OptimisticConcurrencyException.cs
- StateChangeEvent.cs
- InvalidEnumArgumentException.cs
- ComboBoxItem.cs
- RectAnimationClockResource.cs
- mansign.cs
- AppPool.cs
- ToggleButton.cs
- ExeContext.cs
- FixedPosition.cs
- XmlUrlResolver.cs
- ScriptBehaviorDescriptor.cs
- ParentUndoUnit.cs
- SecondaryIndexDefinition.cs
- DesignerActionListCollection.cs
- CalendarAutoFormatDialog.cs
- SortAction.cs
- UnionExpr.cs
- DesignerView.xaml.cs
- ContentValidator.cs
- Win32.cs
- SmtpDigestAuthenticationModule.cs
- WinFormsSpinner.cs
- LocalIdKeyIdentifierClause.cs
- InitializerFacet.cs
- _NTAuthentication.cs
- ReturnEventArgs.cs
- PairComparer.cs
- BamlCollectionHolder.cs
- CodeExporter.cs
- TerminatorSinks.cs