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)); }