public NetworkedHooker(ViewModel model) { Model = model; Hooker = new Hooker(); if (!HookEvents.IsAlreadyRegistered()) { HookEvents.RegisterItself(); } Model.PropertyChanged += (a, b) => { if (b.PropertyName == ViewModel.CaptureScreenShotsProperty) { if (Model.CaptureScreenShots == true) { EnableRecorder(); } else { Recorder?.Dispose(); Recorder = null; } } }; if (Model.CaptureScreenShots) // default is to enable it { EnableRecorder(); } Hooker.OnKeyDown += Hooker_OnKeyDown; Hooker.OnMouseButton += Hooker_OnMouseButton; Hooker.OnMouseMove += Hooker_OnMouseMove; Hooker.OnMouseWheel += Hooker_OnMouseWheel; }
public void EnsureOldestFilesAreCleared() { using (var tmp = TempDir.Create()) { for (int i = 0; i < 20; i++) { FileInfo fi = new FileInfo(Path.Combine(tmp.Name, $"{i}.jpg")); using (fi.Create()) { } fi.CreationTime = DateTime.Now + TimeSpan.FromMinutes(i); } Assert.AreEqual(20, Directory.GetFiles(tmp.Name, "*.jpg").Length); ScreenshotRecorder.ClearFiles(tmp.Name, 10); HashSet <string> expectedFiles = new HashSet <string>(Enumerable.Range(10, 10).Select(x => $"{x}.jpg")); var afterDeletion = Directory.GetFiles(tmp.Name, "*.jpg"); Assert.AreEqual(10, afterDeletion.Length); foreach (var file in afterDeletion) { string jpg = Path.GetFileName(file); Assert.IsTrue(expectedFiles.Contains(jpg), $"File {file} was not exepcted to exist after deletion of 10 oldest files."); } } }
public void EnableRecorder() { if (Recorder != null) { Recorder.Dispose(); Recorder = null; } Recorder = new ScreenshotRecorder(Model.ScreenshotDirectory, Model.ForcedScreenshotIntervalinMs, Model.JpgCompressionLevel, Model.KeepNNewestScreenShots); }
public void Create_And_Dispose_Fast_Many_ScreenshotRecoder_Instances() { using (var tmp = TempDir.Create()) { for (int i = 0; i < 20; i++) { using (ScreenshotRecorder rec = new ScreenshotRecorder(tmp.Name, 100, 100, 100)) { } using (ScreenshotRecorder rec = new ScreenshotRecorder(tmp.Name, 100, 100, 100)) { Thread.Sleep(50); } } } }
public void RenderToSeveralThreads() { using (var tmp = TempDir.Create()) { using (ScreenshotRecorder rec = new ScreenshotRecorder(tmp.Name, 500, 100, 100)) { Barrier b = new Barrier(4); Action acc = () => { b.SignalAndWait(); using (Bitmap bmp = new Bitmap(500, 100)) { rec.TimeStampBitmap(DateTime.Now, bmp); } }; Parallel.Invoke(acc, acc, acc, acc); } } }
public void ResetId() { _CurrentId = 0; ScreenshotRecorder.ClearFiles(Model.ScreenshotDirectory); }