private int callbackFunction_KeyboardHook(int code, IntPtr wParam, IntPtr lParam)
{
// checks bit 30 of WM_KEYDOWN to see the previous key state
bool isBitSet = (lParam.ToInt64() & (1 << 30)) == 0;
if (code.Equals(3) && isBitSet)
{
OnKeyDown(new KeyCodeEventArgs((Keys)wParam.ToInt32()));
}
// return the value returned by CallNextHookEx
return CallNextHookEx(IntPtr.Zero, code, wParam, lParam);
}