• <output id="aynwq"><form id="aynwq"><code id="aynwq"></code></form></output>

    <mark id="aynwq"><option id="aynwq"></option></mark>
  • <mark id="aynwq"><option id="aynwq"></option></mark><label id="aynwq"><dl id="aynwq"></dl></label>
  • 學習啦 > 學習電腦 > 電腦硬件知識 > 鍵盤鼠標 > js獲取桌面鼠標鍵盤事件怎么實現

    js獲取桌面鼠標鍵盤事件怎么實現

    時間: 沈迪豪908 分享

    js獲取桌面鼠標鍵盤事件怎么實現

      學習前端的同學你們知道怎么你們知道獲取桌面鼠標鍵盤事件怎么實現嗎?不知道的話跟著學習啦小編一起來學習了解獲取桌面鼠標鍵盤事件吧。

      獲取桌面鼠標鍵盤事件的代碼

      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獲取鼠標移動坐標

    2.怎么實現js跨瀏覽器獲取鼠標按鍵的值

    3.js怎么獲取鼠標在div中的相對位置

    4.win8.1 rtm有什么改進

    5.怎么用js實現簡單鼠標跟隨效果

    6.如何設置桌面鼠標圖案

    2006955 主站蜘蛛池模板: 亚洲中文字幕久久精品无码喷水 | 又粗又黄又猛又爽大片免费| 久久精品无码专区免费东京热| 深夜福利视频导航| 欧美成a人片在线观看久| 国产麻传媒精品国产AV| 亚洲狠狠色丁香婷婷综合| 99久久无码一区人妻| 波多野结衣大战欧美黑人| 夜夜揉揉日日人人视频| 亚洲精品无码久久毛片| 99精品视频在线观看免费| 熟妇人妻中文字幕| 国内精品国语自产拍在线观看91| 亚洲综合久久久久久中文字幕| 99久久国产综合精品女图图等你| 深爱五月激情网| 国产精品欧美日韩一区二区 | 欧美日本高清视频在线观看| 国产精品成人扳**a毛片| 亚洲午夜精品一区二区| 欧美精品www| 日本高清xxxx| 啦啦啦www免费视频| www.亚洲精品| 欧美黑人粗硬大在线看| 国产精品二区在线| 久久婷婷人人澡人人爱91| 色噜噜视频影院| 女人被狂c躁到高潮视频| 亚洲第一永久在线观看| 亚洲欧美日韩丝袜另类| 日韩日韩日韩日韩日韩| 国产三级自拍视频| а天堂中文最新一区二区三区 | 3344永久在线观看视频免费首页| 欧美亚洲综合在线| 国产又大又硬又粗| 一区二区三区欧美| 欧美激情另欧美做真爱| 国产成人无码免费看片软件|