免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2205 | 回复: 0
打印 上一主题 下一主题

用WSH创建系统字本样本 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-05-13 11:49 |只看该作者 |倒序浏览
Windows脚本语言WSH用起来却是很方便,不过在使用过程中总是感觉功能不是很强大,用起来有很大的限制,有限的对象/属性让你不能为所欲为。
    这不,我的一个朋友是做美术设计的,每次为了找到合适的字体的总是试来试去,很有点不厌其烦的味道,我自告奋勇要为他解决这道难题,用VB、VC吧,好像有点大材小用;用WSH吧,却发现还不一定能实现这个功能!后来听一个WSH老手说可以通过访问COM对象来实现,经过一番摸索还终于实现了……
    下边就是我的实现方法,之所以将它介绍给你,不仅仅是因为通过它可以完成这一个小小的功能,更重要的是,它提供给我们一种通过COM来调用Windows API的方法。我们知道,COM对象的功能十分强大,它可以完成任何一个C程序员所能够完成的工作,换而言之,WSH也可以有这么强大的功能!
    下载VBCCE
    要通过COM访问Windows API,我们必须自己生成一些OCX文件(不要害怕,只是几个很简单的步骤,连菜鸟都可以很快掌握的……),所以我们首先需要一些工具:
    如果你有Visual Basic,你已经有了我们需要完成本文的所有工具;如果没有Visual Basic,也没有关系,由于我们只是用Visual Basic来包装几个函数,所以不需要Visual Basic这么大的工具,我们只需要一个控件生成器,这就是VBCCE,下载地点为 http://msdn.microsoft.com/vbasic/downloads/CCE,下载下来的是一个名为vb5ccein.exe的可执行文件,大小为7MB,直接执行此可执行文件安装VBCCE。
    生成控件
    启动VBCCE后,打开一个“New Project(新建项目)”,该项目类型为“Active Control(ActiveX控件)”。
    1.引用部件
    在窗口左边的“ToolBox(工具箱)”上空白处单击右键,选择“Components(部件)”,在弹出的“Components”窗口中,选中“Microsoft Windows Common Control”,按下“确定”按钮,将“Microsoft Windows Common Control”包含的控件显示在工具箱上以备后用。
    2.包装控件
    在VBCCE主界面,选择“Project(工程)”/“Add Form(添加窗体)”。
    在工具箱上选中“ListView”控件,添加到新建的Form1上。
    将Project1命名为MyTool。注意:给工程命名要小心,不能和系统中已经存在的对象重名,本例中命名为MyTool。
    将控件命名为ListFonts,现在我们包装的这个控件名就是MyTool.ListFonts,以后就通过这个名字来调用它。
    为ListFonts控件添加代码如下:
    Public Function EnumFonts() As String
    Dim item As Variant
    Dim x As Long
    Form1.ListView1.ColumnHeaders.Add , , "font"
    For x = 0 To Screen.FontCount - 1
    Call Form1.ListView1.ListItems.Add(, "key" & x, Screen.Fonts(x))
    Next
    Form1.ListView1.Sorted = True
    Form1.ListView1.SortKey = 0
    Form1.ListView1.SortOrder = 0
    Form1.ListView1.Refresh
    For Each item In Form1.ListView1.ListItems
    EnumFonts = EnumFonts & item.Text & vbCr
    Next
     ' delete list
    Unload Form1
    End Function
    3.编译/分发控件
    对象的建立工作已经完成,执行“File(文件)”/“Make MyTool.ocx(生成MyTool.ocx控件)”,现在可以调用MyTool.ListFonts控件了。
    那么以后我们是不是每一次用MyTool.ListFonts控件都要用VBCCE来编译一遍呢?
    不是这样的,你可以用VBCCE附带的“Application Setup Wizard”来将这个OCX控件编译成一个可安装的控件,这样在需要的时候随时可以Setup而不管你是否安装了VBCCE……
    创建字体样本页
    控件已经生成了,我们现在只用引用控件,列举出系统上已经安装的字体,如果你愿意还可以打印出来……
    代码如下:
    set tools = CreateObject("MyTool.ListFonts"
    set ie = WScript.CreateObject("InternetExplorer.Application", "ie_"
    Title = "字体显示页面"
    ShowWords = "欢迎订阅PCDigest"
    StandardFormat = "<font style=""{12pt " & "Arial}"">;"
    FontListEmu = Split(tools.EnumFonts, vbCr)
    OpenIE 500,400,Title
    for each Font in FontListEmu
    AddToIE Font
    next
    sub AddToIE(FontName)
    size= 15
    Format = "<font style=""{font: " & size & "pt " & fontname & "}"">;"
    html = ""
    html = html + StandardFormat + "字体名称: " + FontName + "</font>;
;"
    html = html + Format + ShowWords + "</FONT>;<HR>;"
    ie.document.body.insertAdjacentHTML "beforeEnd", html
    end sub
    sub OpenIE(width, height, title)
    ie.height =height
    ie.width =width
    ie.toolbar = 0
    ie.statusbar = 0
    page = "JavaScript:'<TITLE>;" + title + "</TITLE>;'"
    ie.navigate(page)
    do while (ie.ReadyState<>;4)
    loop
    ie.visible = true
   end sub上边这段代码,将“欢迎订阅PCDigest”以系统中的所有字体显示在一个大小为500×400的IE窗口中,字体大小设置为15。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP