免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
C#鉤子本線程內(nèi)消息攔截

鉤子其實就是調(diào)用一下API而已:

1、安裝鉤子:
  SetWindowsHookEx
    函數(shù)原形:HHOOK SetWindowsHookEx(
                       int       idHook,    // 鉤子類型,
                       HOOKPROC  lpfn,      // 鉤子函數(shù)地址
                       INSTANCE  hMod,      // 鉤子所在的實例的句柄,
                       DWORD     dwThreadId // 鉤子所監(jiān)視的線程的線程號
                      )
    hMod: 對于線程序鉤子,參數(shù)傳NULL;
    對于系統(tǒng)鉤子:參數(shù)為鉤子DLL的句柄
  dwThreadId:對于全局鉤子,該參數(shù)為NULL。
    鉤子類型用WH_CALLWNDPROC=4(發(fā)送到窗口的消息。由SendMessage觸發(fā))
    返回:成功:返回SetWindowsHookEx返回所安裝的鉤子句柄;
          失?。篘ULL;

2、回調(diào),你要截獲消息就在這里進(jìn)行:
LRESULT WINAPI MyHookProc(
          int     nCode ,     // 指定是否需要處理該消息
          WPARAM  wParam,     // 包含該消息的附加消息
          LPARAM  lParam      // 包含該消息的附加消息
                        )

3、調(diào)用下一個鉤子
LRESULT CallNextHookEx(
          HHOOK   hhk,      // 是您自己的鉤子函數(shù)的句柄。用該句柄可以遍歷鉤子鏈
          int     nCode,    // 把傳入的參數(shù)簡單傳給CallNextHookEx即可
          WPARAM  wParam,   // 把傳入的參數(shù)簡單傳給CallNextHookEx即可
          LPARAM  lParam    // 把傳入的參數(shù)簡單傳給CallNextHookEx即可
                      );

4、用完后記得卸載鉤子哦,要不然你的系統(tǒng)會變得奇慢無比!
BOOL UnhookWindowsHookEx(
         HHOOK      hhk       // 要卸載的鉤子句柄。
                      )

把上面這些API用C#封裝一下,就可以直接用了!
給個線程鉤子的例子吧(兩個Form都在同一個線程中運行):

using System.Runtime.InteropServices;

public class Form1 : System.Windows.Forms.Form
{
    ...
    //定義委托(鉤子函數(shù),用于回調(diào))
    public delegate int HookProc(int code, IntPtr wparam, ref CWPSTRUCT cwp);

    //安裝鉤子的函數(shù)
    [DllImport("User32.dll",CharSet = CharSet.Auto)]
    public static extern IntPtr SetWindowsHookEx(int type, HookProc hook, IntPtr instance, int threadID);
    //調(diào)用下一個鉤子的函數(shù)
    [DllImport("User32.dll",CharSet = CharSet.Auto)]
    public static extern int CallNextHookEx(IntPtr hookHandle, int code, IntPtr wparam, ref CWPSTRUCT cwp);
    //卸載鉤子
    [DllImport("User32.dll",CharSet = CharSet.Auto)]
    public static extern bool UnhookWindowsHookEx(IntPtr hookHandle);
    //獲取窗體線程ID
    DllImport("User32.dll",CharSet = CharSet.Auto)]
    public static extern int GetWindowThreadProcessId(IntPtr hwnd, int ID);

    private HookProc hookProc;
    private IntPtr hookHandle = IntPtr.Zero;

    public Form1()
    {
        ....
        //掛接鉤子處理方法
        this.hookProc = new HookProc(myhookproc);
    }

    //開始攔截
private bool StartHook()
    {
        Form2 f=new Form2();
        f.Show();//加上這個
        //安裝鉤子,攔截系統(tǒng)向Form2發(fā)出的消息
        this.hookHandle = SetWindowsHookEx(4, hookProc, IntPtr.Zero ,GetWindowThreadProcessId(f.Handle,0));
        return (this.hookHandle != 0);
    }

    //停止攔截
    private bool StopHook()
    {
        return UnhookWindowsHookEx(this.hookHandle);
    }

    //鉤子處理函數(shù),在這里攔截消息并做處理
    private int myhookproc(int code, IntPtr wparam, ref CWPSTRUCT cwp)
    {
        switch(code)
        {
    case 0:
    switch(cwp.message)
    {
        case 0x0000F://WM_PAINT,攔截WM_PAINT消息
                //do something
        break;
    }
            break;
        }
        return CallNextHookEx(hookHandle,code,wparam, ref cwp);
    }
   
    [StructLayout(LayoutKind.Sequential)]
    public struct CWPSTRUCT
    {
 public IntPtr lparam;
 public IntPtr wparam;
 public int message;
 public IntPtr hwnd;
    }
}

public class Form2 : System.Windows.Forms.Form
{
    ....
}



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=714599

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Hook鉤子攻略
C# 鍵盤記錄器
抓取掃描槍掃描數(shù)據(jù)的案例
C#強(qiáng)化系列文章二:在C#中使用鉤子
C#簡單游戲外掛制作(以Warcraft Ⅲ為例)
如何在C#中使用全局鼠標(biāo)、鍵盤Hook
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服