【200分】一个游戏辅助工具,计算两点之间距离,请大家帮忙。帮顶有分啊 应该要用hook吧,你的游戏开着,你做的监控程序肯定不能有焦点,这样只能通过全局钩子捕获键盘,如果能捕获键盘按键,捕获鼠标应该很简单,没做过这方面的,你搜搜如何捕获键盘,应该有源代码的。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 楼主看这里http://www.codeproject.com/csharp/globalhook.asp100分拿来 之前用的一些HOOK代码,看看吧。对你有什么帮助 //添加变量 IntPtr _nextHookPtr; //记录Hook编号 //添加变量 [DllImport("User32.dll")] public static extern IntPtr FindWindow(string classname, string windowname); [DllImport("User32.dll")] public static extern IntPtr GetForegroundWindow(); [DllImport("User32.dll")] public static extern long SetForegroundWindow(IntPtr hwnd); [DllImport("User32.dll")] public static extern long GetWindowText(IntPtr hwnd, string lpString, long cch); //private string windowtitle=""; public IntPtr hwnd; //添加变量 internal enum HookType //枚举,钩子的类型 { MsgFilter = -1, JournalRecord = 0, JournalPlayback = 1, Keyboard = 2, GetMessage = 3, CallWndProc = 4, CBT = 5, SysMsgFilter = 6, Mouse = 7, Hardware = 8, Debug = 9, Shell = 10, ForegroundIdle = 11, CallWndProcRet = 12, KeyboardLL = 13, MouseLL = 14, }; //中引入必须的API [DllImport("kernel32.dll")] static extern int GetCurrentThreadId(); //取得当前线程编号的API [DllImport("User32.dll")] internal extern static void UnhookWindowsHookEx(IntPtr handle);//取消Hook的API [DllImport("User32.dll")] internal extern static IntPtr SetWindowsHookEx(int idHook, [MarshalAs(UnmanagedType.FunctionPtr)] HookProc lpfn, IntPtr hinstance, int threadID); //上面一个是设置Hook的API [DllImport("User32.dll")] internal extern static IntPtr CallNextHookEx(IntPtr handle, int code, IntPtr wparam, IntPtr lparam); //上面取得下一个Hook的API // 声明一个实现的委托 internal delegate IntPtr HookProc(int code, IntPtr wparam, IntPtr lparam); //添加自己的Hook处理过程 IntPtr MyHookProc(int code, IntPtr wparam, IntPtr lparam) { if (code < 0) return CallNextHookEx(_nextHookPtr, code, wparam, lparam); //返回,让后面的程序处理该消息 if (wparam.ToInt32() == 65 || wparam.ToInt32() == 91) //如果用户输入的是 b { textBox1.Text = "XXXX"; return (IntPtr)1; //直接返回了,该消息就处理结束了 } else { return IntPtr.Zero; //返回,让后面的程序处理该消息 } } //添加加入Hook链和从Hook链中取消的函数 public void SetHook() { if (_nextHookPtr != IntPtr.Zero) //已经勾过了 return; HookProc myhookProc = new HookProc(MyHookProc); //声明一个自己的Hook实现函数的委托对象 _nextHookPtr = SetWindowsHookEx((int)HookType.Keyboard, myhookProc, IntPtr.Zero, GetCurrentThreadId()); //加到Hook链中 } public void UnHook() { if (_nextHookPtr != IntPtr.Zero) { UnhookWindowsHookEx(_nextHookPtr); //从Hook链中取消 _nextHookPtr = IntPtr.Zero; } }你需要做的可能就是找窗口的句柄了 C#窗体控件TabControl的使用 急需C#工具箱完全版 C# 如何实现EXCEL数据分列 用C#实现客户端生成服务端的功能 winfrom的安装部署 怎样把系统必备也打包进去? 鼠标移到datalist某一行时改变该行的背景色 ,在线等,麻烦大家了 求助用OracleClient连接ORACLE数据库的config设置!! C#写COM,VB6.0调试报错:自动化错 关于 world wind 的问题 ,重谢! 我想做一個在下拉框中能夠取得想word一樣的字體,程序如下,可是有錯誤提眎,不知道該怎嗎解決?? 一个数组最大可以多大 Page_Load 和 XmlHttp 问题
http://www.codeproject.com/csharp/globalhook.asp100分拿来
//添加变量 IntPtr _nextHookPtr; //记录Hook编号
//添加变量
[DllImport("User32.dll")]
public static extern IntPtr FindWindow(string classname, string windowname);
[DllImport("User32.dll")]
public static extern IntPtr GetForegroundWindow();
[DllImport("User32.dll")]
public static extern long SetForegroundWindow(IntPtr hwnd);
[DllImport("User32.dll")]
public static extern long GetWindowText(IntPtr hwnd, string lpString, long cch);
//private string windowtitle="";
public IntPtr hwnd;
//添加变量
internal enum HookType //枚举,钩子的类型
{
MsgFilter = -1,
JournalRecord = 0,
JournalPlayback = 1,
Keyboard = 2,
GetMessage = 3,
CallWndProc = 4,
CBT = 5,
SysMsgFilter = 6,
Mouse = 7,
Hardware = 8,
Debug = 9,
Shell = 10,
ForegroundIdle = 11,
CallWndProcRet = 12,
KeyboardLL = 13,
MouseLL = 14,
}; //中引入必须的API
[DllImport("kernel32.dll")]
static extern int GetCurrentThreadId(); //取得当前线程编号的API
[DllImport("User32.dll")]
internal extern static void UnhookWindowsHookEx(IntPtr handle);//取消Hook的API
[DllImport("User32.dll")]
internal extern static IntPtr SetWindowsHookEx(int idHook, [MarshalAs(UnmanagedType.FunctionPtr)] HookProc lpfn, IntPtr hinstance, int threadID);
//上面一个是设置Hook的API
[DllImport("User32.dll")]
internal extern static IntPtr CallNextHookEx(IntPtr handle, int code, IntPtr wparam, IntPtr lparam);
//上面取得下一个Hook的API
// 声明一个实现的委托
internal delegate IntPtr HookProc(int code, IntPtr wparam, IntPtr lparam);
//添加自己的Hook处理过程
IntPtr MyHookProc(int code, IntPtr wparam, IntPtr lparam)
{
if (code < 0) return CallNextHookEx(_nextHookPtr, code, wparam, lparam); //返回,让后面的程序处理该消息
if (wparam.ToInt32() == 65 || wparam.ToInt32() == 91) //如果用户输入的是 b
{
textBox1.Text = "XXXX";
return (IntPtr)1;
//直接返回了,该消息就处理结束了
}
else
{
return IntPtr.Zero;
//返回,让后面的程序处理该消息
}
}
//添加加入Hook链和从Hook链中取消的函数
public void SetHook()
{
if (_nextHookPtr != IntPtr.Zero) //已经勾过了
return; HookProc myhookProc = new HookProc(MyHookProc); //声明一个自己的Hook实现函数的委托对象
_nextHookPtr = SetWindowsHookEx((int)HookType.Keyboard, myhookProc, IntPtr.Zero, GetCurrentThreadId()); //加到Hook链中
} public void UnHook()
{
if (_nextHookPtr != IntPtr.Zero)
{
UnhookWindowsHookEx(_nextHookPtr);
//从Hook链中取消
_nextHookPtr = IntPtr.Zero;
}
}
你需要做的可能就是找窗口的句柄了