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; }
/// <summary> /// Initialize things which must happen on a UI thread. /// </summary> public void InitUIDependantVariables(App args, TaskScheduler scheduler) { UISheduler = scheduler; NetworkSendState = new NetworkSendState(this, UISheduler); NetworkReceiveState = new NetworkReceiveState(this, UISheduler); WCFHost = new WCFHostServiceState(this, UISheduler); Hooker = new NetworkedHooker(this); if (!HookEvents.IsAlreadyRegistered()) { Commands["RegisterETWProvider"].Execute(null); } // use settings from command line if present CaptureKeyboard = args.CaptureKeyboard; CaptureMouseButtonDown = args.CaptureMouseButtonDown; CaptureMouseMove = args.CaptureMouseMove; ScreenshotDirectoryUnexpanded = (args.ScreenshotDirectory ?? Configuration.Default.ScreenshotDirectory); CaptureScreenShots = args.CaptureScreenshots; // This line will also trigger a property change event which instantiates and starts the screenshotrecorder IsKeyBoardEncrypted = !args.IsKeyBoardNotEncrypted; if (args.SendToServer != null) { this.Host = args.SendToServer; } if (args.SendToServerPort != null) { if (int.TryParse(args.SendToServerPort, out int portNumber)) { this.PortNumber = portNumber; } } if (args.SendtoServerSecondaryPort != null) { if (int.TryParse(args.SendtoServerSecondaryPort, out int secondaryPort)) { this.WCFPort = secondaryPort; } } }