| 网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 |
![]() |
| Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道 |
问题
有时需要在Authorware程序中调用其他应用程序打开某些文档,比如Word、PowerPoint、记事本、画图等等,打开这些程序后,最好可以再在Authorware程序中将他们关闭,使程序更加智能化,那如何做到在 网管bitscn_com
问题
有时需要在Authorware程序中调用其他应用程序打开某些文档,比如Word、PowerPoint、记事本、画图等等,打开这些程序后,最好可以再在Authorware程序中将他们关闭,使程序更加智能化,那如何做到在Authorware中关闭外部程序呢?
解决思路
在Authorware中关闭外部程序需要借助于用户自定义函数,常用的有Winapi.u32、ActiveM!.u32和Budapi.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)即可关闭目标程序窗口,如果文件被修改,则将显示保存文件对话框。
网管联盟bitsCN_com
提示:每一种程序窗口都有一个类名,这个是由开发该程序的程序员指定的,比如Authorware的类名为"APWMainClass",常用程序的类名参见表8-1。
网管下载dl.bitscn.com
表8-1 常用程序的类名
网管网www_bitscn_com
程 序 名 称
类 名
Authorware
APWMainClass 网管联盟bitsCN_com
Director
ASIMainWndClass 网管联盟bitsCN_com
Flash 网管bitscn_com
SmartSketchMDIFrame
Dreamweaver
_macr_dreamweaver_frame_window
网管网www_bitscn_com
Fireworks MX
网管bitscn_com
Fireworks_MX_MainWindow
网管网www_bitscn_com
Photoshop 网管下载dl.bitscn.com
Photoshop 中国网管联盟bitsCN.com
Explorer
CabinetWClass 网管u家u.bitsCN.com
Microsoft Internet Explorer
IEFrame 网管u家u.bitscn@com
Microsoft Word XP 中国网管论坛bbs.bitsCN.com
OpusApp 网管bitscn_com
Microsoft Excel XP
网管论坛bbs_bitsCN_com
XLMAIN 网管联盟bitsCN_com
Microsoft Powerpoint XP
网管联盟bitsCN@com
PP10FrameClass 网管网www_bitscn_com
Microsoft Access XP
OMain 网管网www_bitscn_com
Microsoft Visio 2002 中国网管联盟bitsCN.com
VISIOA 网管网www.bitscn.com
记事本 中国网管联盟bitsCN.com
Notepad
网管联盟bitsCN_com
写字板 中国网管论坛bbs.bitsCN.com
WordPadClass
画图 网管网www.bitscn.com
MSPaintApp
中国网管论坛bbs.bitsCN.com
计算器 中国网管论坛bbs.bitsCN.com
SciCalc 中国网管联盟bitsCN.com
录音机 网管联盟bitsCN@com
SoundRec 网管论坛bbs_bitsCN_com
音量控制 网管网www_bitscn_com
Volume Control 网管网www.bitscn.com
NetMeeting
网管u家u.bitsCN.com
MPWClass 网管u家u.bitsCN.com
MSN Messenger 网管联盟bitsCN@com
MSNMSBLClass
网管u家u.bitsCN.com
Windows Media Player 网管联盟bitsCN_com
WMPlayerApp
网管联盟bitsCN_com
MS-DOS
ConsoleWindowClass
网管论坛bbs_bitsCN_com
程序窗口的标题名很容易获取,一般就在程序窗口的左上角,如图8.47所示。对于标题名不显示在窗口界面上的程序,可以在任务栏中查看其窗口标题。
图8.47 程序窗口标题
2. ActiveM!.u32
ActiveM!.u32中用于关闭外部程序的函数有M_CloseApp(className, winTitle)和M_ShutApp(className, winTitle),参数className为目标程序窗口的类名,winTitle为程序窗口的标题名。对于MDI(多文档界面)程序,需要指明主窗口的className和winTitle。这两个函数的区别为:函数M_CloseApp()是尝试关闭某个程序,关闭前将会提醒用户保存文件;函数M_ShutApp()为强制性关闭某个程序,不出现保存提示。例如:
网管联盟bitsCN@com
M_CloseApp("Notepad", "demo.txt - 记事本") 网管论坛bbs_bitsCN_com
M_ShutApp("APWMainClass", "test")
网管u家u.bitscn@com
3. Budapi.u32
网管bitscn_com
Budapi.u32中用于关闭程序的函数有baCloseWindow(WinHandle)和baCloseApp(WinHandle),参数WinHandle为目标程序窗口的句柄。关闭某个程序之前,首先需要使用函数baFindWindow (Class, Title)获取该程序窗口的句柄,参数Class为程序窗口的类名,Title为程序窗口的标题。例如: 中国网管联盟bitsCN.com
Handle := baFindWindow("APWMainClass","test")
网管u家u.bitscn@com
baCloseWindow(Handle)
网管下载dl.bitscn.com
技巧:可以用类观察器ClassView获取程序窗口的类名。
试一试:读者可以试一试在Authorware中调用Word打开一个Doc文档,然后分别用以上三种方法将目标Word窗口关闭。
网管下载dl.bitscn.com
专家说明
中国网管论坛bbs.bitsCN.com
每种程序都有自己的类名,而每一个程序窗口又有自己唯一的句柄,例如即使打开了好几个文本文档,他们窗口的类名是一样的,但窗口句柄却不是一样的,一个句柄对应一个程序窗口。对于多文档界面(MDI)程序,需要指定主窗口的类名和标题名。
专家指点
并不是只有通过Authorware调用的程序窗口才能在Authorware中将其关闭,只要知道了目标程序的类名和窗口标题名,就可以获取窗口对应的句柄,然后将其关闭。同时,获取目标窗口的句柄后,不仅仅可以进行关闭操作,还可以进行窗口拉前、置顶、闪动、最大化、最小化等一系列操作。
|
0
|
评论加载中…