Exemple #1
0
        private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
        {
            if (nCode >= 0)
            {
                Keys number = (Keys)Marshal.ReadInt32(lParam);
                //MessageBox.Show(number.ToString());
                if (number == Keys.PrintScreen)
                {
                    Debug.WriteLine(wParam.ToString());
                    if (pressed && wParam == (IntPtr)261 && Keys.Alt == Control.ModifierKeys && number == Keys.PrintScreen)
                    {
                        var res = Scr.Capture(ScreenCapturer.CaptureMode.Window, Properties.Settings.Default.cutborder);
                        WinForm.OnGrabScreen(res, false, 1);
                        pressed = false;
                    }
                    else if (pressed && wParam == (IntPtr)257 && Keys.Shift == Control.ModifierKeys && number == Keys.PrintScreen)
                    {
                        if (!WinForm.Selection)
                        {
                            var res  = Scr.Capture(ScreenCapturer.CaptureMode.Screen);
                            var form = new SelectionFrame(WinForm, res);
                            form.ShowDialog();
                        }
                        pressed = false;
                    }
                    else if (pressed && wParam == (IntPtr)257 && number == Keys.PrintScreen)
                    {
                        var res = Scr.Capture(ScreenCapturer.CaptureMode.Screen);
                        WinForm.OnGrabScreen(res);
                        pressed = false;
                    }
                    else if (wParam == (IntPtr)256 || wParam == (IntPtr)260)
                    {
                        pressed = true; // fix for win xp double press
                    }
                }
            }

            return(CallNextHookEx(IntPtr.Zero, nCode, wParam, lParam));
        }