1

我正在尝试使用 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”。知道如何解决这个问题吗?如果有人可以为初学者推荐一篇关于 Win32 API Hooks with C# 的文章,那就太好了。我一直在努力寻找,但我最清楚的是上面粘贴的这个。

4

2 回答 2

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
    }
于 2012-11-30T19:58:05.423 回答
0

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

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

于 2012-11-30T19:47:36.257 回答