游戏里面的控件都不是实际上的控件,你不可能像用spy++等工具进行捕捉(除非是控件游戏,不过那多是不成熟的产品)
游戏中的控件你可以这样理解,你用C#写个程序,在主窗口上面画一个框,框里面写两个字,把它理解为一个按钮,然后给窗口加入鼠标事件,当鼠标点击时坐标在这个框框上就判断为单击了这个按钮,这就是游戏里面的控件,除了窗口之外没有其它控件了,其实用DX绘图与GDI+绘图的原理是一样的,只是DX更加高效,用这种方法制作虽然麻烦,但是能完全自定义外观,而且能与游戏最大地兼容并节约内存,你说这种控件你能用spy++捕捉到么?
不过即使使用这种方法,游戏总还是会在内存中储存相应的数据的,只要对内存下手就可以了,如果你想获得游戏内存中的数据,需要访问进程内存,就需要使用诸如openprocess、readprocessmemory等的API了,内存地址你通过可以反汇编,也可以等游戏运行时用内存搜索工具进行搜索,拿到内存地址一切就好办了
首先使用getChildAt或者findViewById等方式找到自己的子控件 然后对子控件调用getLayoutParams,获取它的布局参数 这样在返回的layoutparams 对象中就有各种margin存在
有几种方法实现:
1创建一个桌面大小的"透明窗体",并且边框设为0。这样窗口坐标就是桌面坐标,在自己程序的消息循环中捕获鼠标消息就行了。QQ、RTX的"屏幕截图"功能就是这样实现的。
2使用SetWindowsHookEx捕获WH_MOUSE、WH_GETMESSAGE消息。并将SetWindowsHookEx的第四个参数设置为NULL,捕获全局的消息。然后在第二个参数的回调函数中调用CallNextHookEx,以及监听鼠标消息。程序关闭后,别忘记调用UnhookWindowsHookEx。还有就是程序要写在DLL中,因为系统会把它注入到其它进程中去捕获消息的。可以参考网上SetWindowsHookEx实现键盘记录的例子,实现鼠标记录。
3驱动中Inline Hook Mouclass鼠标类驱动的MouseClassServiceCallback函数,获得鼠标输入。
建议使用1、2中的一种方法。没必要开发驱动,这里只是介绍有几种方法可以获得鼠标全局点击事件。
来自:>
比较简单的写法,在你需要读取的时候,直接string str="";thisInvoke((EventHandler)(delegate{ // 这里写你的控件代码,比如 //str= targetSelectedText; }));至于普通的写法怎么写,你搜索一下C#跨线程访问就算。
1、可以使用了“notify”风格(即是控件的SS_NOTIFY风格)后,当点击该控件时,其父窗口会收到下列消息:
消息名为:
WM_COMMAND
消息的参数:
wParam: LOWORD(wParam)存放的是控件的ID,HIWORD(wParam)放的是STN_CLICKED(这是静态控件被 点击的标志)
lParam: 该控件的句柄。
2、例子:
case WM_COMMAND:
{
if(HIWORD(wParam) == STN_CLICKED)
{
if(LOWORD(wParam) == 某个控件)
{
处理之
}
}
}
以上就是关于如何得到游戏里对话框中的内容 API C#全部的内容,包括:如何得到游戏里对话框中的内容 API C#、如何获取layoutcontrol内的控件、如何获取任意窗口中的控件的位置,返回坐标vc的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)