鼠标钩子(鼠标钩子双击判断)

不就是全局钩子 我这有实例 是键盘的 你稍微换一下了

鼠标钩子(鼠标钩子双击判断)

类似的问题好多............前几天就有人文这个问题鼠标钩子。你也不说明什么问题就发代码...

新建一个form4窗体.增加2个button,增加事件。。然后复制代码

其实不一样的地方就是红色的地方

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Runtime.InteropServices;

using System.Reflection;

using System.Diagnostics;

namespace WindowsApplication1

{

///

/// Description of MainForm.

///

public partial class Form4 : Form

{

//委托

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

static int hHook = 0;

public const int WH_KEYBOARD_LL = 13;

//LowLevel键盘截获,如果是WH_KEYBOARD=2,并不能对系统键盘截取,Acrobat Reader会在你截取之前获得键盘。

HookProc KeyBoardHookProcedure;

//键盘Hook结构函数

[StructLayout(LayoutKind.Sequential)]

public class KeyBoardHookStruct

{

public int vkCode;

public int scanCode;

public int flags;

public int time;

public int dwExtraInfo;

}

#region DllImport

//设置钩子

[DllImport(\"user32.dll\")]

public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);

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

//抽掉钩子

public static extern bool UnhookWindowsHookEx(int idHook);

[DllImport(\"user32.dll\")]

//调用下一个钩子

public static extern int CallNextHookEx(int idHook, int nCode, int wParam, IntPtr lParam);

[DllImport(\"kernel32.dll\")]

public static extern int GetCurrentThreadId();

[DllImport(\"kernel32.dll\")]

public static extern IntPtr GetModuleHandle(string name);

#endregion

#region 自定义事件

public void Hook_Start()

{

// 安装键盘钩子

if (hHook == 0)

{

KeyBoardHookProcedure = new HookProc(KeyBoardHookProc);

//hHook = SetWindowsHookEx(2,

// KeyBoardHookProcedure,

// GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), GetCurrentThreadId());

hHook = SetWindowsHookEx(WH_KEYBOARD_LL,

KeyBoardHookProcedure,

GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), 0);

//如果设置钩子失败.

if (hHook == 0)

{

Hook_Clear();

//throw new Exception(\"设置Hook失败!\");

}

}

}

//取消钩子事件

public void Hook_Clear()

{

bool retKeyboard = true;

if (hHook != 0)

{

retKeyboard = UnhookWindowsHookEx(hHook);

hHook = 0;

}

//如果去掉钩子失败.

if (!retKeyboard) throw new Exception(\"UnhookWindowsHookEx failed.\");

}

//这里可以添加自己想要的信息处理

public static int KeyBoardHookProc(int nCode, int wParam, IntPtr lParam)

{

if (nCode >= 0)

{

KeyBoardHookStruct kbh = (KeyBoardHookStruct)Marshal.PtrToStructure(lParam, typeof(KeyBoardHookStruct));

if (kbh.vkCode == (int)Keys.S && (int)Control.ModifierKeys == (int)Keys.Control) // 截获F8

{

MessageBox.Show(\"快捷键已拦截!不能保存!\");

return 1;

}

if (kbh.vkCode == (int)Keys.Y

&& (int)Control.ModifierKeys == (int)Keys.Control + (int)Keys.Alt) //截获Ctrl+Alt+Y

{

//MessageBox.Show(\"不能全部保存!\");

return 1;

}

if (kbh.vkCode == (int)Keys.X)

{

MessageBox.Show(\"不能全部保存!\");

return 1;

}

}

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

}

#endregion

public Form4()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

Hook_Start();

}

private void button2_Click(object sender, EventArgs e)

{

Hook_Clear();

}

}

}