挂钩 - 无法找到类型或命名空间HookType

时间:2012-11-30 19:46:12

标签: c# api winapi hook

我试图通过C#了解Win32 API中的钩子。我想要实际做的是如何在存在低级用户活动(如鼠标移动或击键)时调用命令。我目前正在阅读这篇文章: http://msdn.microsoft.com/en-us/magazine/cc188966.aspx

但是,当我从示例中输入以下代码时:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
using Microsoft.Win32;
using System.ComponentModel;
using System.Reflection;

class Win32Hooks
{
[DllImport("user32.dll")]
public static extern IntPtr SetWindowsHookEx(HookType code,
    CbtHook.CbtProc func,
    IntPtr hInstance,
    int threadID);
[DllImport("user32.dll")]
public static extern int UnhookWindowsHookEx(IntPtr hhook);
static void Main()
{

}
}

但是,我收到的错误是找不到类型或名称空间“HookType”。知道如何解决这个问题吗?如果有人可以为初学者推荐一篇关于使用C#的Win32 API Hooks的文章,那就太棒了。我一直在努力寻找,但我最清楚的就是上面贴了这个。

2 个答案:

答案 0 :(得分:2)

HookType在您引用的文章中定义。

    public enum HookType : int
    {
       WH_JOURNALRECORD = 0,
       WH_JOURNALPLAYBACK = 1,
       WH_KEYBOARD = 2,
       WH_GETMESSAGE = 3,
       WH_CALLWNDPROC = 4,
       WH_CBT = 5,
       WH_SYSMSGFILTER = 6,
       WH_MOUSE = 7,
       WH_HARDWARE = 8,
       WH_DEBUG = 9,
       WH_SHELL = 10,
       WH_FOREGROUNDIDLE = 11,
       WH_CALLWNDPROCRET = 12,        
       WH_KEYBOARD_LL = 13,
       WH_MOUSE_LL = 14
    }

答案 1 :(得分:0)

您还没有定义HookType类型(消息是非常不言自明的不是吗?)

http://www.pinvoke.net/default.aspx/user32.setwindowshookex