日期:2014-05-19  浏览次数:21092 次

winform中如何禁止使用按键精灵之类的工具?
禁止一切非从键盘、鼠标发出的小气,该如何处理?
使用HOOK能否做到?有知道的人请给代码,谢谢
解决了分数立刻送上

------解决方案--------------------

using System.Runtime.InteropServices;

class Win32Hook
{
[DllImport( "kernel32 ")]
public static extern int GetCurrentThreadId();

[DllImport( "user32 ",
CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern int SetWindowsHookEx(
HookType idHook,
HOOKPROC lpfn,
int hmod,
int dwThreadId);

public enum HookType
{
WH_KEYBOARD = 2,
WH_MOUSE = 7
}

public delegate int HOOKPROC(int nCode, int wParam, int lParam);

public void SetHook()
{
//设置鼠标钩子
SetWindowsHookEx(HookType.WH_MOUSE,
new HOOKPROC(this.MouseProc),
0,
GetCurrentThreadId());
//设置键盘钩子
SetWindowsHookEx(HookType.WH_MOUSE,
new HOOKPROC(this.KeyboardProc),
0,
GetCurrentThreadId());
}

public int KeyboardProc(int nCode, int wParam, int lParam)
{
//在这里放置你的处理代码
//不处理就到达了禁止的作用
return 1;
}
public int MouseProc(int nCode, int wParam, int lParam)
{
//在这里放置你的处理代码
//不处理就到达了禁止的作用
return 1;
}
}


可以在Form的构造函数里放入
Win32Hook hook = new Win32Hook();
hook.SetHook();
------解决方案--------------------
楼上的代码并不能实现楼主的要求。按键精灵是摸拟键盘鼠标的,摸拟的方式有纯发送消息、API操作键盘鼠标以及硬件摸拟。要禁用,你可以试试在WinForm中直接从DirectInput中读取键鼠操作,不过这样对按键精灵的“硬件摸拟模式”不知道有没有用,我没研究过。

另外,你可以用FindWindow来查找按键精灵的窗口,发现窗口就不Kill掉或者你自己的程序就不运行。不过这种方法按键精灵也有招对付,它的注册版好像有个什么盾功能,可以防止其它程序检测。

总而言之,很难做到完全禁止的。
------解决方案--------------------
楼上说的对,要看内存,如有按键精灵存在就杀了。