private void KeyboardListener_OnKeyEventHandler(object sender, KeyEvent e)
 {
     if (Properties.Settings.Default.MakeScreenshots == false) return;
     if (e.KeyDown == Key.PrintScreen && makeScreenshot == true)
     {
         if (previousKey == Key.LeftAlt || previousKey == Key.RightAlt)
         {
             var image = MakeScreenshotFromForegroundWindow();
             string filePath = SaveScreenshot(image);
             if (filePath != null) AddImage(filePath);
         }
         else
         {
             var image = MakeScreenshotFromAllScreen();
             string filePath = SaveScreenshot(image);
             if (filePath != null) AddImage(filePath);
         }
         makeScreenshot = false;
     }
     if ((e.KeyUp == Key.LeftAlt || e.KeyUp == Key.RightAlt) ||
         e.KeyUp == Key.PrintScreen) makeScreenshot = true;
     previousKey = e.KeyDown;
 }
        private IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
        {
            try
            {
                if (nCode >= 0)
                {
                    int vkCode = Marshal.ReadInt32(lParam);

                    if (OnKeyEventHandler != null)
                    {
                        var keyEventArgs = new KeyEvent();
                        if (wParam == (IntPtr)WM_KEYDOWN || wParam == (IntPtr)WM_SYSKEYDOWN)
                        {
                            keyEventArgs.KeyDownArgs(KeyInterop.KeyFromVirtualKey(vkCode));
                        }
                        else if (wParam == (IntPtr)WM_KEYUP || wParam == (IntPtr)WM_SYSKEYDOWN)
                        {
                            keyEventArgs.KeyUpArgs(KeyInterop.KeyFromVirtualKey(vkCode));
                        }
                        OnKeyEventHandler(this, keyEventArgs);
                    }
                }
                return CallNextHookEx(hookID, nCode, wParam, lParam);
            }
            catch(Exception ex)
            {
                Log.Add(ex);
            }
            return new IntPtr();
        }