如何在Authorware中关闭外部程序?

  • 来源: 中国IT实验室 作者: somesun   2008-03-19/10:54
  • 问题
    有时需要在Authorware程序中调用其他应用程序打开某些文档,比如WordPowerPoint、记事本、画图等等,打开这些程序后,最好可以再在Authorware程序中将他们关闭,使程序更加智能化,那如何做到在
    问题
    有时需要在Authorware程序中调用其他应用程序打开某些文档,比如WordPowerPoint、记事本、画图等等,打开这些程序后,最好可以再在Authorware程序中将他们关闭,使程序更加智能化,那如何做到在Authorware中关闭外部程序呢?
    解决思路
        Authorware中关闭外部程序需要借助于用户自定义函数,常用的有Winapi.u32ActiveM!.u32Budapi.32中的函数,基本原理都是通过程序的类名和标题名获得程序窗口的句柄,然后用函数操作该句柄关闭程序窗口。
    具体步骤
    1. Winapi.u32
    在使用Winapi.u32实现关闭外部程序窗口时,需要使用到的相关函数是FindWindow()PostMessage()FindWindow()函数的作用是通过程序类名和窗口标题名两个参数来获取目标程序窗口的句柄,PostMessage()函数的作用是向获取的句柄对应的目标程序发送关闭窗口的指令。例如使用语句JumpOutReturn("notepad.exe", FileLocation^"demo.txt")打开了程序目录下的一个文本文件,然后使用语句Handle:=FindWindow("Notepad" , "demo.txt - 记事本")获取目标程序窗口的句柄并存储在变量Handle中,其中“Notepad”为记事本程序的类名,“demo.txt - 记事本”为程序窗口的标题名;最后使用语句PostMessage(Handle,274,61536,0)即可关闭目标程序窗口,如果文件被修改,则将显示保存文件对话框。
    *  提示:每一种程序窗口都有一个类名,这个是由开发该程序的程序员指定的,比如Authorware的类名为"APWMainClass",常用程序的类名参见表8-1。
    8-1 常用程序的类名
    程 序 名 称
        
    Authorware
    APWMainClass
    Director
    ASIMainWndClass
    Flash
    SmartSketchMDIFrame
    Dreamweaver
    _macr_dreamweaver_frame_window
    Fireworks MX
    Fireworks_MX_MainWindow
    Photoshop
    #p#分页标题#e#Photoshop
    Explorer
    CabinetWClass
    Microsoft Internet Explorer
    IEFrame
    Microsoft Word XP
    OpusApp
    Microsoft Excel XP
    XLMAIN
    Microsoft Powerpoint XP
    PP10FrameClass
    Microsoft Access XP
    OMain
    Microsoft Visio 2002
    VISIOA
    记事本
    Notepad
    写字板
    WordPadClass
    画图
    MSPaintApp
    计算器
    SciCalc
    录音机
    SoundRec
    音量控制
    Volume Control
    NetMeeting
    MPWClass
    MSN Messenger
    MSNMSBLClass
    Windows Media Player
    WMPlayerApp
    MS-DOS
    ConsoleWindowClass
        程序窗口的标题名很容易获取,一般就在程序窗口的左上角,如图8.47所示。对于标题名不显示在窗口界面上的程序,可以在任务栏中查看其窗口标题。
    8.47 程序窗口标题
            2. ActiveM!.u32
            ActiveM!.u32中用于关闭外部程序的函数有M_CloseApp(className, winTitle)M_ShutApp(className, winTitle),参数className为目标程序窗口的类名,winTitle为程序窗口的标题名。对于MDI(多文档界面)程序,需要指明主窗口的classNamewinTitle。这两个函数的区别为:函数M_CloseApp()是尝试关闭某个程序,关闭前将会提醒用户保存文件;函数M_ShutApp()为强制性关闭某个程序,不出现保存提示。例如:
    M_CloseApp("Notepad", "demo.txt - 记事本")
    M_ShutApp("APWMainClass", "test")
    3. Budapi.u32
    Budapi.u32中用于关闭程序的函数有baCloseWindow(WinHandle)baCloseApp(WinHandle),参数WinHandle为目标程序窗口的句柄。关闭某个程序之前,首先需要使用函数baFindWindow (Class, Title)获取该程序窗口的句柄,参数Class为程序窗口的类名,Title为程序窗口的标题。例如:
    Handle := baFindWindow("APWMainClass","test")
    baCloseWindow(Handle)#p#分页标题#e#
    *  技巧:可以用类观察器ClassView获取程序窗口的类名。
    *  试一试:读者可以试一试在Authorware中调用Word打开一个Doc文档,然后分别用以上三种方法将目标Word窗口关闭。
    专家说明
        每种程序都有自己的类名,而每一个程序窗口又有自己唯一的句柄,例如即使打开了好几个文本文档,他们窗口的类名是一样的,但窗口句柄却不是一样的,一个句柄对应一个程序窗口。对于多文档界面(MDI)程序,需要指定主窗口的类名和标题名。
    专家指点
       并不是只有通过Authorware调用的程序窗口才能在Authorware中将其关闭,只要知道了目标程序的类名和窗口标题名,就可以获取窗口对应的句柄,然后将其关闭。同时,获取目标窗口的句柄后,不仅仅可以进行关闭操作,还可以进行窗口拉前、置顶、闪动、最大化、最小化等一系列操作。

    评论 {{userinfo.comments}}

    {{money}}

    {{question.question}}

    A {{question.A}}
    B {{question.B}}
    C {{question.C}}
    D {{question.D}}
    提交

    驱动号 更多