如题!

解决方案 »

  1.   

    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.
      

  2.   

    不是很清楚,
    可能要看接com口,和usb口两种方式吧
      

  3.   

    告诉你一个简单的方法,通过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 左键按下 */ ;
      

  4.   

    如果要是全局的判断,那么只有Hook是好使的,但是Hook在.NET是不好使的,你只有通过非托管的DLL,比如用VC++编写一个MFC的或Win32的DLL来实现这个HOOK,然后在.NET中通过调用这个API的方法来达到Hook的效果.
      

  5.   

    zswang的方法不错,不过不知释放按钮怎么判断?谢谢
      

  6.   

    hook 在.net里一样可以用 底层的hook 键盘鼠标:WH_KEYBOARD_LL,WH_MOUSE_LL
      

  7.   

    ....汗,按钮就两种状态,按下和没按下,一个else搞定
      

  8.   

    if (GetKeyState(VK_LBUTTON) & 0x80) == 0x80) 
      /* TODO 左键按下 */ ;
    else /* TODO 左键没按下 */ ;
      

  9.   

    除了HOOK外,可以按上面我提供的判断加上计时器侦测(这方法虽然有点傻,但还是实用的)...
      

  10.   

    如果要是全局的判断
    可能还得是hbxtlhx(平民百姓)的办法
      

  11.   

    应该用全局钩子吧。
    支持hbxtlhx(平民百姓)
      

  12.   

    zswang(伴水清清)(专家门诊清洁工) 的方法我试了
    能实现,但是有个问题,就是timer捕捉的时候是按时间频率来的,假如频率是100ms/次
    我一次按下鼠标的过程,假设是1s,那么按一次鼠标就有10次事件了
      

  13.   

    zswang(伴水清清)(专家门诊清洁工)   正解其中nVirtKey是虚拟键码 可以使用 以下V irtualKeys public   enum   VirtualKeys:   byte
    {   
    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
    }   
      

  14.   

    是的,有你说的情况
    需要加一个字段来标记一下是否正在处理
    参考如下处理方法: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;
    }
      

  15.   

    感谢zhamx的提醒,不用声明VirtualKeys可以改成这样if ((GetKeyState((int)Keys.LButton) & 0x80) == 0x80)