public void Analyze() { if (recorder.Entries.Count == 0) { return; } LLRecordEntry lastEntry = recorder.Entries[0] as LLRecordEntry; string keys = ""; for (int i = 1; i < recorder.Entries.Count; i++) { LLRecordEntry entry = recorder.Entries[i] as LLRecordEntry; AnalyzedLLRecordEntry newEntry = null; #region Keys Handling if (entry.Key != System.Windows.Input.Key.None) { if (entry.CodePath != lastEntry.CodePath) { if (keys != "") { newEntry = new AnalyzedLLRecordEntry(lastEntry.CodePath, keys, entry.Time, lastEntry.Type, lastEntry.Name); keys = ""; } keys += MapKeyToString(entry.Key, entry.InputHandle); } else { if (!entry.IsKeyUp && (lastEntry.Key != entry.Key || lastEntry.IsKeyUp)) { keys += MapKeyToString(entry.Key, entry.InputHandle); } } } else if (keys != "") { newEntry = new AnalyzedLLRecordEntry(lastEntry.CodePath, keys, entry.Time, lastEntry.Type, lastEntry.Name); keys = ""; } #endregion #region Mouse Handling if (entry.Button != System.Windows.Forms.MouseButtons.None) { if (entry.IsMouseUp) { if (CalcDistance(entry.AbsPoint, lastEntry.AbsPoint) < 10) { if (analyzedEntries.Count > 0) { AnalyzedLLRecordEntry lastAnalyzedEntry = analyzedEntries[analyzedEntries.Count - 1] as AnalyzedLLRecordEntry; if (lastAnalyzedEntry.Action == "Click" && lastAnalyzedEntry.CodePath == entry.CodePath && lastAnalyzedEntry.Button == entry.Button && entry.Time - lastAnalyzedEntry.Time < new TimeSpan(0, 0, 3) && CalcDistance(entry.RelativePoint, lastAnalyzedEntry.RelativePoint1) < 10) { //Double-Click analyzedEntries.RemoveAt(analyzedEntries.Count - 1); newEntry = new AnalyzedLLRecordEntry(entry.CodePath, "DoubleClick", entry.Button, entry.RelativePoint, entry.Time, entry.Type, entry.Name); OutputEntry(newEntry); analyzedEntries.Add(newEntry); continue; } } //Click newEntry = new AnalyzedLLRecordEntry(lastEntry.CodePath, "Click", lastEntry.Button, lastEntry.RelativePoint, lastEntry.Time, lastEntry.Type, lastEntry.Name); } if (!lastEntry.IsMouseUp && CalcDistance(entry.AbsPoint, lastEntry.AbsPoint) > 10) { //Drag newEntry = new AnalyzedLLRecordEntry(lastEntry.CodePath, "Drag", entry.Button, lastEntry.RelativePoint, entry.Time, lastEntry.Type, lastEntry.Name); Point rel2 = new Point(lastEntry.RelativePoint.X + entry.AbsPoint.X - lastEntry.AbsPoint.X, lastEntry.RelativePoint.Y + entry.AbsPoint.Y - lastEntry.AbsPoint.Y); newEntry.RelativePoint2 = rel2; } } else { if (!lastEntry.IsMouseUp && entry.Button == lastEntry.Button) { newEntry = new AnalyzedLLRecordEntry(lastEntry.CodePath, "Click", lastEntry.Button, lastEntry.RelativePoint, lastEntry.Time, lastEntry.Type, lastEntry.Name); } } } #endregion #region Misc Handling if (entry.Action != null) { if (newEntry != null && newEntry.CodePath != null && newEntry.CodePath.Length > 0) { OutputEntry(newEntry); analyzedEntries.Add(newEntry); } newEntry = new AnalyzedLLRecordEntry(entry.CodePath, entry.Time, entry.Action, entry.Name, entry.ActionParams); } #endregion if (newEntry != null && newEntry.CodePath != null && newEntry.CodePath.Length > 0) { OutputEntry(newEntry); analyzedEntries.Add(newEntry); } lastEntry = entry; } if (keys != "" && !keys.Contains(keysFiltering)) { analyzedEntries.Add(new AnalyzedLLRecordEntry(lastEntry.CodePath, keys, lastEntry.Time, lastEntry.Type, lastEntry.Name)); } }
private void OutputEntry(AnalyzedLLRecordEntry entry) { Debug.WriteLine(string.Format("LL Analyzed : {0}\t{1}\r\n{2}", entry.Time, entry.CodePath, entry.Action)); }