c# 程序钩子的问题

百度在很多的网上都说什么加入这个钩子那个钩子,定义什么钩子的进去,可是我直接将百度中的钩子复制带代码中去,却没用,很显示这些代码都是无用的,错误的,我想问的是钩子到底在c... 百度在很多的网上都说什么加入这个钩子那个钩子,定义什么钩子的进去,可是我直接将百度中的钩子复制带代码中去,却没用,很显示这些代码都是无用的,错误的,我想问的是钩子到底在c#里面是什么含义,怎么使用钩子,而且怎么百度的那些钩子前面都有 [DllImport("USER32.DLL")] 这种类型的字符串
还有钩子是写在哪的?
展开
 我来答
942129263
2014-01-09 · TA获得超过364个赞
知道小有建树答主
回答量:262
采纳率:0%
帮助的人:145万
展开全部

C#是面向对象的编程语言,所以钩子是写在类中的。

/// <summary>

/// 设置的钩子类型

/// </summary>
public enum HookType : int
{
     
    /// <summary>

    /// WH_MSGFILTER 和 WH_SYSMSGFILTER Hooks使我们可以把守菜单,迁移转变 

    ///条,消息框,对话框消息并且发明用户应用ALT+TAB or ALT+ESC 组合键切换窗口。 

    ///WH_MSGFILTER Hook只能把守传递到菜单,迁移转变条,消息框的消息,以及传递到通 

    ///过安装了Hook子过程的应用法度建树的对话框的消息。WH_SYSMSGFILTER Hook 

    ///把守所有应用法度消息。 

    ///WH_MSGFILTER 和 WH_SYSMSGFILTER Hooks使我们可以在模式轮回时代 

    ///过滤消息,这等价于在主消息轮回中过滤消息。     
       
    ///经由过程调用CallMsgFilter function可以直接的调用WH_MSGFILTER Hook。经由过程应用这 

    ///个函数,应用法度可以或许在模式轮回时代应用雷同的代码去过滤消息,如同在主消息循 

    ///环里一样

    /// </summary>

    WH_MSGFILTER = -1,

    /// <summary>

    /// WH_JOURNALRECORD Hook用来把守和记录输入事务。典范的,可以应用这 

    ///个Hook记录连气儿的鼠标和键盘事务,然后经由过程应用WH_JOURNALPLAYBACK Hook 

    ///往返放。WH_JOURNALRECORD Hook是全局Hook,它不克不及象线程特定Hook一样 

    ///应用。WH_JOURNALRECORD是system-wide local hooks,它们不会被打针到任何行 

    ///程地址空间

    /// </summary>

    WH_JOURNALRECORD = 0,

    /// <summary>

    /// WH_JOURNALPLAYBACK Hook使应用法度可以插入消息到体系消息队列。可 

    ///以应用这个Hook回放经由过程应用WH_JOURNALRECORD Hook记录下来的连气儿的鼠 

    ///标和键盘事务。只要WH_JOURNALPLAYBACK Hook已经安装,正常的鼠标和键盘 

    ///事务就是无效的。WH_JOURNALPLAYBACK Hook是全局Hook,它不克不及象线程特定 

    ///Hook一样应用。WH_JOURNALPLAYBACK Hook返回超时价,这个值告诉体系在处 

    ///理来自回放Hook当前消息之前须要守候多长时候(毫秒)。这就使Hook可以把握实 

    ///时事务的回放。WH_JOURNALPLAYBACK是system-wide local hooks,它们不会被 

    ///打针到任何行程地址空间

    /// </summary>

    WH_JOURNALPLAYBACK = 1,

    /// <summary>
       
    /// 在应用法度中,WH_KEYBOARD Hook用来把守WM_KEYDOWN and  

    ///WM_KEYUP消息,这些消息经由过程GetMessage or PeekMessage function返回。可以使 

    ///用这个Hook来把守输入到消息队列中的键盘消息

    /// </summary>

    WH_KEYBOARD = 2,

    /// <summary>

    /// 应用法度应用WH_GETMESSAGE Hook来把守从GetMessage or PeekMessage函 

    ///数返回的消息。你可以应用WH_GETMESSAGE Hook去把守鼠标和键盘输入,以及 

    ///其它发送到消息队列中的消息

    /// </summary>

    WH_GETMESSAGE = 3,

    /// <summary>

    /// 把守发送到窗口过程的消息,体系在消息发送到接管窗口过程之前调用

    /// </summary>

    WH_CALLWNDPROC = 4,

    /// <summary>

    /// 在以下事务之前,体系都邑调用WH_CBT Hook子过程,这些事务包含: 

    ///1. 激活,建树,烧毁,最小化,最大化,移动,改变尺寸等窗口事务; 

    ///2. 完成体系指令; 

    ///3. 来自体系消息队列中的移动鼠标,键盘事务; 

    ///4. 设置输入核苦衷务; 

    ///5. 同步体系消息队列事务。

    ///Hook子过程的返回值断定体系是否容许或者防止这些操纵中的一个
    /// </summary>

    WH_CBT = 5,

    /// <summary>

    /// WH_MSGFILTER 和 WH_SYSMSGFILTER Hooks使我们可以把守菜单,迁移转变 

    ///条,消息框,对话框消息并且发明用户应用ALT+TAB or ALT+ESC 组合键切换窗口。 

    ///WH_MSGFILTER Hook只能把守传递到菜单,迁移转变条,消息框的消息,以及传递到通 

    ///过安装了Hook子过程的应用法度建树的对话框的消息。WH_SYSMSGFILTER Hook 

    ///把守所有应用法度消息。 

    ///WH_MSGFILTER 和 WH_SYSMSGFILTER Hooks使我们可以在模式轮回时代 

    ///过滤消息,这等价于在主消息轮回中过滤消息。 


    ///经由过程调用CallMsgFilter function可以直接的调用WH_MSGFILTER Hook。经由过程应用这 

    ///个函数,应用法度可以或许在模式轮回时代应用雷同的代码去过滤消息,如同在主消息循 

    ///环里一样

    /// </summary>

    WH_SYSMSGFILTER = 6,

    /// <summary>

    /// WH_MOUSE Hook把守从GetMessage 或者 PeekMessage 函数返回的鼠标消息。 

    ///应用这个Hook把守输入到消息队列中的鼠标消息

    /// </summary>

    WH_MOUSE = 7,

    /// <summary>

    /// 当调用GetMessage 或 PeekMessage 来从消息队列种查询非鼠标、键盘消息时

    /// </summary>

    WH_HARDWARE = 8,

    /// <summary>

    /// 在体系调用体系中与其它Hook接洽关系的Hook子过程之前,体系会调用 

    ///WH_DEBUG Hook子过程。你可以应用这个Hook来决意是否容许体系调用与其它 

    ///Hook接洽关系的Hook子过程

    /// </summary>

    WH_DEBUG = 9,

    /// <summary>

    /// 外壳应用法度可以应用WH_SHELL Hook去接管首要的通知。当外壳应用法度是 

    ///激活的并且当顶层窗口建树或者烧毁时,体系调用WH_SHELL Hook子过程。 

    ///WH_SHELL 共有5钟景象: 

    ///1. 只要有个top-level、unowned 窗口被产生、起感化、或是被摧毁; 

    ///2. 当Taskbar须要重画某个按钮; 

    ///3. 当体系须要显示关于Taskbar的一个法度的最小化情势; 

    ///4. 当今朝的键盘布局状况改变; 

    ///5. 当应用者按Ctrl+Esc去履行Task Manager(或雷同级此外法度)。 

    ///遵守常规,外壳应用法度都不接管WH_SHELL消息。所以,在应用法度可以或许接 

    ///收WH_SHELL消息之前,应用法度必须调用SystemParametersInfo function注册它自 

    ///己

    /// </summary>

    WH_SHELL = 10,

    /// <summary>

    /// 当应用法度的前台线程处于余暇状况时,可以应用WH_FOREGROUNDIDLE  

    ///Hook履行低优先级的任务。当应用法度的前台线程可能要变成余暇状况时,体系就 

    ///会调用WH_FOREGROUNDIDLE Hook子过程

    /// </summary>

    WH_FOREGROUNDIDLE = 11,

    /// <summary>

    /// 把守发送到窗口过程的消息,体系在消息发送到接管窗口过程之后调用

    /// </summary>

    WH_CALLWNDPROCRET = 12,

    /// <summary>

    /// 把守输入到线程消息队列中的键盘消息

    /// </summary>

    WH_KEYBOARD_LL = 13,

    /// <summary>

    /// 把守输入到线程消息队列中的鼠标消息

    /// </summary>

    WH_MOUSE_LL = 14

}
public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        [DllImport("USER32.DLL")]
private static extern int CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);//导入钩子函数消息传递的方法

[DllImport("USER32.DLL")]
private static extern IntPtr SetWindowsHookEx(HookType idHook, HookProc lpfn, IntPtr hMod, int dwThreadId);//导入设置钩子的方法

[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
private static extern bool UnhookWindowsHookEx(int idHook);    
//导入卸载钩子的方法
private delegate int HookProc(int nCode, int wParam, IntPtr lParam);  //声明回调函数
///<summary>
///自定义回调函数
///</summary>
private int HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
    MessageBox.Show(nCode.ToString());
    //键盘按下时
    if (nCode >= 0 && wParam == (IntPtr)0)
    {
         int vkCode = Marshal.ReadInt32(lParam);
         Keys key = (Keys)vkCode;
         MessageBox.Show(key.ToString());
    }
    return CallNextHookEx(handle, nCode, wParam, lParam);
}
        private void Form1_Load(object sender, EventArgs e)
        {
            //创建钩子(这个函数的参数你可以百度找找,C#钩子研究过但没成功)
            SetWindowsHookEx(params);
        }
    }
百度网友95005f4
2014-01-09 · 超过47用户采纳过TA的回答
知道小有建树答主
回答量:111
采纳率:0%
帮助的人:94.7万
展开全部
这是C#调用动态链接库,也就是DLL文件的接口。不是不起作用,是你不会用。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式