MouseHook.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. /*----------------------------------------------------------------
  2. // Copyright (C) 2007 liu523@QQ.COM
  3. // 版权所有。
  4. // 开发者:liu523@QQ.COM团队
  5. // 文件名:MouseHook.cs
  6. // 文件功能描述:鼠标控制(Hook鼠标)。
  7. //----------------------------------------------------------------*/
  8. using System;
  9. using System.Text;
  10. using System.Runtime.InteropServices;
  11. using RemoteControlLib.API;
  12. using RemoteControlLib.Codes;
  13. namespace RemoteControlLib.Hooks
  14. {
  15. /// <summary>
  16. /// 鼠标Hook类
  17. /// </summary>
  18. public class MouseHook
  19. {
  20. /// <summary>
  21. /// 鼠标事件枚举
  22. /// </summary>
  23. public enum MouseEventFlag
  24. {
  25. Move = 0x0001,
  26. LeftDown = 0x0002,
  27. LeftUp = 0x0004,
  28. RightDown = 0x0008,
  29. RightUp = 0x0010,
  30. MiddleDown = 0x0020,
  31. MiddleUp = 0x0040,
  32. XDown = 0x0080,
  33. XUp = 0x0100,
  34. Wheel = 0x0800,
  35. VirtualDesk = 0x4000,
  36. Absolute = 0x8000
  37. }
  38. /// <summary>
  39. /// 委托-鼠标按键触发
  40. /// </summary>
  41. /// <param name="flags"></param>
  42. /// <param name="dx"></param>
  43. /// <param name="dy"></param>
  44. /// <param name="dwData"></param>
  45. /// <param name="dwExtraInfo"></param>
  46. public delegate void DoMouseButtons(int flags, int dx, int dy, int dwData, int dwExtraInfo);
  47. /// <summary>
  48. /// 委托-鼠标移动触发
  49. /// </summary>
  50. /// <param name="X"></param>
  51. /// <param name="Y"></param>
  52. /// <returns></returns>
  53. public delegate bool DoMouseMove(int X, int Y);
  54. /// <summary>
  55. /// 模拟鼠标按钮按下的事件
  56. /// </summary>
  57. private event DoMouseButtons MouseButton;
  58. /// <summary>
  59. /// 模拟鼠标移动的事件
  60. /// </summary>
  61. private event DoMouseMove MouseMove;
  62. /// <summary>
  63. /// 创建鼠标钩子的实例
  64. /// </summary>
  65. public MouseHook()
  66. {
  67. MouseButton += new DoMouseButtons(Api.mouse_event);
  68. MouseMove += new DoMouseMove(Api.SetCursorPos);
  69. }
  70. /// <summary>
  71. /// 控制鼠标执行相应操作
  72. /// </summary>
  73. /// <param name="MEvent">指定的鼠标事件</param>
  74. public void MouseWork(MouseEvent MEvent)
  75. {
  76. switch (MEvent.Type)
  77. {
  78. case MouseEventType.MouseMove:
  79. MouseMove(MEvent.X, MEvent.Y);
  80. break;
  81. case MouseEventType.MouseLeftDown:
  82. MouseMove(MEvent.X, MEvent.Y);
  83. MouseButton((int)MouseEventFlag.LeftDown, MEvent.X, MEvent.Y, 0, 0);
  84. break;
  85. case MouseEventType.MouseLeftUp:
  86. MouseMove(MEvent.X, MEvent.Y);
  87. MouseButton((int)MouseEventFlag.LeftUp, MEvent.X, MEvent.Y, 0, 0);
  88. break;
  89. case MouseEventType.MouseRightDown:
  90. MouseButton((int)MouseEventFlag.RightDown, MEvent.X, MEvent.Y, 0, 0);
  91. break;
  92. case MouseEventType.MouseRightUp:
  93. MouseButton((int)MouseEventFlag.RightUp, MEvent.X, MEvent.Y, 0, 0);
  94. break;
  95. case MouseEventType.MouseClick:
  96. MouseMove(MEvent.X, MEvent.Y);
  97. MouseButton((int)MouseEventFlag.LeftDown, MEvent.X, MEvent.Y, 0, 0);
  98. MouseButton((int)MouseEventFlag.LeftUp, MEvent.X, MEvent.Y, 0, 0);
  99. break;
  100. case MouseEventType.MouseDoubleClick:
  101. MouseMove(MEvent.X, MEvent.Y);
  102. MouseButton((int)MouseEventFlag.LeftDown, MEvent.X, MEvent.Y, 0, 0);
  103. MouseButton((int)MouseEventFlag.LeftDown, MEvent.X, MEvent.Y, 0, 0);
  104. MouseButton((int)MouseEventFlag.LeftUp, MEvent.X, MEvent.Y, 0, 0);
  105. MouseButton((int)MouseEventFlag.LeftUp, MEvent.X, MEvent.Y, 0, 0);
  106. break;
  107. }
  108. }
  109. }
  110. }