예제 #1
0
 public MouseEntry(bool isUp, MouseButtons button, ManagedWinapi.Windows.POINT point)
 {
     this.isUp   = isUp;
     this.button = button;
     this.point  = point;
     llEntry     = new LLRecordEntry();
 }
예제 #2
0
 public KBEntry(bool isUp, Key key, IntPtr inputHandle)
 {
     this.isUp        = isUp;
     this.key         = key;
     this.inputHandle = inputHandle;
     llEntry          = new LLRecordEntry();
 }
예제 #3
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));
            }
        }