2017-07-31 9 views
-1

私は、スクリーンショットですべてのユーザーアクティビティを追跡するアプリケーションを持っています。私は問題を抱えているのですが、報告するうちに、ユーザーが特定の分野のキープレスイベントにどれくらいの時間を費やしているかを知りたいと思っています。 ここにサンプルデータがあります。linqのイベントタイプに基づいてgroupbyを実行

public class UserActivityData 
    { 
     [DisplayName("Process Name")] 
     public string ProcessName { get; set; } 
     [DisplayName("Window Title")] 
     public string WindowTitle { get; set; } 
     [DisplayName("Event Type")] 
     public EventType EventType { get; set; } 
     [DisplayName("Event Time")] 
     public string EventTime { get; set; } 
     [DisplayName("Total Time Spent In Secs")] 
     public string TotalTimeSpent { get; set; } 
     public int X { get; set; } 
     public int Y { get; set; } 
     [DisplayName("Capture Data")] 
     public string CaptureData { get; set; } 
     public string ApplicationPath { get; set; } 
     [DisplayName("Element Name")] 
     public string ElementName { get; set; } 
     [DisplayName("Automation ID")] 
     public string AutomationID { get; set; } 
     [DisplayName("Control Type")] 
     public string ControlType { get; set; } 
     public long LongEventTime { get; set; } 
    } 


public enum EventType 
    { 
    RightClick, 
    LeftClick, 
    MiddleButton, 
    MouseMove, 
    DoubleClick, 
    KeyPress, 
    Copy, 
    Paste, 
    Focus, 
    Open, 
    Close, 
    FiddlerRequest 
} 

これは、データセットを保持するクラスです。

[{"ProcessName":"explorer","WindowTitle":"explorer","EventType":1,"EventTime":"28-Jul-2017 06:39:24","X":255,"Y":354,"CaptureData":"","ApplicationPath":"C:\\Windows\\Explorer.EXE","ElementName":"","AutomationID":"","ControlType":"list item","LongEventTime":636368639643087155}, 
{"ProcessName":"explorer","WindowTitle":"explorer","EventType":1,"EventTime":"28-Jul-2017 06:39:25","X":253,"Y":268,"CaptureData":"","ApplicationPath":"C:\\Windows\\Explorer.EXE","ElementName":"","AutomationID":"","ControlType":"list item","LongEventTime":636368639650818276}, 
{"ProcessName":"explorer","WindowTitle":"explorer","EventType":1,"EventTime":"28-Jul-2017 06:39:25","X":266,"Y":176,"CaptureData":"","ApplicationPath":"C:\\Windows\\Explorer.EXE","ElementName":"","AutomationID":"","ControlType":"list item","LongEventTime":636368639659717952}, 
{"ProcessName":"explorer","WindowTitle":"explorer","EventType":1,"EventTime":"28-Jul-2017 06:39:27","X":212,"Y":342,"CaptureData":"","ApplicationPath":"C:\\Windows\\Explorer.EXE","ElementName":"","AutomationID":"","ControlType":"list item","LongEventTime":636368639670828333}, 
{"ProcessName":"explorer","WindowTitle":"explorer","EventType":1,"EventTime":"28-Jul-2017 06:39:28","X":129,"Y":542,"CaptureData":"","ApplicationPath":"C:\\Windows\\Explorer.EXE","ElementName":"","AutomationID":"","ControlType":"list item","LongEventTime":636368639680374536}, 
{"ProcessName":"WinSCP","WindowTitle":"WinSCP","EventType":1,"EventTime":"28-Jul-2017 06:39:30","X":589,"Y":301,"CaptureData":"","ApplicationPath":"C:\\Program Files (x86)\\WinSCP\\WinSCP.exe","ElementName":"","AutomationID":"1051654","ControlType":"edit","LongEventTime":636368639705742531}, 
{"ProcessName":"WinSCP","WindowTitle":"Login","EventType":5,"EventTime":"28-Jul-2017 06:39:31","X":589,"Y":301,"CaptureData":"r","ApplicationPath":"C:\\Program Files (x86)\\WinSCP\\WinSCP.exe","ElementName":"","AutomationID":"1051654","ControlType":"edit","LongEventTime":636368639714952510}, 
{"ProcessName":"WinSCP","WindowTitle":"Login","EventType":5,"EventTime":"28-Jul-2017 06:39:31","X":589,"Y":301,"CaptureData":"a","ApplicationPath":"C:\\Program Files (x86)\\WinSCP\\WinSCP.exe","ElementName":"r","AutomationID":"1051654","ControlType":"edit","LongEventTime":636368639716392533}, 
{"ProcessName":"WinSCP","WindowTitle":"Login","EventType":5,"EventTime":"28-Jul-2017 06:39:31","X":589,"Y":301,"CaptureData":"v","ApplicationPath":"C:\\Program Files (x86)\\WinSCP\\WinSCP.exe","ElementName":"ra","AutomationID":"1051654","ControlType":"edit","LongEventTime":636368639718522707}, 
{"ProcessName":"WinSCP","WindowTitle":"Login","EventType":5,"EventTime":"28-Jul-2017 06:39:32","X":589,"Y":301,"CaptureData":"i","ApplicationPath":"C:\\Program Files (x86)\\WinSCP\\WinSCP.exe","ElementName":"rav","AutomationID":"1051654","ControlType":"edit","LongEventTime":636368639720202589}, 
{"ProcessName":"WinSCP","WindowTitle":"Login","EventType":5,"EventTime":"28-Jul-2017 06:39:32","X":589,"Y":301,"CaptureData":"k","ApplicationPath":"C:\\Program Files (x86)\\WinSCP\\WinSCP.exe","ElementName":"ravi","AutomationID":"1051654","ControlType":"edit","LongEventTime":636368639722662623}, 
{"ProcessName":"WinSCP","WindowTitle":"Login","EventType":5,"EventTime":"28-Jul-2017 06:39:32","X":589,"Y":301,"CaptureData":"a","ApplicationPath":"C:\\Program Files (x86)\\WinSCP\\WinSCP.exe","ElementName":"ravik","AutomationID":"1051654","ControlType":"edit","LongEventTime":636368639724112642}, 
{"ProcessName":"WinSCP","WindowTitle":"Login","EventType":5,"EventTime":"28-Jul-2017 06:39:32","X":589,"Y":301,"CaptureData":"n","ApplicationPath":"C:\\Program Files (x86)\\WinSCP\\WinSCP.exe","ElementName":"ravika","AutomationID":"1051654","ControlType":"edit","LongEventTime":636368639725722813}, 
{"ProcessName":"WinSCP","WindowTitle":"Login","EventType":5,"EventTime":"28-Jul-2017 06:39:32","X":589,"Y":301,"CaptureData":"t","ApplicationPath":"C:\\Program Files (x86)\\WinSCP\\WinSCP.exe","ElementName":"ravikan","AutomationID":"1051654","ControlType":"edit","LongEventTime":636368639727382686}, 
{"ProcessName":"WinSCP","WindowTitle":"Login","EventType":5,"EventTime":"28-Jul-2017 06:39:32","X":589,"Y":301,"CaptureData":"h","ApplicationPath":"C:\\Program Files (x86)\\WinSCP\\WinSCP.exe","ElementName":"ravikant","AutomationID":"1051654","ControlType":"edit","LongEventTime":636368639728952705}, 
{"ProcessName":"WinSCP","WindowTitle":"Login","EventType":5,"EventTime":"28-Jul-2017 06:39:34","X":589,"Y":301,"CaptureData":"\u0001","ApplicationPath":"C:\\Program Files (x86)\\WinSCP\\WinSCP.exe","ElementName":"ravikanth","AutomationID":"1051654","ControlType":"edit","LongEventTime":636368639741393315}, 
{"ProcessName":"WinSCP","WindowTitle":"Login","EventType":6,"EventTime":"28-Jul-2017 06:39:35","X":589,"Y":301,"CaptureData":"ravikanth","ApplicationPath":"","ElementName":"ravikanth","AutomationID":"1051654","ControlType":"edit","LongEventTime":636368639751728266}, 
{"ProcessName":"WinSCP","WindowTitle":"WinSCP","EventType":1,"EventTime":"28-Jul-2017 06:39:37","X":669,"Y":346,"CaptureData":"","ApplicationPath":"C:\\Program Files (x86)\\WinSCP\\WinSCP.exe","ElementName":"","AutomationID":"7930456","ControlType":"edit","LongEventTime":636368639771735142}, 
{"ProcessName":"WinSCP","WindowTitle":"Login","EventType":7,"EventTime":"28-Jul-2017 06:39:38","X":666,"Y":349,"CaptureData":"ravikanth","ApplicationPath":"C:\\Program Files (x86)\\WinSCP\\WinSCP.exe","ElementName":"","AutomationID":"7930456","ControlType":"edit","LongEventTime":636368639780934311}, 
{"ProcessName":"WinSCP","WindowTitle":"WinSCP","EventType":1,"EventTime":"28-Jul-2017 06:39:39","X":762,"Y":356,"CaptureData":"","ApplicationPath":"C:\\Program Files (x86)\\WinSCP\\WinSCP.exe","ElementName":"","AutomationID":"20186264","ControlType":"edit","LongEventTime":636368639792061233}, 
{"ProcessName":"WinSCP","WindowTitle":"Login","EventType":7,"EventTime":"28-Jul-2017 06:39:40","X":762,"Y":356,"CaptureData":"ravikanth","ApplicationPath":"C:\\Program Files (x86)\\WinSCP\\WinSCP.exe","ElementName":"","AutomationID":"20186264","ControlType":"edit","LongEventTime":636368639805472017}, 
{"ProcessName":"WinSCP","WindowTitle":"WinSCP","EventType":1,"EventTime":"28-Jul-2017 06:39:47","X":673,"Y":239,"CaptureData":"","ApplicationPath":"C:\\Program Files (x86)\\WinSCP\\WinSCP.exe","ElementName":"Session","AutomationID":"4262798","ControlType":"pane","LongEventTime":636368639876601809}, 
{"ProcessName":"WinSCP","WindowTitle":"WinSCP","EventType":1,"EventTime":"28-Jul-2017 06:39:48","X":671,"Y":255,"CaptureData":"","ApplicationPath":"C:\\Program Files (x86)\\WinSCP\\WinSCP.exe","ElementName":"Drop Down Button","AutomationID":"DropDown","ControlType":"button","LongEventTime":636368639880488395}, 
{"ProcessName":"WinSCP","WindowTitle":"WinSCP","EventType":1,"EventTime":"28-Jul-2017 06:39:49","X":643,"Y":303,"CaptureData":"","ApplicationPath":"C:\\Program Files (x86)\\WinSCP\\WinSCP.exe","ElementName":"WebDAV","AutomationID":"","ControlType":"list item","LongEventTime":636368639891350690}, 
{"ProcessName":"WinSCP","WindowTitle":"WinSCP","EventType":1,"EventTime":"28-Jul-2017 06:39:50","X":806,"Y":259,"CaptureData":"","ApplicationPath":"C:\\Program Files (x86)\\WinSCP\\WinSCP.exe","ElementName":"No encryption","AutomationID":"5374814","ControlType":"combo box","LongEventTime":636368639903461809}, 
{"ProcessName":"WinSCP","WindowTitle":"WinSCP","EventType":1,"EventTime":"28-Jul-2017 06:39:51","X":791,"Y":277,"CaptureData":"","ApplicationPath":"C:\\Program Files (x86)\\WinSCP\\WinSCP.exe","ElementName":"TLS/SSL Implicit encryption","AutomationID":"","ControlType":"list item","LongEventTime":636368639912755112}, 
{"ProcessName":"WinSCP","WindowTitle":"WinSCP","EventType":1,"EventTime":"28-Jul-2017 06:39:52","X":757,"Y":558,"CaptureData":"","ApplicationPath":"C:\\Program Files (x86)\\WinSCP\\WinSCP.exe","ElementName":"Close","AutomationID":"1509814","ControlType":"button","LongEventTime":636368639929011583}] 

私は、イベントタイプKeyPressイベントに基づいてGROUPBYを行うためにLINQクエリを記述し、費やした時間の合計を取得するための助けが必要。

enter image description here

+0

ねえ@raviは、あなたのデータセットをしてください保持するクラスを提供することができますか? – garfbradaz

+0

'LongEventTime'はミリ秒単位またはティック単位で費やされる時間ですか? – Marco

+0

LongEventTimeはTicksです.. –

答えて

0

私はあなたのクラスに2つの小さな変更を行わ:私はあなたの列挙を実装したくなかったので、私は、文字列にイベントタイプを変更し

  1. を。
  2. "EventTime"をタイプDateTimeに変更しました。この方法では、クエリで文字列を日付に解析する必要はありません。私はそのクエリを使用して、この

var data = new JavaScriptSerializer().Deserialize<List<UserActivityData>>(File.ReadAllText(@"C:\users\foo\desktop\demo.json")); //saved your data locally 
data.Where(x => x.EventType == "5") // 5 is KeyPress 
    .GroupBy(d => d.ProcessName) //Grouping by ProcessName 
    .Select (d => new { 
     ProcessName = d.FirstOrDefault().ProcessName, 
     //get Max; substract min; get rough duration in seconds 
     Duration = d.Max (x => x.EventTime) - d.Min (x => x.EventTime), 
     //sum up all ticks to get duration in ticks 
     DurationTicks = d.Sum (x => x.LongEventTime) 
    }) 
    //LinqPad native; do not use in Visual Studio or VS Code 
    .Dump(); 

出力: enter image description here

+0

私はそれを達成することができませんVscodeは私を助けることができます.. –

+0

いいえ、あなたが私に教えない限り、何が動作しません。私はあなたの頭やあなたのコンピュータの画面に表示されません。 – Marco

関連する問題