ここでのアプローチや、 UIAutomationイベントとETW for WPFの使用など、いくつかのアプローチを試した後、WPFイベントにハンドラーを単純にアタッチすることにしました。これにより、イベントデータだけでなく、ユーザーの注意を引くUIElementもキャプチャできるため、ユーザーのアクションと意図を追跡するのがはるかに簡単になります。これがなければ、画面のビジュアルをキャプチャして、何が起こっているのかを視覚的に判断する必要があります。
サンプルは次のとおりです。
private Int32 _eventCount;
public MainWindow()
{
InitializeComponent();
EventManager.RegisterClassHandler(typeof(UIElement), MouseEnterEvent, (RoutedEventHandler)handleEvent, true);
EventManager.RegisterClassHandler(typeof(UIElement), MouseLeaveEvent, (RoutedEventHandler)handleEvent, true);
EventManager.RegisterClassHandler(typeof(UIElement), MouseMoveEvent, (RoutedEventHandler)handleEvent, true);
EventManager.RegisterClassHandler(typeof(UIElement), MouseUpEvent, (RoutedEventHandler)handleEvent, true);
EventManager.RegisterClassHandler(typeof(UIElement), MouseDownEvent, (RoutedEventHandler)handleEvent, true);
EventManager.RegisterClassHandler(typeof(UIElement), KeyUpEvent, (RoutedEventHandler)handleEvent, true);
EventManager.RegisterClassHandler(typeof(UIElement), KeyDownEvent, (RoutedEventHandler)handleEvent, true);
}
private void handleEvent(object sender, RoutedEventArgs e)
{
var uiElement = e.Source as UIElement;
if (uiElement == null)
{
return;
}
EventStatusDisplay.Text = e.Source + " " + e.RoutedEvent.Name;
EventCountDisplay.Text = (++_eventCount).ToString();
var over = Mouse.DirectlyOver as UIElement;
MouseIsOverDisplay.Text = over == null ? "" : over.ToString();
}
ここには示されていませんが、UIElement
ログを取得したら、を使用してUIElement.DataContext
、ビューを駆動しているViewModelの状態を判別できるため、特定のワークフローやデータ状態、および視覚的な使用パターンを見つけることができます。状態。次に、これに関するレポートを取得し、ワークフローとデータ値を介してパスごとにヒートマップを区別して比較できます。