• 大小: 55KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-21
  • 语言: C#
  • 标签: c#  Api  钩子  demo  

资源简介

c# SetWindowsHookEx 钩子 demo

资源截图

代码片段和文件信息

using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Threading;
using System.Windows.Forms;

namespace demo
{
    public partial class Index : Form
    {

        public Index()
        {
            InitializeComponent();
        }

        #region API
        [DllImport(“kernel32.dll“)]
        private static extern IntPtr GetModuleHandle(string name);

        //建立键盘钩子
        [DllImport(“user32.dll“ CharSet = CharSet.Auto CallingConvention = CallingConvention.StdCall)]
        private static extern int SetWindowsHookEx(int idHook HookProc lpfn IntPtr hInstance int threadId);

        //移除键盘钩子
        [DllImport(“user32.dll“ CharSet = CharSet.Auto CallingConvention = CallingConvention.StdCall)]
        private static extern bool UnhookWindowsHookEx(int idHook);

        //把击键信息传递到下一个监听键盘事件的应用程序
        [DllImport(“user32.dll“ CharSet = CharSet.Auto CallingConvention = CallingConvention.StdCall)]
        private static extern int CallNextHookEx(int idHook int nCode IntPtr wParam IntPtr lParam);
        #endregion

        #region 变量
        //标示
        int i = 0;
        //回调委托
        private delegate int HookProc(int nCode IntPtr wParam IntPtr lParam);
        //钩子
        int idHook = 0;
        //是否安装了钩子
        bool isHook = false;
        //锁
        private static readonly object obj = new object();
        GCHandle gc;
        private const int WH_KEYBOARD_LL = 13;      //钩子类型 全局钩子
        private const int WM_KEYUP = 0x101;     //按键抬起
        private const int WM_KEYDOWN = 0x100;       //按键按下
        #endregion

        #region 安装钩子
        private void Index_Load(object sender EventArgs e)
        {
            Msg(“开始运行“);
            //安装钩子
            {
                //钩子委托
                HookProc lpfn = new HookProc(Hook);
                //关联进程的主模块
                IntPtr hInstance = GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName);
                //hInstance = Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]);
                idHook = SetWindowsHookEx(WH_KEYBOARD_LL lpfn hInstance 0);
                if (idHook > 0)
                {
                    Msg(“钩子[“ + idHook + “]安装成功“);
                    isHook = true;
                    //保持活动 避免 回调过程 被垃圾回收
                    gc = GCHandle.Alloc(lpfn);
                }
                else
                {
                    Msg(“钩子安装失败“);
                    isHook = false;
                    UnhookWindowsHookEx(idHook);
                }
            }
        }
        #endregion

        #region 卸载钩子
        private void Index_FormClosing(object sender FormClosingEventArgs e)
        {
            //卸载钩子
            if (isHook)
            {
                UnhookWindowsHookEx(idHook);
            }
        }
        #endregion

        #region 钩子回调
        private int Hook(int nCode

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2014-06-19 13:22  demo\
     目录           0  2014-06-19 13:59  demo\demo\
     文件         902  2014-06-19 13:22  demo\demo.sln
     文件       34304  2014-06-19 16:18  demo\demo.v11.suo
     目录           0  2014-06-19 13:35  demo\demo\bin\
     目录           0  2014-06-19 13:36  demo\demo\bin\Debug\
     文件       11776  2014-06-19 16:11  demo\demo\bin\Debug\demo.exe
     文件       26112  2014-06-19 16:11  demo\demo\bin\Debug\demo.pdb
     文件       22472  2014-06-19 16:15  demo\demo\bin\Debug\demo.vshost.exe
     目录           0  2014-06-19 13:35  demo\demo\bin\Release\
     文件        3721  2014-06-19 14:35  demo\demo\demo.csproj
     文件        4880  2014-06-19 16:15  demo\demo\Index.cs
     文件        3413  2014-06-19 15:54  demo\demo\Index.Designer.cs
     文件        5817  2014-06-19 15:54  demo\demo\Index.resx
     目录           0  2014-06-19 13:22  demo\demo\obj\
     目录           0  2014-06-19 16:11  demo\demo\obj\Debug\
     文件         522  2014-06-19 16:15  demo\demo\obj\Debug\demo.csproj.FileListAbsolute.txt
     文件        1033  2014-06-19 15:54  demo\demo\obj\Debug\demo.csproj.GenerateResource.Cache
     文件        2209  2014-06-19 13:25  demo\demo\obj\Debug\demo.csprojResolveAssemblyReference.cache
     文件       11776  2014-06-19 16:11  demo\demo\obj\Debug\demo.exe
     文件         180  2014-06-19 15:54  demo\demo\obj\Debug\demo.Index.resources
     文件       26112  2014-06-19 16:11  demo\demo\obj\Debug\demo.pdb
     文件         180  2014-06-19 14:35  demo\demo\obj\Debug\demo.Properties.Resources.resources
     文件         863  2014-06-19 13:22  demo\demo\obj\Debug\DesignTimeResolveAssemblyReferences.cache
     文件        6785  2014-06-19 13:59  demo\demo\obj\Debug\DesignTimeResolveAssemblyReferencesInput.cache
     目录           0  2014-06-19 13:22  demo\demo\obj\Debug\TempPE\
     文件         485  2014-06-19 15:29  demo\demo\Program.cs
     目录           0  2014-06-19 13:22  demo\demo\Properties\
     文件        1346  2014-06-19 13:22  demo\demo\Properties\AssemblyInfo.cs
     文件        2860  2014-06-19 13:22  demo\demo\Properties\Resources.Designer.cs
     文件        5612  2014-06-19 13:22  demo\demo\Properties\Resources.resx
............此处省略2个文件信息

评论

共有 条评论