onmousedown Fires when the mouse button is pressed and the element has focus. In IE4+ bubbles and is cancelable.onmousemove Fires when the mouse is moved and the cursor is over the element. In IE4+ bubbles but is not cancelable.onmouseout Fires when the user moves the mouse away from the element. In IE4+ bubbles but is not cancelable.onmouseover Fires when the user moves the mouse over the element. In IE4+ bubbles and is cancelable.onmouseup Fires when the mouse button is released and the element has focus. In IE4+ bubbles and is cancelable.
不是很清楚, 可能要看接com口,和usb口两种方式吧
告诉你一个简单的方法,通过API GetKeyState()函数可以取得按键(包括鼠标按钮)的状态using System.Runtime.InteropServices;[DllImport("user32.dll")] public static extern short GetKeyState(int nVirtKey); public const int VK_LBUTTON = 1; public const int VK_RBUTTON = 2;这样判断 if (GetKeyState(VK_LBUTTON) & 0x80) == 0x80) /* TODO 左键按下 */ ;
可能要看接com口,和usb口两种方式吧
public static extern short GetKeyState(int nVirtKey);
public const int VK_LBUTTON = 1;
public const int VK_RBUTTON = 2;这样判断
if (GetKeyState(VK_LBUTTON) & 0x80) == 0x80)
/* TODO 左键按下 */ ;
/* TODO 左键按下 */ ;
else /* TODO 左键没按下 */ ;
可能还得是hbxtlhx(平民百姓)的办法
支持hbxtlhx(平民百姓)
能实现,但是有个问题,就是timer捕捉的时候是按时间频率来的,假如频率是100ms/次
我一次按下鼠标的过程,假设是1s,那么按一次鼠标就有10次事件了
{
VK_LBUTTON = 0x1,
VK_RBUTTON = 0x2,
VK_CANCEL = 0x3,
VK_MBUTTON = 0x4,
VK_BACK = 0x8,
VK_TAB = 0x9,
VK_CLEAR = 0xC,
VK_RETURN = 0xD,
VK_SHIFT = 0x10,
VK_CONTROL = 0x11,
VK_MENU = 0x12,
VK_PAUSE = 0x13,
VK_CAPITAL = 0x14,
VK_ESCAPE = 0x1B,
VK_SPACE = 0x20,
VK_PRIOR = 0x21,
VK_NEXT = 0x22,
VK_END = 0x23,
VK_HOME = 0x24,
VK_LEFT = 0x25,
VK_UP = 0x26,
VK_RIGHT = 0x27,
VK_DOWN = 0x28,
VK_Select = 0x29,
VK_PRINT = 0x2A,
VK_EXECUTE = 0x2B,
VK_SNAPSHOT = 0x2C,
VK_Insert = 0x2D,
VK_Delete = 0x2E,
VK_HELP = 0x2F,
VK_0 = 0x30,
VK_1 = 0x31,
VK_2 = 0x32,
VK_3 = 0x33,
VK_4 = 0x34,
VK_5 = 0x35,
VK_6 = 0x36,
VK_7 = 0x37,
VK_8 = 0x38,
VK_9 = 0x39,
VK_A = 0x41,
VK_B = 0x42,
VK_C = 0x43,
VK_D = 0x44,
VK_E = 0x45,
VK_F = 0x46,
VK_G = 0x47,
VK_H = 0x48,
VK_I = 0x49,
VK_J = 0x4A,
VK_K = 0x4B,
VK_L = 0x4C,
VK_M = 0x4D,
VK_N = 0x4E,
VK_O = 0x4F,
VK_P = 0x50,
VK_Q = 0x51,
VK_R = 0x52,
VK_S = 0x53,
VK_T = 0x54,
VK_U = 0x55,
VK_V = 0x56,
VK_W = 0x57,
VK_X = 0x58,
VK_Y = 0x59,
VK_Z = 0x5A,
VK_STARTKEY = 0x5B,
VK_CONTEXTKEY = 0x5D,
VK_NUMPAD0 = 0x60,
VK_NUMPAD1 = 0x61,
VK_NUMPAD2 = 0x62,
VK_NUMPAD3 = 0x63,
VK_NUMPAD4 = 0x64,
VK_NUMPAD5 = 0x65,
VK_NUMPAD6 = 0x66,
VK_NUMPAD7 = 0x67,
VK_NUMPAD8 = 0x68,
VK_NUMPAD9 = 0x69,
VK_MULTIPLY = 0x6A,
VK_ADD = 0x6B,
VK_SEPARATOR = 0x6C,
VK_SUBTRACT = 0x6D,
VK_DECIMAL = 0x6E,
VK_DIVIDE = 0x6F,
VK_F1 = 0x70,
VK_F2 = 0x71,
VK_F3 = 0x72,
VK_F4 = 0x73,
VK_F5 = 0x74,
VK_F6 = 0x75,
VK_F7 = 0x76,
VK_F8 = 0x77,
VK_F9 = 0x78,
VK_F10 = 0x79,
VK_F11 = 0x7A,
VK_F12 = 0x7B,
VK_F13 = 0x7C,
VK_F14 = 0x7D,
VK_F15 = 0x7E,
VK_F16 = 0x7F,
VK_F17 = 0x80,
VK_F18 = 0x81,
VK_F19 = 0x82,
VK_F20 = 0x83,
VK_F21 = 0x84,
VK_F22 = 0x85,
VK_F23 = 0x86,
VK_F24 = 0x87,
VK_NUMLOCK = 0x90,
VK_OEM_SCROLL = 0x91,
VK_OEM_1 = 0xBA,
VK_OEM_PLUS = 0xBB,
VK_OEM_COMMA = 0xBC,
VK_OEM_MINUS = 0xBD,
VK_OEM_PERIOD = 0xBE,
VK_OEM_2 = 0xBF,
VK_OEM_3 = 0xC0,
VK_OEM_4 = 0xDB,
VK_OEM_5 = 0xDC,
VK_OEM_6 = 0xDD,
VK_OEM_7 = 0xDE,
VK_OEM_8 = 0xDF,
VK_ICO_F17 = 0xE0,
VK_ICO_F18 = 0xE1,
VK_OEM102 = 0xE2,
VK_ICO_HELP = 0xE3,
VK_ICO_00 = 0xE4,
VK_ICO_CLEAR = 0xE6,
VK_OEM_RESET = 0xE9,
VK_OEM_JUMP = 0xEA,
VK_OEM_PA1 = 0xEB,
VK_OEM_PA2 = 0xEC,
VK_OEM_PA3 = 0xED,
VK_OEM_WSCTRL = 0xEE,
VK_OEM_CUSEL = 0xEF,
VK_OEM_ATTN = 0xF0,
VK_OEM_FINNISH = 0xF1,
VK_OEM_COPY = 0xF2,
VK_OEM_AUTO = 0xF3,
VK_OEM_ENLW = 0xF4,
VK_OEM_BACKTAB = 0xF5,
VK_ATTN = 0xF6,
VK_CRSEL = 0xF7,
VK_EXSEL = 0xF8,
VK_EREOF = 0xF9,
VK_PLAY = 0xFA,
VK_ZOOM = 0xFB,
VK_NONAME = 0xFC,
VK_PA1 = 0xFD,
VK_OEM_CLEAR = 0xFE
}
需要加一个字段来标记一下是否正在处理
参考如下处理方法:private void timer1_Tick(object sender, EventArgs e)
{
if ((GetKeyState(VK_LBUTTON) & 0x80) == 0x80)
{
timer1.Enabled = false;
contextMenuStrip1.Show();
}
}private void contextMenuStrip1_Closed(object sender,
ToolStripDropDownClosedEventArgs e)
{
timer1.Enabled = true;
}