多语言展示
当前在线:1114今日阅读:167今日分享:16

学习脚本制作 按键精灵解决系统字体兼容问题

脚本在自己电脑上分明可以运行,咋换一台电脑就不灵了呢?哦~原来是两台机子字体不一样,问题大了,怎样才能做到  快 准 狠 的解决系统字体兼容的问题呢?
工具/原料

按键精灵2014

方法/步骤
1

啥情况下系统字体会影响到游戏 游戏字体采用的是系统的字体,也就是说系统字体如果是宋体,游戏字体也是宋体。如果换一台电脑,系统字体是微软雅黑,那么游戏字体也会变成微软雅黑。(目前大部分游戏的字体都是采用系统字体)

2

如何兼容不同系统字体小编之前看到的很多脚本,都是要求用户改变系统字体来适应脚本。  这样的方法会让用户觉得很麻烦,而且,如果有些系统字体无法修改成功就无法使用脚本。所以今天小编就不介绍这种方法,咱们来一起看看更方便的方法。

3

步骤1、 在QUI界面上画一个下拉列表框,命名为xitong2、获取下拉列表框的值,如果选择的是win7系统则使用大漠的 GetDictInfo 函数,指定生成微软雅黑9号字体。      如果选择的是xp系统则使用大漠的 GetDictInfo 函数,指定生成宋体9号。           注意:为什么是9号字而不是10号字11号字呢?是这样的: 因为游戏里的字体是固定大小的,都是采用9号字体,不管系统宋体10号还是11号,游戏里都是宋体9号。

4

GetDictInfo函数函数功能简介:根据指定的文字,以及指定的系统字库信息,获取字库描述信息.函数原型: string GetDictInfo(str,font_name,font_size,flag)参数定义:                str 字符串:                 需要获取的字符串                font_name 字符串:      系统字体名,比如'宋体'                font_size 整形数:        系统字体尺寸,这个尺寸一定要以大漠综合工具获取的为准.如何获取尺寸看视频教程.                flag 整形数:               字体类别 取值可以是以下值的组合,比如1+2+4+8,2+4. 0表示正常字体.                                                 1 : 粗体                                                 2 : 斜体                                                 4 : 下划线                                                 8 : 删除线返回值:     字符串   返回字库信息,每个字符的字库信息用'|'来分割

5

示例:// 下面的代码是获取'回收站'这3个字符的字库信息,然后加入到字库1中.font_desc = dm.GetDictInfo('回收站','宋体',9,0)font_desc = split(font_desc,'|')count = ubound(font_desc)for i = 0 to count    TracePrint font_desc(i)    dm.AddDict 1,font_desc(i)next

6

代码// 创建字库(字表, 字体, 字号, 字库ID, 文件路径[传空为不保存到字库文件])Sub CreateFont(Words, Font, Size, Index, Path)Dim TempStrTempStr = dm.GetDictInfo(Words, Font, Size, 0)TempArray = Split(TempStr,'|')For i = 0 to UBound(TempArray)dm.AddDict Index,TempArray(i)NextErase TempArray // 释放不用的内存If Len(Path) > 0 Then Call dm.SaveDict(0, Path)End IfEnd Sub// 初始化大漠Call register()Set dm = CreateObject('dm.dmsoft')Call dm.SetPath('c:\test')// 读取选项Select Case Form1.xitong.ListIndexCase 0FontName = '微软雅黑'Case 1FontName = '宋体'End SelectCall CreateFont('我的电脑|网上邻居' ,FontName, 9, 0, '字库.txt')//调用创建字库函数 //找字dm_ret = dm.FindStr(0,0,2000,2000,'我的电脑','ffffff',1.0,intX,intY)If intX >= 0 and intY >= 0 ThenMessageBox '我的电脑'ElseMessageBox '没找到'End Ifdm_ret = dm.FindStr(0,0,2000,2000,'网上邻居','ffffff',1.0,intX,intY)If intX >= 0 and intY >= 0 ThenMessageBox '网上邻居'ElseMessageBox '没找到'End IfSub register() //注册大漠Set ws = createobject('Wscript.Shell')ws.run 'regsvr32 atl.dll /s'Set ws = nothingPutAttachment 'c:\test', 'dm.dll'PutAttachment '.\Plugin' ,'RegDll.dll'call Plugin.RegDll.Reg ( 'c:\test\dm.dll')Set dm = createobject('dm.dmsoft')ver = dm.ver()If len(ver) = 0 ThenMessageBox '插件注册失败,检查系统是否禁用了vbs脚本权限'EndScriptEnd IfEnd Sub注意:1、小编是xp系统,系统字体为宋体,9号字,所以小编拿电脑桌面上的 我的电脑和网上邻居作为例子。     2、 启动之后第一次运行选择了xp系统,第二次要选择win7系统的时候,需要按下保存设置,否则,再次启动qui会读取之前的下拉列表选择的信息,依然会切换到xp系统选项。

7

优化——判断当前系统字库是否已经生成过咱们运行前面的程序,会发现启动的时间比较久,那是因为咱们每次运行脚本,都会按照使用者选择的系统生成一次字库。 生成字库所要用的时间是比较多的,如何解决这个问题呢?方法首次执行完脚本后,获取下本台计算机的机器码,存放到ini文件中,每次执行前判断下,机器码是否是一样的,一样的则不执行字库生成。

8

优化步骤1  、 读取记录机器码的setup.ini 文件里存放的机器码2  、获取当前电脑机器码,与ini文件中记录的机器码值进行对比,不相等,则执行生成字库。3 、 获取当前电脑机器码,记录到ini文件中,下次再执行的时候,如果还是当前电脑,则不执行生成字库。代码// 创建字库(字表, 字体, 字号, 字库ID, 文件路径[传空为不保存到字库文件])Sub CreateFont(Words, Font, Size, Index, Path)Dim TempStrTempStr = dm.GetDictInfo(Words, Font, Size, 0)TempArray = Split(TempStr,'|')For i = 0 to UBound(TempArray)dm.AddDict Index,TempArray(i)NextErase TempArray // 释放不用的内存If Len(Path) > 0 Then Call dm.SaveDict(0, Path)End IfEnd Sub// 初始化大漠Call register()Set dm = CreateObject('dm.dmsoft')Call dm.SetPath('c:\test')// 读取选项Select Case Form1.xitong.ListIndexCase 0FontName = '微软雅黑'Case 1FontName = '宋体'End Select// 如果字库存在,就检测是否换过机器,否则直接产生字库If dm.IsFileExist('c:\test\字库.txt') ThenOldCode = Plugin.File.ReadINI('Setup','机器码','c:\test\Setup.ini')//读取ini文件里的机器码值NewCode = dm.GetMachineCode() //获取当前机器码值If OldCode <> NewCode ThenCall CreateFont('我的电脑|网上邻居' ,FontName, 9, 0, '字库.txt')Call Plugin.File.WriteINI('Setup','机器码',NewCode,'c:\test\Setup.ini') //将机器码值写入ini文件Elsecall dm.SetDict(0,'c:\test\字库.txt')End IfElseCall CreateFont('我的电脑|网上邻居' ,FontName, 9, 0, '字库.txt')Call Plugin.File.WriteINI('Setup','机器码',NewCode,'c:\test\Setup.ini') //将机器码值写入ini文件End If//找字dm_ret = dm.FindStr(0,0,2000,2000,'我的电脑','ffffff',1.0,intX,intY)If intX >= 0 and intY >= 0 ThenMessageBox '我的电脑'ElseMessageBox '没找到'End Ifdm_ret = dm.FindStr(0,0,2000,2000,'网上邻居','ffffff',1.0,intX,intY)If intX >= 0 and intY >= 0 ThenMessageBox '网上邻居'ElseMessageBox '没找到'End IfSub register() //注册大漠Set ws = createobject('Wscript.Shell')ws.run 'regsvr32 atl.dll /s'Set ws = nothingPutAttachment 'c:\test', 'dm.dll'PutAttachment '.\Plugin' ,'RegDll.dll'call Plugin.RegDll.Reg ( 'c:\test\dm.dll')Set dm = createobject('dm.dmsoft')ver = dm.ver()If len(ver) = 0 ThenMessageBox '插件注册失败,检查系统是否禁用了vbs脚本权限'EndScriptEnd IfEnd Sub

9

系统默认字体用户修改过?例如:win7系统的字体 默认是微软雅黑,用户改成黑体了,这种情况怎么办呢?。  这种情况其实很好办,咱们可以画一个文本框,让用户自己输入自己当前系统是什么字体。是不是很简单。所以再次优化后的脚本,就支持下拉列表框选择系统字体,和手动输入系统字体。 咱们来看看优化后的脚本。注意:如果是win7微软雅黑字体,电脑桌面上的文字有杂色的,右击计算机——属性——高级系统设置——调整为最佳性能 之后字体是纯色后再进行使用。

推荐信息