コード例 #1
0
        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));
            }
        }
コード例 #2
0
 private void OutputEntry(AnalyzedLLRecordEntry entry)
 {
     Debug.WriteLine(string.Format("LL Analyzed : {0}\t{1}\r\n{2}", entry.Time, entry.CodePath, entry.Action));
 }