【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; } }你需要做的可能就是找窗口的句柄了 怎么样记录表的变化 小弟数学不好。。。肿么办? 关于ERP 命名空间xxx中不存在xxxx(是否缺少程序集引用) VC函数转到c#下是怎样的 有没有可以不用.net环境的c#语言编译器? 在Visual Studio中更新web引用,出现错误:基础连接已关闭,接收时发生错误。 本人在客户端进行web引用时,客户端调试时提示该错误,请给出错误原因,谢谢!!! 请问在模板列里添加一个cheakbox之后,如何得到当前行的某个列的数值?? DLl存在,却无法加载,怪哉。。。Why??? 一个数组最大可以多大 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;
}
}
你需要做的可能就是找窗口的句柄了