Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / AccessibleTech / longhorn / Automation / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- WindowsListViewGroup.cs
- DataGridPageChangedEventArgs.cs
- TransformerTypeCollection.cs
- GetImportFileNameRequest.cs
- InkCanvasFeedbackAdorner.cs
- DataGridColumn.cs
- MultiBindingExpression.cs
- EnvironmentPermission.cs
- NamespaceDisplayAutomationPeer.cs
- StrongNameKeyPair.cs
- DataError.cs
- ToolStripDropDownButton.cs
- ConfigXmlAttribute.cs
- ByeMessageCD1.cs
- X509KeyIdentifierClauseType.cs
- CompoundFileDeflateTransform.cs
- SynchronizationContext.cs
- EventMappingSettingsCollection.cs
- RegexCharClass.cs
- ListControl.cs
- FragmentQueryProcessor.cs
- Configuration.cs
- XpsResourceDictionary.cs
- ContentFilePart.cs
- ReadWriteObjectLock.cs
- HttpListenerResponse.cs
- ByteStack.cs
- SqlFunctionAttribute.cs
- Profiler.cs
- DataGridViewCell.cs
- ProviderConnectionPoint.cs
- DataControlFieldCell.cs
- SelectionRange.cs
- DrawTreeNodeEventArgs.cs
- CroppedBitmap.cs
- DrawingGroup.cs
- PersonalizationEntry.cs
- MimeXmlReflector.cs
- TextEditorLists.cs
- TemplateBuilder.cs
- ThemeDirectoryCompiler.cs
- EntityDataSourceConfigureObjectContext.cs
- OutOfMemoryException.cs
- PkcsMisc.cs
- _ConnectionGroup.cs
- odbcmetadatacollectionnames.cs
- CustomValidator.cs
- InputLangChangeEvent.cs
- XmlSignificantWhitespace.cs
- DataControlLinkButton.cs
- DispatcherTimer.cs
- InvokeHandlers.cs
- ForeignKeyConstraint.cs
- ServicePointManagerElement.cs
- Style.cs
- RoleGroupCollection.cs
- DataGridViewCellLinkedList.cs
- WindowsAuthenticationModule.cs
- ViewBox.cs
- Executor.cs
- SqlUnionizer.cs
- _SslStream.cs
- XmlObjectSerializerReadContext.cs
- XmlNamespaceManager.cs
- ExecutionContext.cs
- ButtonBaseDesigner.cs
- WebHttpElement.cs
- SqlCacheDependencySection.cs
- XsdBuilder.cs
- DataGridViewColumn.cs
- listitem.cs
- LinqDataSourceHelper.cs
- XsdCachingReader.cs
- MenuItem.cs
- FormsAuthenticationEventArgs.cs
- ConfigXmlText.cs
- ObservableCollection.cs
- ReaderContextStackData.cs
- GC.cs
- TextBox.cs
- EnumValidator.cs
- TrackingProfileCache.cs
- DefaultCommandConverter.cs
- DeviceSpecific.cs
- CategoryNameCollection.cs
- DataGridRowsPresenter.cs
- IdnMapping.cs
- EntityDataSourceSelectedEventArgs.cs
- WebPartVerb.cs
- ElementAction.cs
- ContainerControlDesigner.cs
- MarkupExtensionReturnTypeAttribute.cs
- ProxyWebPart.cs
- PropertyValueChangedEvent.cs
- IconBitmapDecoder.cs
- ServiceSecurityAuditBehavior.cs
- AsyncResult.cs
- PkcsUtils.cs
- FragmentQuery.cs
- ManageRequest.cs