国产宅男网站在线|亚洲A级性爱免费视频|亚洲中精品级在线|午夜福利AA毛

  • <dd id="gf5jf"><th id="gf5jf"></th></dd>

    <cite id="gf5jf"><label id="gf5jf"></label></cite>
  • <div id="gf5jf"><listing id="gf5jf"></listing></div>
    學(xué)習(xí)啦 > 學(xué)習(xí)電腦 > 電腦硬件知識 > 鍵盤鼠標(biāo) > js獲取桌面鼠標(biāo)鍵盤事件怎么實現(xiàn)

    js獲取桌面鼠標(biāo)鍵盤事件怎么實現(xiàn)

    時間: 沈迪豪908 分享

    js獲取桌面鼠標(biāo)鍵盤事件怎么實現(xiàn)

      學(xué)習(xí)前端的同學(xué)你們知道怎么你們知道獲取桌面鼠標(biāo)鍵盤事件怎么實現(xiàn)嗎?不知道的話跟著學(xué)習(xí)啦小編一起來學(xué)習(xí)了解獲取桌面鼠標(biāo)鍵盤事件吧。

      獲取桌面鼠標(biāo)鍵盤事件的代碼

      using System;

      using System.Collections.Generic;

      using System.Linq;

      using System.Text;

      using System.Windows.Forms;

      using System.Runtime.InteropServices;

      using System.Reflection;

      namespace UDPService

      {

      /// <summary>

      ///

      /// </summary>

      [StructLayout(LayoutKind.Sequential)]

      public class POINT

      {

      public int x;

      public int y;

      }

      /// <summary>

      ///

      /// </summary>

      [StructLayout(LayoutKind.Sequential)]

      public class MouseHookStruct

      {

      public POINT pt;

      public int hwnd;

      public int wHitTestCode;

      public int dwExtraInfo;

      }

      /// <summary>

      ///

      /// </summary>

      [StructLayout(LayoutKind.Sequential)]

      public class KeyboardHookStruct

      {

      public int vkCode;

      public int scanCode;

      public int flags;

      public int time;

      public int dwExtraInfo;

      }

      /// <summary>

      ///

      /// </summary>

      public class GlobalHook

      {

      public delegate int HookProc(int nCode, Int32 wParam, IntPtr lParam);

      public GlobalHook()

      {

      Start();

      }

      ~GlobalHook()

      {

      Stop();

      }

      public event MouseEventHandler OnMouseActivity;

      public event KeyEventHandler KeyDown;

      public event KeyPressEventHandler KeyPress;

      public event KeyEventHandler KeyUp;

      public delegate int GlobalHookProc(int nCode, Int32 wParam, IntPtr lParam);

      static int hMouseHook = 0;

      static int hKeyboardHook = 0;

      public const int WH_MOUSE_LL = 14;

      public const int WH_KEYBOARD_LL = 13;

      GlobalHookProc MouseHookProcedure;

      GlobalHookProc KeyboardHookProcedure;

      [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]

      public static extern int SetWindowsHookEx(int idHook, GlobalHookProc lpfn,

      IntPtr hInstance, int threadId);

      [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]

      public static extern bool UnhookWindowsHookEx(int idHook);

      [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]

      public static extern int CallNextHookEx(int idHook, int nCode,

      Int32 wParam, IntPtr lParam);

      public void Start()

      {

      if (hMouseHook == 0)

      {

      MouseHookProcedure = new GlobalHookProc(MouseHookProc);

      try

      {

      hMouseHook = SetWindowsHookEx(WH_MOUSE_LL,

      MouseHookProcedure,

      Marshal.GetHINSTANCE(

      Assembly.GetExecutingAssembly().GetModules()[0]),

      0);

      }

      catch (Exception err)

      { }

      if (hMouseHook == 0)

      {

      Stop();

      throw new Exception("SetWindowsHookEx failed.");

      }

      }

      if (hKeyboardHook == 0)

      {

      KeyboardHookProcedure = new GlobalHookProc(KeyboardHookProc);

      try

      {

      hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL,

      KeyboardHookProcedure,

      Marshal.GetHINSTANCE(

      Assembly.GetExecutingAssembly().GetModules()[0]),

      0);

      }

      catch (Exception err2)

      { }

      if (hKeyboardHook == 0)

      {

      Stop();

      throw new Exception("SetWindowsHookEx ist failed.");

      }

      }

      }

      public void Stop()

      {

      bool retMouse = true;

      bool retKeyboard = true;

      if (hMouseHook != 0)

      {

      retMouse = UnhookWindowsHookEx(hMouseHook);

      hMouseHook = 0;

      }

      if (hKeyboardHook != 0)

      {

      retKeyboard = UnhookWindowsHookEx(hKeyboardHook);

      hKeyboardHook = 0;

      }

      if (!(retMouse && retKeyboard))

      throw new Exception("UnhookWindowsHookEx failed.");

      }

      private const int WM_MOUSEMOVE = 0x200;

      private const int WM_LBUTTONDOWN = 0x201;

      private const int WM_RBUTTONDOWN = 0x204;

      private const int WM_MBUTTONDOWN = 0x207;

      private const int WM_LBUTTONUP = 0x202;

      private const int WM_RBUTTONUP = 0x205;

      private const int WM_MBUTTONUP = 0x208;

      private const int WM_LBUTTONDBLCLK = 0x203;

      private const int WM_RBUTTONDBLCLK = 0x206;

      private const int WM_MBUTTONDBLCLK = 0x209;

      private int MouseHookProc(int nCode, Int32 wParam, IntPtr lParam)

      {

      if ((nCode >= 0) && (OnMouseActivity != null))

      {

      MouseButtons button = MouseButtons.None;

      switch (wParam)

      {

      case WM_LBUTTONDOWN:

      //case WM_LBUTTONUP:

      //case WM_LBUTTONDBLCLK:

      button = MouseButtons.Left;

      break;

      case WM_RBUTTONDOWN:

      //case WM_RBUTTONUP:

      //case WM_RBUTTONDBLCLK:

      button = MouseButtons.Right;

      break;

      }

      int clickCount = 0;

      if (button != MouseButtons.None)

      if (wParam == WM_LBUTTONDBLCLK || wParam == WM_RBUTTONDBLCLK)

      clickCount = 2;

      else

      clickCount = 1;

      MouseHookStruct MyMouseHookStruct =

      (MouseHookStruct)Marshal.PtrToStructure(lParam, typeof(MouseHookStruct));

      MouseEventArgs e = new MouseEventArgs(

      button,

      clickCount,

      MyMouseHookStruct.pt.x,

      MyMouseHookStruct.pt.y,

      0);

      OnMouseActivity(this, e);

      }

      return CallNextHookEx(hMouseHook, nCode, wParam, lParam);

      }

      [DllImport("user32")]

      public static extern int ToAscii(int uVirtKey,

      int uScanCode,

      byte[] lpbKeyState,

      byte[] lpwTransKey,

      int fuState);

      [DllImport("user32")]

      public static extern int GetKeyboardState(byte[] pbKeyState);

      private const int WM_KEYDOWN = 0x100;

      private const int WM_KEYUP = 0x101;

      private const int WM_SYSKEYDOWN = 0x104;

      private const int WM_SYSKEYUP = 0x105;

      private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam)

      {

      if ((nCode >= 0) && (KeyDown != null || KeyUp != null || KeyPress != null))

      {

      KeyboardHookStruct MyKeyboardHookStruct =

      (KeyboardHookStruct)Marshal.PtrToStructure(lParam,

      typeof(KeyboardHookStruct));

      if (KeyDown != null && (wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN))

      {

      Keys keyData = (Keys)MyKeyboardHookStruct.vkCode;

      KeyEventArgs e = new KeyEventArgs(keyData);

      KeyDown(this, e);

      }

      if (KeyPress != null && wParam == WM_KEYDOWN)

      {

      byte[] keyState = new byte[256];

      GetKeyboardState(keyState);

      byte[] inBuffer = new byte[2];

      if (ToAscii(MyKeyboardHookStruct.vkCode,

      MyKeyboardHookStruct.scanCode,

      keyState,

      inBuffer,

      MyKeyboardHookStruct.flags) == 1)

      {

      KeyPressEventArgs e = new KeyPressEventArgs((char)inBuffer[0]);

      KeyPress(this, e);

      }

      }

      if (KeyUp != null && (wParam == WM_KEYUP || wParam == WM_SYSKEYUP))

      {

      Keys keyData = (Keys)MyKeyboardHookStruct.vkCode;

      KeyEventArgs e = new KeyEventArgs(keyData);

      KeyUp(this, e);

      }

      }

      return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam);

      }

      }

      }

    猜你喜歡:

    1.怎么用js獲取鼠標(biāo)移動坐標(biāo)

    2.怎么實現(xiàn)js跨瀏覽器獲取鼠標(biāo)按鍵的值

    3.js怎么獲取鼠標(biāo)在div中的相對位置

    4.win8.1 rtm有什么改進

    5.怎么用js實現(xiàn)簡單鼠標(biāo)跟隨效果

    6.如何設(shè)置桌面鼠標(biāo)圖案

    2006955