系统鼠标插件怎样怎么初始化电脑系统

金山卫士架构(8)
根据我的实践,在Windows平台下设计并实现一个C++插件系统,需要解决几个关键技术问题。下面我谈谈需要解决的几个关键技术问题以及我想到的简单的解决思路。由于我主要专注于Windows平台C++程序的开发,这里假设以VS为编译环境,MFC界面库来说明。
1. 主程序和插件的关系问题
&&&& 插件架构一般可以用下面的图来表示:
(注:此图来自李先静的博客文章:&,略有修改,特向李大侠表示感谢)
&&&&& 一般来说:应用程序框架所完成的功能应为一个软件系统的核心和基础,这些基本功能主要包括一些核心功能,即可为用户使用,也可为插件使用。插件所完成的功能是对应用程序框架功能的扩展与补充,一般插件完成系列化功能,例如:PHOTOSHOP的滤镜插件完成对图形的特殊效果处理,这些功能都有一些共性,可以进行集中管理,并且是可以定义出标准的插件接口。
&&&&& 还有一般更为极端一点:应用程序框架不实现任何具体的功能,只充当一个插件容器。然后由插件实现具体的功能。
2.界面配置问题
&&&&& 界面配置对大家可能不太陌生。在较早的时候我们曾使用ini文件进行界面配置,随着扩展性更强的XML的兴起,使用XML文件进行界面配置逐渐流行起来。
&&&& 界面配置的实现流程如下:
3.界面和逻辑的结合及消息处理问题
&&&& 单纯的实现对界面的配置并不能算是一个插件系统,插件系统更重要的是如何实现对消息的处理。首先我们要明确在一个系统我们主要要处理哪些消息。我总结了一下,请大家看下表:
&&&&& 其中一个桌面应用系统主要处理的是菜单消息、工具栏按钮消息、鼠标消息、键盘消息、键盘消息和系统的其它消息和其它控件消息,如ComboBox控件消息和停靠栏消息。在上面六项中前四项又是主要的。下面我简单谈谈菜单消息、工具栏消息、鼠标消息和键盘消息的实现思路。
&&&&& 菜单消息和工具栏消息的处理本质是一样的,就是以ID为标识来寻找命令消息处理函数以及界面更新处理函数。那么用ID和消息处理函数绑定在一起呢?一种办法是使用boost::bind就行绑定,具体参看我以前写的一篇博客:&。
&&&&& 鼠标和键盘消息的响应有三种思路:一种是使用C++的类的虚函数机制,具体是在底层定义一个消息处理对象的基类,在主程序里有一个消息处理对象的基类指针,在插件模块里实现消息处理对象基类的派生类,并定义一个派生类的变量,在适当的时候将将这个派生类变量的指针赋值给主程序的基类指针,然后这个基类指针负责处理所有的鼠标和键盘消息;
&&&&& 第二种思路是使用C++的回调设计模式(关于C++的回调设计模式,这里有一篇很棒的文章:&),具体是凡是要响应鼠标和键& 盘消息的插件模块在初始化时都要注册回调函数(所谓注册回调函数主要就是把响应鼠标键盘消息的函数指针保存下来),然后在主程序的鼠标键盘的响应函数里把该指针取出来调用;第三种思路是使用windows的Hook机制,大致的思路是在插件模块里使用钩子来截获所有窗口的鼠标键盘消息,这个思路我还没有更多的思考,但我想应该是可以的。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:27154次
排名:千里之外
转载:82篇
(1)(3)(18)(30)(19)(2)(10)大漠插件 后台鼠标问题 _ [新]综合讨论 - 按键精灵论坛
腾讯微博:
软件版本:2014.03软件大小:55.1M更新时间:
软件版本:3.1.2(免root)软件大小:61.2M更新时间:
软件版本:1.2.2软件大小:37.4M更新时间:
查看: 7264|回复: 12
fwx2008072
本帖最后由 fwx2008072 于
21:22 编辑 我用记事本做为测试对象,所有后台鼠标点击、移动和后台按键都正常后台了。但回到游戏窗口测试,所有绑定模式都试过,"后台鼠标"没有移动。"后台点击"把后台中的窗口,点到前台来了。。郁闷了我好久,,找了很多论坛,很多和我同样的问题,但没有一个回答的。。求高手帮帮我们吧~~~~~下面是源脚本:// 首先打包dm.dll和RegDll.dll到附件,当然如果你还有其它资源(字库,图片等)也可以一并打包// 这个need_ver作为本脚本需要使用的插件版本. 如果要换插件时,记得更改这个值.need_ver = "2.1152B"// 释放附件>>>>>>>>>>>>>>>>>>>// 这里选择c盘的test-_game作为插件的基本目录 也就是SetPath对应的目录。所以所有资源都释放在此目录.PutAttachment "c:\test_game","*.*"// 这里要用到RegDll来注册插件,所以必须释放到Plugin. 但是切记不能把dm.dll释放到Plugin.那会导致插件失效.PutAttachment ".\Plugin" ,"RegDll.dll"// 插件注册开始>>>>>>>>>>>>>>>>>>>// 下面开始注册插件,先尝试用RegDll来注册.这里必须使用绝对路径。以免有别人把dm.dll释放在系统目录.造成版本错误.Call Plugin.RegDll.Reg("c:\test_game\dm.dll") // 这里判断是否注册成功set dm = createobject("dm.dmsoft")ver = dm.Ver()if ver
need_ver then// 先释放先前创建的dm set dm = nothing
// 再尝试用regsvr32 来注册. 这里必须使用绝对路径。以免有别人把dm.dll释放在系统目录.造成版本错误. set ws=createobject("Wscript.Shell") ws.run "regsvr32 c:\test_game\dm.dll /s" set ws=nothing Delay 1500
// 再判断插件是否注册成功 set dm = createobject("dm.dmsoft") ver = dm.Ver()
need_ver then
// 这时,已经确认插件注册失败了。 弹出一些调试信息,以供分析
messagebox "插件版本错误,当前使用的版本是:"&ver&",插件所在目录是:"&dm.GetBasePath()
endscript end ifend if//这里设置插件基本目录dm.SetPath "c:\test_game"// 获取句柄hwnd = dm.GetMousePointWindow()// 绑定dm_ret = dm.BindWindow(hwnd,"normal","windows","windows",0)// 检测绑定返回值if dm_ret = 0 then
last_error = dm.GetLastError()// 如果是WIN7 VISTA WIN2008系统,检测当前系统是否有开启UAC
if dm.GetOsType() = 3 then
// 有开启UAC的话,尝试关闭if dm.CheckUAC() = 1 then
if dm.SetUAC(0) = 1 then
// 关闭UAC之后,必须重启系统才可以生效
messagebox "已经关闭系统UAC设置,必须重启系统才可以生效。点击确定重启系统"
dm.ExitOs 2
Delay 2000
end ifend if
// 具体错误码的含义,可以参考函数GetLastError的说明.
messagebox "绑定失败,错误码是:"&last_error
messagebox "如果确定关闭了UAC,很可能是系统的防火墙拦截插件,请暂时关闭360等安全防火墙再尝试"
endscriptend if// 下面就是脚本部分了 省略//Delay 200//TracePrint "lll"//dm.KeyPress 27
Delay 200dm.MoveTo 804,520Delay 200dm.LeftClickDelay 200Delay 200TracePrint "lll"dm.KeyPress 70// 下面这是脚本结束时执行的部分Sub OnScriptExit()
dm.UnBindWindowEnd Sub
按键会员(月)按键会员绑定账号后自动赠送龙年勋章(360天)龙年纪念勋章(360天)按键精灵开发者2级可通过提升认证等级来升级勋章:
绑定模式中可能游戏不支持那种后台鼠标键盘的绑定模式
绑定模式中可能游戏不支持那种后台鼠标键盘的绑定模式
认证考霸(90天)参加考霸活动,对认证考了十次以上用户的鼓励学有所成学有所成勋章,新手步入按键学堂的第一枚勋章龙年勋章(360天)龙年纪念勋章(360天)按键精灵开发者6级可通过提升认证等级来升级勋章:
把代码发一下吧
多年开发经验,接单
擅长VC C# VB 按键以及大漠
有需要可以联系
支持淘宝交易
按键精灵开发者2级可通过提升认证等级来升级勋章:
我正好找类似的问题,顶
沙发板凳说的对,然后我补充一点点。如果模式绑定成功,后台鼠标键盘无效的话,还会有我知道的两种情况,第一种就是如果你用的是DX模式绑定的,需要激活游戏窗口。dm_ret = dm.SetWindowState(hwnd,1) 这一句。运行脚本的时候鼠标要在游戏窗口上,咳,这一句貌似废话了,可以无视。第二种情况比较水了,就是按键需要管理员权限运行...咳,貌似这句也有点废话。 不过这两种我都遇到过,所以分享一下老鸟们勿喷-
-只是希望能帮到楼猪...
龙年勋章(360天)龙年纪念勋章(360天)学有所成学有所成勋章,新手步入按键学堂的第一枚勋章按键精灵开发者4级可通过提升认证等级来升级勋章:
dm_ret = dm.SetWindowState
按键精灵开发者2级可通过提升认证等级来升级勋章:
。。神呀。。你写的太长了。。。你那句不合适加个颜色呀。。。。看的人累死了
千秋☆霸业
学有所成学有所成勋章,新手步入按键学堂的第一枚勋章兔年勋章(360天)兔年纪念勋章(360天)龙年勋章(360天)龙年纪念勋章(360天)
本帖最后由 hilo 于
00:52 编辑 我正好找同的问题,顶
我也一样!!!!下面是我的源码!Call 注册()//指定窗口hwnd = dm.GetMousePointWindow()//激活窗口dm_ret = dm.SetWindowState(hwnd,1) //后台绑定dm_ret = dm.BindWindowEx(hwnd,"normal","windows3","windows",0)//
换了好多种。都不好用。。。鼠标都把后台点到前面来了。。dm.SetKeypadDelay "dx",10dm.SetMouseDelay "dx",10Sub 注册()
PutAttachment ".\plugin","*.dll"
PutAttachment ".\plugin\da","*.bmp"
PutAttachment ".\plugin\da","*.txt"
PutAttachment ".\plugin\da","dm.dll"
//↑PutAttachment释放附件
Call Plugin.RegDll.Reg(".\plugin\da\dm.dll")
set dm = createobject("dm.dmsoft")
dm.SetPath ".\plugin\da"
//↑大漠·注册
dm.SetPath ".\plugin\da"//↑指定“全局路径?
dm.SetDict 0,"ss.txt"End Subdm_ret = dm.FindPic(0,0,,"进入副本.bmp",".9,0,intX1,intY1) If intX1 >= 0 and intY1 >= 0 Then
intx1, inty1
dm.LeftClick
Else End IfSub OnScriptExit()
dm_ret = dm.UnBindWindow() End Sub
我也遇到了,还是没看明白,用大模工具也测了,没用,
我也遇到这样的问题了,有解决方案了没?真的是游戏不支持呀。关于鼠标左边光标不停转动问题_百度知道电脑xp系统装cpi插件怎么打开?_百度知道电脑启动时初始化失败如何修复?a_百度知道}

我要回帖

更多关于 怎么初始化电脑系统 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信