Example #1
0
        private IntPtr hookProc(int code, IntPtr wParam, ref NativeMethods.keyboardHookStruct lParam)
        {
            if (code >= 0)
            {
                var key    = (Keys)lParam.vkCode;
                var wparam = wParam.ToInt64();

                key = key | Control.ModifierKeys;

                if (wparam == NativeMethods.WM_KEYDOWN && key == this.m_hookKey)
                {
                    Console.WriteLine(key);

                    // 스크린샷 찍기
                    var fg = NativeMethods.GetForegroundWindow();
                    if (fg != this.Handle)
                    {
                        var ff = NativeMethods.FindWindowEx(IntPtr.Zero, IntPtr.Zero, "FFXIVGAME", null);

                        if (ff != IntPtr.Zero && ff == fg)
                        {
                            Task.Factory.StartNew(CaptureFFXIV, (object)ff);

                            return(new IntPtr(1));
                        }
                    }
                }
            }
            return(NativeMethods.CallNextHookEx(this.m_hookPtr, code, wParam, ref lParam));
        }
        /// <summary>
        /// The callback for the keyboard hook
        /// </summary>
        /// <param name="code">The hook code, if it isn't >= 0, the function shouldn't do anyting</param>
        /// <param name="wParam">The event type</param>
        /// <param name="lParam">The keyhook event information</param>
        /// <returns></returns>
        private IntPtr hookProc(int code, IntPtr wParam, ref NativeMethods.keyboardHookStruct lParam)
        {
            if (code >= 0)
            {
                Key key = KeyInterop.KeyFromVirtualKey(lParam.vkCode);
                if (HookedKeys.Contains(key))
                {
                    var wparam = wParam.ToInt64();

                    var args = new KeyHookEventArgs(key);

                    if ((wparam == NativeMethods.WM_KEYDOWN || wparam == NativeMethods.WM_SYSKEYDOWN) && (KeyDown != null))
                    {
                        KeyDown.Invoke(this, args);
                    }
                    else if ((wparam == NativeMethods.WM_KEYUP || wparam == NativeMethods.WM_SYSKEYUP) && (KeyUp != null))
                    {
                        KeyUp.Invoke(this, args);
                    }

                    if (args.Handled)
                    {
                        return(new IntPtr(1));
                    }
                }
            }
            return(NativeMethods.CallNextHookEx(hhook, code, wParam, ref lParam));
        }