求助DOS窗口问题

CYSK 2002-10-07 07:15:14
请问如何在使用SHELL启动DOS程序之后将DOS窗口自动退出?
...全文
21 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
huxiangming 2002-10-07
  • 打赏
  • 举报
回复
结束由Shell所调用的程序

以下程序在.BAS
Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Declare Function SetForegroundWindow Lib "user32" Alias "SetForegroundWindow" (ByVal hwnd As Long) As Long
Declare Function OpenProcess Lib "kernel32" _
(ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long
Declare Function WaitForSingleObject Lib "kernel32" _
(ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Declare Function CloseHandle Lib "kernel32" _
(ByVal hObject As Long) As Long
Declare Function GetExitCodeProcess Lib "kernel32" _
(ByVal hProcess As Long, lpExitCode As Long) As Long
Declare Function TerminateProcess Lib "kernel32" _
(ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Declare Function PostMessage Lib "user32" Alias "PostMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
ByVal lParam As Long) As Long

Public Const SYNCHRONIZE = &H100000
Public Const STILL_ALIVE = &H103
Public Const INFINITE = &HFFFF
Public Const WM_CLOSE = &H10
Public hWnd5 As Long
Function EnumWindowsProc(ByVal hwnd As Long, ByVal lParam As Long) As Boolean
Dim S As String
If GetParent(hwnd) = 0 Then
Dim tid As Long, pid As Long
tid = GetWindowThreadProcessId(hwnd, pid)
If pid = lParam Then
hWnd5 = hwnd
EnumWindowsProc = False
End If
End If
EnumWindowsProc = True ' 表示继续列举 hWnd
End Function

以下程序在Form
Option Explicit
Private ExitCode As Long
Private hProcess As Long
Private isDone As Long
Private Sub Command1_Click()
Dim pid As Long
pid = Shell("notepad.exe", vbNormalFocus)
Call EnumWindows(AddressOf EnumWindowsProc, pid) '设定hWnd5的值
hProcess = OpenProcess(SYNCHRONIZE , 0, pid)
isDone = False
Do
Call GetExitCodeProcess(hProcess, ExitCode)
DoEvents
Loop While ExitCode = STILL_ALIVE Or isDone
Call CloseHandle(hProcess)
isDone = True
Label1.Caption = "Over"
End Sub

Private Sub Command2_Click()
Dim i As Long
Call SetForegroundWindow(hWnd5)
Call PostMessage(hWnd5, WM_CLOSE, 0, 0)
End Sub

Private Sub Form_Unload(Cancel As Integer)
isDone = True
End Sub




第00章 目录 第01章 关于本手册 01.1 两套帮助 01.2 关于安装 01.3 使用Vim教程 01.4 版本 第02章 Vim第一步 02.1 首次运行Vim 02.2 插入文本 02.3 移动光标 02.4 删除字符 02.5 撤销和重做 02.6 其它编辑命令 02.7 退出 02.8 求助 第03章 移动 03.1 以Word为单位的移动 03.2 移动到行首或行尾 03.3 移动到指定的字符上 03.4 以匹配一个括号为目的的移动 03.5 移动到指定行 03.6 告诉你当前的位置 03.7 滚屏 03.8 简单搜索 03.9 简单的搜索模式 03.10 使用标记 第04章 小幅改动 04.1 操作符命令和位移 04.2 改变文本 04.3 重复改动 04.4 Visual模式 04.5 移动文本 04.6 复制文本 04.7 使用剪贴板 04.8 文本对象 04.9 替换模式 04.10 结论 第05章 定制你的Vim 05.1 vimrc文件 05.2 vimrc示例 05.3 简单的映射 05.4 添加一个plugin 05.5 增加一个帮助文件 05.6 选项窗口 05.7 常用选项 第06章 使用语法高亮 06.1 打开色彩 06.2 没有色彩或色彩错误? 06.3 不同的颜色 06.4 有色或无色 06.5 彩色打印 06.6 进一步的学习 第07章 编辑多个文件 07.1 编辑另一个文件 07.2 文件列表 07.3 切换到另一文件 07.4 备份 07.5 在文件间复制粘贴 07.6 查看文件 07.7 更改文件名 第08章 分隔窗口 08.1 分隔一个窗口 08.2 为另一个文件分隔出一个窗口 08.3 窗口大小 08.4 垂直分隔 08.5 移动窗口 08.6 针对所有窗口操作的命令 08.7 使用vimdiff查看不同 08.8 其它 08.9 页签 第09章 使用GUI 09.1 GUI的各部分 09.2 使用鼠标 09.3 剪贴板 09.4 选择模式 第10章 大刀阔斧 10.1 命令的记录与回放 10.2 替换 10.3 命令作用范围 10.4 全局命令 10.5 Visual block模式 10.6 读写部分文本 10.7 格式化文本 10.8 改变大小写 10.9 使用外部程序 第11章 灾难恢复 11.1 基本方法 11.2 交换文件在哪? 11.3 是不是死机了? 11.4 进一步的学习 第12章 奇技淫巧 12.1 替换一个word 12.2 将Last,First为First Last 12.3 排序 12.4 反转行序 12.5 统计字数 12.6 查找帮助页 12.7 消除多余空格 12.8 查找一个word在何处被引用 第20章 回事冒号命令 20.1 命令行编辑 20.2 命令行缩写 20.3 命令行补齐 20.4 命令行历史记录 20.5 命令行窗口 第21章 进退之间 21.1 挂起与恢复 21.2 执行shell命令 21.3 记住编辑住处:viminfo 21.4 会话 21.5 视图 21.6 模式行 第22章 查找文件 22.1 文件浏览器 22.2 当前目录 22.3 查找一个文件 22.4 缓冲区列表 第23章 编辑非文本文件 23.1 DOS,Mac和Unix格式的文件 23.2 来自因特网的文件 23.3 加密文件 23.4 二进制文件 23.5 压缩文件 第24章 快速键入 24.1 纠错 24.2 显示匹配字符 24.3 自动补全 24.4 重复录入 24.5 从其它行复制 24.6 插入一个寄存器的内容 24.7 缩写 24.8 键入特殊字符 24.9 连体字 24.10 Normal模式命令 第25章 编辑格式化的文本 25.1 断行 25.2 对齐文本 25.3 缩进和制表符 25.4 处理长的文本行 25.5 编辑表格 第26章 重复重复,再重复 26.1 Visual模式的重复 26.2 加与减 26.3 对多个文件做同样的改动 26.4 在一个shell脚本中使用Vim 第27章 搜索命令和模式语言 27.1 忽略大小写 27.2 绕回文件头尾 27.3 偏移 27.4 多次匹配 27.5 多选一 27.6 字符范围 27.7 字符分类 27.8 匹配一个断行 27.9 例子 第28章 折行 28.1 使用何种折行方法? 28.2 手工折行 28.3 使用折行 28.4 保存和恢复折行 28.5 根据缩进的折行 28.6 根据标记的折行 28.7 根据语法的折行 28.8 根据表达式折行 28.9 折叠没有修改的行 28.10 使用何种折行方法? 第29章 之于程序 29.1 使用tags 29.2 预览窗口 29.3 在程序中移动 29.4 查找全局标识符 29.5 查找局部标识符 第30章 程序的编辑 30.1 编译 30.2 C程序的缩进 30.3 自动缩进 30.4 其它的种种缩进 30.5 制表符和空格 30.6 对注释的格式化 第31章 探索GUI 31.1 文件浏览器 31.2 确认 31.3 菜单命令的快捷键 31.4 Vim的窗口位置和大小 31.5 其它 第32章 树状撤消 32.1 为每个修改编号 32.2 在不同撤消分支间移动 32.3 时间之旅 第40章 定义新命令 40.1 键映射 40.2 自定义冒号命令 40.3 自动命令 第41章 Vim脚本 41.1 介绍 41.2 变量 41.3 表达式 41.4 条件 41.5 执行一个表达式 41.6 使用函数 41.7 函数定义 41.8 列表和字典 41.9 异常 41.10 注意事项 41.11 定制自己的plugin 41.12 定制一个文件类型plugin 41.13 定制一个编译器plugin 41.14 写一个快速载入的plugin 41.15 建立自己的脚本库 41.16 发布你的Vim脚本 第42章 增加新菜单 42.1 介绍 42.2 菜单命令 42.3 其它 42.4 工具栏和弹出式菜单 第43章 文件类型 43.1 文件类型的插件 43.2 添加一个filetype 第44章 自定义语法高亮 44.1 基本语法命令 44.2 关键字 44.3 匹配 44.4 区域 44.5 嵌套语法项 44.6 后续组 44.7 其它参数 44.8 簇 44.9 包含另一个语法文件 44.10 语法同步 44.11 安装一个语法文件 44.12 可移植的语法文件 第45章 选择语言 45.1 用于消息的语言 45.2 用于菜单的语言 45.3 使用另一种编码方法 45.4 编辑另类编码方案的文件 45.5 输入 第90章 Vim安装 90.1 Unix 90.2 MS-Windows升级 90.3 升级 90.4 常见问题 90.5 卸载Vim 附录一 Vim作者专访 附录二 七个有效的文本编辑习惯 附录三用Vim进行C/C++编程介绍
软件介绍: 安装一键ghost时请注意:  此软件绑定有插件,请注意安装时的每一步,如果不想安装插件,勾选掉即可。本软件硬盘版支持WIN2000/XP/2003/VISTA/WIN7/WIN2008环境下安装和使用,优盘版/光盘版/软盘版还支持WIN9X/ME.常见问题FAQ :一键备份系统"的映像保存在什么位置?有何优点?怎样进行打开等操作答:(1)保存位置:第一硬盘最后一个分区:\~1\C_PAN.GHO(2)~1的优点:此文件夹在FAT分区下资源管器中完全隐藏即使打开"显示所有文件"也不可见, 在NTFS分区下可防止删除,以防止病毒的恶意行为或用户的误操作.(3)高级操作:映像->打开/保护/管理/导出/导入/移动/删除."一键备份系统"只能备份到第1硬盘最后一个分区吗?能备份到其它分区吗?答:当然能,只要使用"中文向导"->"备份向导",修改分区的值即可.如何实现对整个硬盘的操作?答:备份向导,恢复向导,对拷向导都可实现对整个硬盘的操作:只需将第?分区的默认值清除即可.GHOST11.2有何优点?为何弃用最新的11.5?为何比8.3慢?答:11.0.2(简称11.2)的最突出的优点是兼容性好(向上兼容11.5映像,向下兼容8.3映像);11.5虽然版本较新,但分区识别能力差,且备份恢复成功率较低,所以弃用;8.3的速度确实很快,所以如果不使用WIN7/VISTA/2008(只用XP/2000/2003),建议切换到8.3,硬盘版可永久性地切换到8.3: 设置 -> 版本 -> GHOST8.3 -> 确定.硬盘版/光盘版/优盘版都可以通过临时手动选择"MS-DOS一级菜单"切换到8.3怎样防止熊猫烧香等病毒对GHO映像的恶意删除或者防止误删除?答:最有效的方法是最后分区采用NTFS格式(如果最后分区是FAT格式可将其格式化成NTFS格式)因为本软件会对NTFS下的~1文件夹加强防删处理.我想把GHO文件刻录到光盘,但生成的映像较大,一张光盘放不下,可以刻在第2,3..张光盘上吗?答: 当然可以,详情请参看HELP.chm帮助文档->安装运行->光盘版->高级刻录方法一键备份系统时出现错误(622)怎样解决?答: 请保证你现在使用的是最新版本,另外注意:1,如果光盘版/优盘版出现此错误,必须首先安装硬盘版.2,将最后一个分区完全格式化NTFS或FAT32.3,以上方法都不行,帮助->诊断报告,向站长和网友求助.硬盘版启动时出现 Error 27:Disk Read Error 怎么解决?答: 工具->设置->引导->模式2或模式4如果以上方法不行,帮助->诊断报告,向站长和网友求助.开机菜单等待5秒还是觉得有点长,想改成1秒,怎么改?想去掉多余菜单,怎么改?答: 工具->设置->速度->快速模式,可将所有等待时间缩短为1秒;工具->设置->开机->热键模式,可去掉启动时的3个额外菜单(GRUB4DOS菜单,MS-DOS一级菜单,二级菜单)怎么删除多余的~1空文件夹?怎么删除映像文件夹~1?答: 工具->修复->修复,可以删除多余的~1空文夹;不建议使用第三方工具删除最后分区的映像文件夹,本软件的卸载功能已经相当完善,推荐在卸载时选择"删除一键映像及其所在文件夹"的这种方式删除,如果已经卸载了,就再次安装一键GHOST再卸载.点击"管理"后为何多出一个B盘?答: 这是正常现象,B盘是为解决兼容性问题新增的虚拟盘,B盘实际指向位置是最后分区:\~1(一键备份文件夹),B盘虽然是临时虚拟盘,但与直接使用~1的效果是一模一样的,所以不必担心复制/删除/编辑等操作.注意:1,为避免关闭GHOSTEXP后编辑C_PAN.GHO失效.请在编辑期间不要关闭一键GHOST主窗口.2,禁止手动删除B盘,因为一键GHOST主窗口关闭后会自动地安全删除B盘.怎么导入外来的GHO? 如何实现免刻录安装GHOST系统?答: 导入外来的GHO的主要目的是为了免刻录重装GHOST系统,假设外来的GHO文件名为WINXPSP3.GHO,步骤如下:1,WINDOWS下运行一键GHOST硬盘版2,导入->找到WINXPSP3.GHO->打开->等待复制进度到100%3,一键恢复系统:这个不用多说了吧,点击"恢复",10分钟过后就可享受外来的GHOST系统了.关于外来GHO的出处可细分以下几种情况:(1)市场购买的光盘,放入光驱后可直接导入GHO.(2)网上下载的一般为光盘ISO格式,需要先解压(或用虚拟光驱加载ISO)再导入.(3)其它同型号电脑产生的GHO可保存到移动U盘,再将U盘插入本机直接导入.(4)导入时不想覆盖旧GHO,可事先使用"映像->移动"将原来的GHO转移其它位置
起步 jusr 01.txtj 关于本手册 jusr 02.txtj Vim第一步 jusr 03.txtj 移动 jusr 04.txtj 小幅改动 jusr 05.txtj 定制你的Vim jusr 06.txtj 使用语法高亮 jusr 07.txtj 编辑多个文件 jusr 08.txtj 分隔窗口 jusr 09.txtj 使用GUI jusr 10.txtj 大刀阔斧 jusr 11.txtj 灾难恢复 jusr 12.txtj 奇技淫巧 高效编辑 jusr 20.txtj 加速冒号命令 jusr 21.txtj 进退之间 jusr 22.txtj 查找要编辑的文件 jusr 23.txtj 非文本文件 jusr 24.txtj 快速键入 jusr 25.txtj 编辑格式化文本 jusr 26.txtj 重复重复, 再重复 jusr 27.txtj 搜索命令和模式 jusr 28.txtj 折行 8 9 第00章目录 jusr 29.txtj 之于程序 jusr 30.txtj 程序的编辑 jusr 31.txtj 探索GUI 打造Vim jusr 40.txtj 定义新命令 jusr 41.txtj Vim脚本 jusr 42.txtj 增加新菜单 jusr 43.txtj 文件类型 jusr 44.txtj 自定义语法高亮文件 jusr 45.txtj 选择语言 运转Vim jusr 90.txtj 安装Vim 可以在下面的地址中找到以单个文件组织的可打印版的HTML或PDF格 式用户手册: http://vimdoc.sf.net 起步 请从头至尾细读本章, 本章讲述Vim的基本命令. jusr 01.txtj 关于本手册 j01.1j 两套帮助 j01.2j 关于安装 j01.3j 使用Vim教程 j01.4j 版权 jusr 02.txtj Vim第一步 j02.1j 首次运行Vim j02.2j 插入文本 9 10 第00章目录 j02.3j 移动光标 j02.4j 删除字符 j02.5j 撤消与重做 j02.6j 其它编辑命令 j02.7j 退出 j02.8j 求助 jusr 03.txtj 移动 j03.1j 以Word为单位的光标移动 j03.2j 将光标移到行首或行尾 j03.3j 将光标移动到指定的字符上 j03.4j 将光标移动到匹配的括号上 j03.5j 将光标移动到指定的行上 j03.6j 告诉你当前位置 j03.7j 滚屏 j03.8j 简单的搜索 j03.9j 简单的模式搜索 j03.10j 使用标记 jusr 04.txtj 小幅改动 j04.1j 操作符命令和位移 j04.2j 改变文本 j04.3j 重复改动 j04.4j Visual模式 j04.5j 移动文本 j04.6j 复制文本 j04.7j 使用剪贴板 j04.8j 文本对象 j04.9j 替换模式 j04.10j 结论 jusr 05.txtj 定制你的Vim j05.1j vimrc文件 j05.2j vimrc示例 j05.3j 简单的映射 j05.4j 增加一个plugin j05.5j 增加一个帮助文件 j05.6j 选项设置窗口 j05.7j 常用选项 10 11 第00章目录 jusr 06.txtj 使用语法高亮 j06.1j 打开色彩 j06.2j 没有色彩或色彩错误? j06.3j 不同的颜色 j06.4j 有色或无色 j06.5j 彩色打印 j06.6j 进一步的学习 jusr 07.txtj 编辑多个文件 j07.1j 编辑另一个文件 j07.2j 文件列表 j07.3j 切换到另一文件 j07.4j 备份 j07.5j 在文件间复制粘贴 j07.6j 查看文件 j07.7j 更改文件名 jusr 08.txtj 分隔窗口 j08.1j 分隔一个窗口 j08.2j 为另一个文件分隔出一个窗口 j08.3j 窗口大小 j08.4j 垂直分隔 j08.5j 移动窗口 j08.6j 针对所有窗口操作的命令 j08.7j 使用vimdiff查看不同 j08.8j 其它 jusr 09.txtj 使用GUI j09.1j GUI的各部分 j09.2j 使用鼠标 j09.3j 剪贴板 j09.4j 选择模式 jusr 10.txtj 大刀阔斧 j10.1j 命令的记录与回放 j10.2j 替换 11 12 第00章目录 j10.3j 使用作用范围 j10.4j 全局命令 j10.5j 可视块模式 j10.6j 读写文件的部分内容 j10.7j 格式化文本 j10.8j 改变大小写 j10.9j 使用外部程序 jusr 11.txtj 灾难恢复 j11.1j 基本方法 j11.2j 交换文件在哪? j11.3j 是不是死机了? j11.4j 进一步的学习 jusr 12.txtj 奇技淫巧 j12.1j 替换一个word j12.2j 将"Last, First"改为"First Last" j12.3j 排序 j12.4j 反转行序 j12.5j 统计字数 j12.6j 查找帮助页1 j12.7j 消除多余空格 j12.8j 查找一个word在何处被引用 高效编辑 此类主题可以独立阅读 jusr 20.txtj 加速冒号命令 j20.1j 命令行编辑 j20.2j 命令行缩写 j20.3j 命令行补齐 j20.4j 命令行历史记录 j20.5j 命令行窗口 1译: 仅对Unix类系统有意义 12 13 第00章目录 jusr 21.txtj 进退之道 j21.1j 挂起与恢复 j21.2j 执行shell命令 j21.3j 记住相关信息: viminfo j21.4j 会话 j21.5j 视图 j21.6j 模式行 jusr 22.txtj 查找要编辑的文件 j22.1j 文件浏览器 j22.2j 当前目录 j22.3j 查找一个文件 j22.4j 缓冲区列表 jusr 23.txtj 非文本文件 j23.1j DOS, Mac 和Unix格式的文件 j23.2j 来自因特网的文件 j23.3j 加密文件 j23.4j 二进制文件 j23.5j 压缩文件 jusr 24.txtj 快速键入 j24.1j 校正 j24.2j 显示匹配字符 j24.3j 自动补全 j24.4j 重复录入 j24.5j 从其它行复制 j24.6j 插入一个寄存器的内容 j24.7j 缩写 j24.8j 键入特殊字符 j24.9j 键入连字符 j24.10j Normal模式命令 jusr 25.txtj 编辑格式化文本 j25.1j 段行 j25.2j 文本对齐 13 14 第00章目录 j25.3j 缩进和制表符 j25.4j 处理长行 j25.5j 编辑表格 jusr 26.txtj 重复重复, 再重复 j26.1j Visual模式的重复 j26.2j 加与减 j26.3j 对多个文件做同样的改动 j26.4j 在一个shell脚本中使用Vim jusr 27.txtj 搜索命令和模式 j27.1j 忽略大小写 j27.2j 绕回文件头尾 j27.3j 偏移 j27.4j 多次匹配 j27.5j 多选一 j27.6j 字符范围 j27.7j 字符分类 j27.8j 匹配一个断行 j27.9j 例子 jusr 28.txtj 折行 j28.1j 什么是折行? j28.2j 手工折行 j28.3j 使用折行 j28.4j 保存和恢复折行 j28.5j 根据缩进的折行 j28.6j 根据标记的折行 j28.7j 根据语法的折行 j28.8j 根据表达式折行 j28.9j 折叠未有改变的行 j28.10j 使用何种折行方法? jusr 29.txtj 之于程序 j29.1j 使用tags j29.2j 预览窗口 14 15 第00章目录 j29.3j 在程序中移动 j29.4j 查找全局标识符 j29.5j 查找局部标识符 jusr 30.txtj 程序的编辑 j30.1j 编译 j30.2j C程序的缩进 j30.3j 自动缩进 j30.4j 其它语言的缩进 j30.5j 跳格键与空格 j30.6j 注释的格式化 jusr 31.txtj 探索GUI j31.1j 文件浏览器 j31.2j 确认 j31.3j 菜单命令的快捷键 j31.4j Vim的窗口位置和大小 j31.5j 其它 调节Vim 让Vim如你所愿地工作 jusr 40.txtj 定义新命令 j40.1j 键映射 j40.2j 自定义冒号命令 j40.3j 自动命令 jusr 41.txtj Vim脚本 j41.1j 介绍 j41.2j 变量 j41.3j 表达式 j41.4j 条件语句 j41.5j 执行一个表达式 15 16 第00章目录 j41.6j 使用函数 j41.7j 函数定义 j41.8j 注意事项 j41.9j 定制一个plugin j41.10j 定制一个文件类型相关的plugin j41.11j 定制一个编译相关的plugin jusr 42.txtj 增加新菜单 j42.1j 介绍 j42.2j 菜单操作命令 j42.3j 其它 j42.4j 工具栏和弹出式菜单 jusr 43.txtj 文件类型 j43.1j 文件类型的插件 j43.2j 添加一种文件类型 jusr 44.txtj 自定义语法高亮文件 j44.1j 基本的语法命令 j44.2j 关键字 j44.3j 匹配 j44.4j 区域 j44.5j 嵌套 j44.6j 后续组 j44.7j 其它参数 j44.8j 聚簇 j44.9j 包含另一个语法文件 j44.10j 同步 j44.11j 安装一个语法文件 j44.12j 可移植语法文件的布局要求 jusr 45.txtj 选择语言 j45.1j 用于消息的语言 j45.2j 用于菜单的语言 j45.3j 使用另一种编码方法 j45.4j 编辑另类编码方案的文件 j45.5j 输入 16 17 第00章目录 运转Vim Vimming之前. jusr 90.txtj 安装Vim j90.1j Unix j90.2j MS-Windows j90.3j 升级 j90.4j 常见问题 j90.5j 卸载Vim
WINDOWS环境 Windows几乎不需要介绍。然而人们很容易忘记Windows给办公室和家庭桌上型计算机所带来的重大改变。Windows在其早期曾经走过一段坎坷的道路,征服桌上型计算机市场的前途一度相当渺茫。 Windows简史 在1981年秋天IBM PC推出之后不久,MS-DOS就已经很明显成为PC上的主流操作系统。MS-DOS代表Microsoft Disk Operating System(磁盘操作系统)。MS-DOS是一个小型的操作系统。MS-DOS提供给用户一种命令列接口,提供如DIR和TYPE的命令,也可以将应用程序加载内存执行。对于应用程序写作者,它提供了一组函数呼叫,进行文件的输入输出(I/O )。对于其它的外围处理-尤其是将文字或图形写到显示器上-应用程序可以直接存取PC的硬件。 由于内存和硬件的限制,成熟的图形环境缓慢地才到来。当苹果计算机公司不幸的Lisa计算机在1983年1月发表时,它提供了不同于文字模式环境的另一种选择,并在1984年1月成为Macintosh上图形环境的一种标准。尽管Macintosh的市场占有率在下降,但是它仍然被认为是衡量所有其它图形环境的标准。包括Macintosh和Windows的所有图形环境,其实都要归功于Xerox Palo Alto Research Center(PARC)在70年代中期所作的开拓性研究工作。 Windows是由微软在1983年11月(在Lisa之后,Macintosh之前)宣布,并在两年后(1985年11月)发行。在此后的两年中,紧随着Microsoft Windows早期版本1.0之后,又推出了几种改进版本,以支持国际商业市场,并提供新型视讯显示器和打印机的驱动程序。 Windows版本2.0是在1987年11月正式在市场上推出的。该版本对使用者接口做了一些改进。这些改进中最有效的是使用了可重迭式窗口,而Windows 1.0中使用的是并排式窗口。Windows 2.0还增强了键盘和鼠标接口,特别是加入了菜单和对话框。 至此,Windows还只要求Intel 8086或者8088等级的微处理器,以「实际模式」执行,只能存取地址在1MB以下的内存。Windows/386(在Windows 2.0之后不久发行的)使用Intel 386微处理器的「虚拟8086」模式,实现将直接存取硬件的多个MS-DOS程序窗口化和多任务化。为了统一起见,Windows版本2.1被更名为Windows/286。 Windows 3.0是在1990年5月22日发表的。它将Windows/286和Windows/386结合到同一种产品中。Windows 3.0有了一个很大的改变,这就是对Intel的286、386和486微处理器保护模式的支持。这能使Windows和Windows应用程序能存取高达16MB的内存。Windows用于执行程序和维护文件的「外壳」程序得到了全面的改进。Windows 3.0是第一个在家用和办公室市场上取得立足点的版本。 任何Windows的历史介绍都必须包括一些OS/2的说明,OS/2是对DOS和Windows的另一种选择,最初是由Microsoft和IBM合作开发的。OS/2版本1.0(只有文字模式)在Intel 286(或者后来的)微处理器上运行,在1987年末发布。在1988年10月的OS/2版本1.1中出现了管理图形使用者接口的PM(Presentation Manager)。PM最初的设计构想是成为Windows的一种保护模式版本,但是图形API改变程度太大,致使软件生产厂商很难提供对这两种平台的支持。 到1990年9月,IBM和Microsoft之间的冲突达到了高峰,导致这两个公司最后分道扬镳。IBM接管了OS/2,而Microsoft明确表示Windows将是他们操作系统策略的中心。虽然OS/2仍然拥有一些狂热的崇拜者,但是它远不及Windows这样的普及程度。 Microsoft Windows版本3.1是1992年4月发布的,其中包括的几个重要特性是TrueType字体技术(给Windows带来可缩放的轮廓字体)、多媒体(声音和音乐)、对象连结和嵌入(OLE:Object Linking and Embedding)和通用对话框。跟OS/2一样,Windows 3.1只能在保护模式下运作,并且要求至少配置了1MB内存的286或386处理器。 在1993年7月发表的Windows NT是第一个支持Intel 386、486和Pentium微处理器32位保护模式的Windows版本。Windows NT提供32位平坦寻址,并使用32位的指令集。(本章后面我会谈到一些寻址空间的问题)。Windows NT还可以移植到非Intel处理器上,并在几种使用RISC芯片的工作站上执行。 Windows 95是在1995年8月发布的。和Windows NT一样,Windows 95也支持Intel 386或更高等级处理器的32位保护模式。虽然它缺少Windows NT中的某些功能,诸如高安全性和对RISC机器的可移植性等,但是Windows 95具有需要较少硬件资源的优点。 Windows 98在1998年6月发布,具有许多加强功能,包括执行效能的提高、更好的硬件支持以及与因特网和全球信息网(WWW)更紧密的结合。 Windows方面 Windows 98和Windows NT都是支持32位优先权式多任务(preemptive multitasking)及多线程的图形操作系统。Windows拥有图形使用者接口(GUI ),这种使用者界面也称作「可视化接口」或「图形窗口环境」。有关GUI的概念可追溯至70年代中期,在Alto和Star等机器上以及SmallTalk等环境中由Xerox PARC所作的研究工作。该项研究的成果后来被Apple Computer和Microsoft引入主流并流行起来。虽然有一些争议,但现在已非常清楚,GUI是(Microsoft的Charles Simonyi的说法)一个在个人计算机工业史上集各方面技术大成于一体的最重要产物。 所有GUI都在点矩阵对应的视讯显示器上处理图形。图形提供了使用屏幕的最佳方式、传递信息的可视化丰富多彩环境,以及能够WYSIWYG(what you see is what you get:所见即所得)的图形视讯显示和为书面文件准备好格式化文字输出内容。 在早期,视讯显示器仅用于响应使用者通过键盘输入的文字。在图形使用者接口中,视讯显示器自身成为使用者输入的一个来源。视讯显示器以图标和输入设备(例如按钮和滚动条)的形式显示多种图形对象。使用者可以使用键盘(或者更直接地使用鼠标等指向设备)直接在屏幕上操纵这些对象,拖动图形对象、按下鼠标按钮以及滚动滚动条。 因此,使用者与程序的交流变得更为亲密。这不再是一种从键盘到程序,再到视讯显示器的单向信息流动,使用者已经能够与显示器上的对象直接交互作用了。 使用者不再需要花费长时间学习如何使用计算机或掌握新程序了。Windows让这一切成真,因为所有应用程序都有相同的基本外观和感觉。程序占据一个窗口-屏幕上的一块矩形区域。每个窗口由一个标题列标识。大多数程序功能由程序的菜单开始。用户可使用滚动条观察那些无法在一个屏幕中装下的信息。某些菜单项目触发对话框,用户可在其中输入额外的信息。几乎在每个大的Windows程序中都有一个用于开启文件的特殊对话框。该对话框在所有这些Windows程序中看起来都一样(或接近相同),而且几乎总是从同一菜单选项中启动。 一旦您了解使用一个Windows程序的方法,您就非常容易学习其它的Windows程序。菜单和对话框允许用户试验一个新程序并探究它的功能。大多数Windows程序同时具有键盘接口和鼠标接口。虽然Windows程序的大多数功能可通过键盘控制,但使用鼠标要容易得多。 从程序写作者的角度看,一致的使用者接口来自于Windows建构菜单和对话框的内置程序。所有菜单都有同样的键盘和鼠标接口,因为这项工作是由Windows处理,而不是由应用程序处理。 为便于多个程序的使用,以及这些程序间信息的交换,Windows支持多任务。在同一时刻能有多个Windows程序显示并运行。每个程序在屏幕上占据一个窗口。用户可在屏幕上移动窗口,改变它们的大小,在不同程序间切换,并从一个程序向另一个程序传送数据。因为这些窗口看起来有些像桌面上的纸(当然,这是计算机还未占据办公桌之前的年代),Windows有时被称作:一个显示多个程序的「具象化桌面」。 Windows的早期版本使用一种「非优先权式(non-preemptive)」的多任务系统。这意味着Windows不使用系统定时器将处理时间分配给系统中运行的多个应用程序,程序必须自愿放弃控制以便其它程序运行。在Windows NT和Windows 98中,多任务是优先权式的,而且程序自身可分割成近乎同时执行的多个执行绪。 操作系统不对内存进行管理便无法实现多任务。当新程序启动、旧程序终止时,内存会出现碎裂空间。系统必须能够将闲置的内存空间组织在一起,因此系统必须能够移动内存中的程序代码和数据块。 即使是在8088微处理器上跑的Windows 1.0也能进行这类内存管理。在实际模式限制下,这种能力被认为是软件工程一个令人惊讶的成就。在Windows 1.0中,PC硬件结构的640KB内存限制,在不要求任何额外内存的情况下被有效地扩展了。但Microsoft并未就此停步:Windows 2.0允许Windows应用程序存取扩充内存(EMS);Windows 3.0在保护模式下,允许Windows应用程序存取高达16MB的扩展内存。Windows NT和Windows 98通过成熟的32位操作系统及平坦寻址空间,摆脱了这些旧的限制。 Windows上执行的程序可共享在称为「动态链接库」的文件中的例程。Windows包括一个机制,能够在执行时连结使用动态链接库中例程的程序。Windows自身基本上就是一个动态链接库的集合。 Windows是一个图形接口,Windows程序能够在视讯显示器和打印机上充分利用图形和格式化文字。图形接口不仅在外观上更有吸引力,而且还能够让使用者传递高层次的信息。 Windows应用程序不能直接存取屏幕和打印机等图形显示设备硬件。相反,Windows提供一种图形程序语言(称作图形设备接口,或者GDI),使显示图形和格式化文字更容易。Windows虚拟化了显示硬件,使为Windows编写的程序可使用任何具有Windows设备驱动程序的视频卡或打印机,而程序无需确定系统相连的设备类型。 对Windows开发者来说,将与设备无关的图形接口输出到IBM PC上不是件轻松的事。PC的设计是基于开放式架构的原则,鼓励第三方硬件制造商为PC开发接口设备,而且开发了大量这样的设备。虽然出现了多种标准,PC上的传统MS-DOS程序仍不得不各自支持许多不同的硬设备。这对MS-DOS字处理软件来说非常普遍,它们连同1到2张有许多小文件的磁盘一同销售,每个文件支持一种特定的打印机。Windows程序不要求每个应用程序都自行开发这些驱动程序,因为这种支持是Windows的一部分。 动态链接 Windows运作机制的核心是一个称作「动态链接」的概念。Windows提供了应用程序丰富的可呼叫函数,大多数用于实作其使用者接口和在视讯显示器上显示文字和图形。这些函数采用动态链接库(Dynamic Linking Library,DLL)的方式撰写。这些动态链接库是些具有.DLL或者有时是.EXE扩展名的文件,在Windows 98中通常位于\WINDOWS\SYSTEM子目录中,在Windows NT中通常位于\WINNT\SYSTEM和\WINNT\SYSTEM32子目录中。 在早期,Windows的主要部分仅通过三个动态链接库实作。这代表了Windows的三个主要子系统,它们被称作Kernel、User和GDI。当子系统的数目在Windows最近版本中增多时,大多数典型的Windows程序产生的函数呼叫仍对应到这三个模块之一。Kernel(日前由16位的KRNL386.EXE和32位的KERNEL32.DLL实现)处理所有在传统上由操作系统核心处理的事务-内存管理、文件I/O和多任务管理。User(由16位的USER.EXE和32位的USER32.DLL实作)指使用者接口,实作所有窗口运作机制。GDI(由16位的GDI.EXE和32位的GDI32.DLL实作)是一个图形设备接口,允许程序在屏幕和打印机上显示文字和图形。 Windows 98支持应用程序可使用的上千种函数呼叫。每个函数都有一个描述名称,例如CreateWindow。该函数(如您所猜想的)为程序建立新窗口。所有应用程序可以使用的Windows函数都在表头文件里预先声明过。 在Windows程序中,使用Windows函数的方式通常与使用如strlen等C语言链接库函数的方式相同。主要的区别在于C语言链接库函数的机械码连结到您的程序代码中,而Windows函数的程序代码在您程序执行文件外的DLL中。 当您执行Windows程序时,它通过一个称作「动态链接」的过程与Windows相接。一个Windows的.EXE文件中有使用到的不同动态链接库的参考数据,所使用的函数即在那些动态链接库中。当Windows程序被加载到内存中时,程序中的呼叫被指向DLL函数的入口。如果该DLL不在内存中,就把它加载到内存中。 当您连结Windows程序以产生一个可执行文件时,您必须连结程序开发环境提供的特定「引用链接库(import library)」。这些引用链接库包含了动态链接库名称和所有Windows函数呼叫的引用信息。连结程序使用该信息在.EXE文件中建立一个表格,在加载程序时,Windows使用它将呼叫转换为Windows函数。 WINDOWS程序设计选项 为说明Windows程序设计的多种技术,本书提供了许多范例程序。这些程序使用C语言撰写并原原本本的使用Windows API来开发程序。我将这种方法称作「古典」Windows程序设计。这是我们在1985年为Windows 1.0写程序的方法,它今天仍是写作Windows程序的有效方法。 API和内存模式 对于程序写作者来说,操作系统是由本身的API定义的。API包含了所有应用程序能够使用的操作系统函数呼叫,同时包含了相关的数据型态和结构。在Windows中,API还意味着一个特殊的程序架构,我们将在每章的开头进行研究。 一般而言,Windows API自Windows 1.0以来一直保持一致,没什么重大改变。具有Windows 98程序写作经验的Windows程序写作者会对Windows 1.0程序的原始码感觉非常熟悉。API改变的一种方式是进行增强。Windows 1.0支持不到450个函数呼叫,现在已有了上千种函数呼叫。 Windows API和它的语法的最大变化来自于从16位架构向32位架构转化的过程中。Windows从版本1.0到版本3.1使用16位Intel 8086、8088、和286微处理器上所谓的分段内存模式,由于兼容性的原因,从386开始的32位Intel微处理器也支持该模式。在这种模式下,微处理器缓存器的大小为16位,因此C的int数据型态也是16位宽。在分段内存模式下,内存地址由两个部分组成-一个16位段(segment)指针和一个16位偏移量(offset)指标。从程序写作者的角度看,这非常凌乱并带来了long或far指针(包括段地址和偏移量地址)和short或near指标(包括带有假定段地址的偏移量地址)的区别。 从Windows NT和Windows 95开始,Windows支持使用Intel 386、486和Pentium处理器32位模式下的32位平坦寻址内存模式。C语言的int数据型态也扩展为32位的值。为32位版本Windows编写的程序使用简单的平坦线性空间寻址的32位指针值。 用于16位版本Windows的API(Windows 1.0到Windows 3.1)现在称作Win16。用于32位版本Windows的API(Windows 95、Windows 98和所有版本的Windows NT)现在称作Win32。许多函数呼叫在从Win16到Win32的转变中保持相同,但有些需要增强。例如,图像坐标点由Win16中的16位值变为Win32中的32位值。此外,某些Win16函数呼叫返回一个包含在32位整数值中的二维坐标点。这在Win32中不可能,因此增加的新函数呼叫以不同方式运作。 所有32位版本的Windows都支持Win16 API(以确保和旧有应用程序兼容)和Win32 API(以运行新应用程序)。非常有趣的是,Windows NT与Windows 95及Windows 98的工作方式不同。在Windows NT中,Win16函数呼叫通过一个转换层被转化为Win32函数呼叫,然后被操作系统处理。在Windows 95和Windows 98中,该操作正相反:Win32函数呼叫通过转换层转换为Win16函数呼叫,再由操作系统处理。 在同一时刻有两个不同的Windows API集(至少名称不同)。Win32s (「s」代表「subset(子集)」)是一个API,允许程序写作者编写在Windows 3.1上执行的32位应用程序。该API仅支持已被Win16支持的32位函数版本。此外,Windows 95 API一度被称作Win32c(「c」代表「compatibility(兼容性)」),但该术语已被抛弃了。 现在,Windows NT和Windows 98都被认为能够支持Win32 API。然而,每个操作系统依然都支持某些不被别的操作系统支持的某些功能特性。因为它们的相同之处是相当可观的,所以有可能编写在两个操作系统下都可执行的程序。而且,人们普遍认为这两个产品最终会合而为一。 语言选项 使用C语言和原始的API不是编写Windows 98程序的唯一方法。然而,这种方法却提供给您最佳的性能、最强大的功能和在发掘Windows特性方面最大的灵活性。可执行文件相对较小且运行时不要求外部链接库(自然,Windows DLL自身除外)。最重要的是,不管您最终以什么方式开发Windows应用程序,熟悉API会使您对Windows内部有更深入的了解。 虽然我认为学习古典的Windows程序设计对任何Windows程序写作者都是重要的,我没有必要建议使用C和API编写每个Windows应用程序。许多程序写作者,特别是那些为公司内部开发程序或在家编写娱乐程序的程序写作者喜欢轻松的开发环境,例如Microsoft Visual Basic或者Borland Delphi(它结合了对象导向的Pascal版本)。这些环境使程序写作者将精力集中于应用程序的使用者接口和相关使用者接口对象的程序代码上。要学习Visual Basic,您也许需要参考Microsoft Press的一些其它图书,例如Michael Halvorson1996年着的《Learn Visual Basic Now》。 在专业程序写作者中-特别是那些开发商业应用程序的程序写作者-Microsoft Visual C++和Microsoft Foundation Class Library(MFC)是近年来流行的选择。MFC在一组C++对象类别中封装了许多Windows程序设计中的琐碎细节。Jeff Prosise的《Programming Windows with MFC,第二版》(Microsoft Press,1999年)提供了MFC程序的写作指南。 最近,Internet和World Wide Web的流行大力推广着Sun Microsystems的Java,这是一个受C++启发却与微处理器无关的程序设计语言,而且结合了可在几个操作系统平台上执行的图形应用程序开发工具组。Microsoft Press有一本关于Microsoft J++(Microsoft的Java)开发工具的好书,《Programming Visual J++ 6.0》(1998年),由Stephen R. Davis着。 显然,很难说哪种方法更有利于开发Windows应用程序。更主要的是,也许是应用程序自身的特性决定了所使用的工具。不管您最后实际上使用什么工具写作程序,学习Windows API将使您更深入地了解Windows工作的方式。Windows是一个复杂的系统,在API上增加一个程序写作层并未减少它的复杂性,仅仅是掩盖了它,早晚您会碰到它。了解API会给您更好的补救机会。 在原始的Windows API之上的任何软件层都必定将您限制在全部功能的一个子集内。您也许发现,例如,使用Visual Basic编写应用程序非常理想,然而它不允许您做一个或两个很简单的基本工作。在这种情况下,您将不得不使用原始的API呼叫。API定义了作为Windows程序写作者所需的一切。没有什么方法比直接使用API更万能的了。 MFC尤其问题百出。虽然它大幅简化了某些工作(例如OLE),我却经常发现要让它们按我所想的去工作时,会在其它特性(例如Document/View架构)上碰壁。MFC还不是Windows程序设计者所追求的灵丹妙药,很少有人认为它是一个好的对象导向设计的模型。MFC程序写作者从他们使用的对象类别定义如何工作中受益颇深,并会发现他们经常参考MFC原始码,搞懂这些原始码是学习Windows API的好处之一。 程序开发环境 在本书中,假定您正使用Microsoft Visual C++ 6.0,标准版、专业版和企业版都可以。经济的标准版足以应付本书中的程序设计需求。Visual C++ 还是Visual Studio 6.0中的一部分。 Microsoft Visual C++ 软件包中包括C编译器和其它编译及连结Windows程序所需的文件和工具等。它还包括Visual C++ Developer Studio,一个可编辑原始码、以交谈方式建立资源(如图标和对话框)以及编辑、编译、执行和测试程序的环境。 如果您正使用Visual C++ 5.0,则需要为Windows 98和Windows NT 5.0更新表头文件和引用链接库,这些东西可从Microsoft的网站上得到。在 http://www.microsoft.com/msdn/,选择「Downloads」,然后选择「 Platform SDK」(软件开发套件),您就能在选择的目录中下载和安装更新文件。要让Microsoft Developer Studio浏览这些目录,可以从「Tool」菜单项选择「 Options」然后按下「Directories」标签。 Microsoft网站上的msdn部分代表「Microsoft Developer Network(Microsoft软件开发者网络)」。这是一个向程序写作者提供了经常更新的CD-ROM的计划,这些CD-ROM中包含了程序写作者在Windows开发中所需的最新东西。您也可以订阅MSDN,这样就避免经常得从Microsoft的网站下载文件。 API文件 本书不是Windows API权威的正式文件的替代品。那组文件不再以印刷形式出版,它仅能从CD-ROM或Internet上取得。 当您安装Visual C++ 6.0时,您将得到一个包括API文件的在线求助系统。您可通过订阅MSDN或使用Microsoft网站上的在线求助系统更新该文件。连接到 http://www.microsoft.com/msdn/,并选择「MSDN Library Online」。 在Visual C++ 6.0中,从「Help」菜单项选择「Contents」项目开启MSDN窗口。API文件按树形结构组织,寻找标有「 Platform SDK」的部分,所有在本书中引用的文件都来自于该部分。我将向您介绍如何从「 Platform SDK」开始寻找以斜线分层分门别类的文件的位置。(我知道「Platform SDK」是整个MSDN知识库中较为晦涩的部分,但我敢保证那是Windows程序设计的基本核心。)例如,对于如何在Windows程序中使用鼠标的文件,您可参考/ Platform SDK / User Interface Services / User Input / Mouse Input。 我在前面提到Windows大致分为Kernel、User和GDI子系统。kernel接口在/ Platform SDK / Windows Base Services中,User界面函数在 / Platform SDK / User Interface Services中,GDI位于 / Platform SDK / Graphics and Multimedia Services / GDI中。 编写第一个WINDOWS程序 现在是开始写些程序的时候了。为了便于对比,让我们以一个非常短的Windows程序和一个简短的文字模式程序开始。这会帮助我们找到使用开发环境并感受建立和编译程序机制的正确方向。 文字模式(Character-Mode)模型 程序写作者们喜爱的一本书是《The C Programming Language》(Prentice Hall,1978年和1988年),由Brian W. Kernighan和Dennis M. Ritchie(亲切地称为K&R)编着。该书的第一章以一个显示「hello, world」的C语言程序开始。 这里是在《The C Programming Language》第一版第6页中出现的程序: main () { printf ("hello, world\n") ; } 以前C程序写作者在使用printf等C执行期链接库函数时,无需先声明它们。但这是90年代,我们愿意给编译器一个在我们的程序中标出错误的机会。这里是在K&R第二版中修正的程序: #include main () { printf ("hello, world\n") ; } 该程序仍然是那么短。但它可通过编译并执行得很好,但当今许多程序写作者更愿意清楚地说明main函数的返回值,在这种情况下ANSI C规定该函数必须返回一个值: #include int main () { printf ("hello, world\n") ; return 0 ; } 我们还可以包括main的参数,把程序弄得更长一些,但让我们暂且这样就好了-包括一个include声明、程序的进入点、一个对执行期链接库函数的呼叫和一个return语句。 同样效果的Windows程序 Windows关于「hello, world」程序的等价程序有和文字模式版本完全相同的组件。它有一个include声明、一个程序进入点、一个函数呼叫和一个return语句。下面便是该程序: /*------------------------------------------------------------------ HelloMsg.c -- Displays "Hello, Windows 98!" in a message box (c) Charles Petzold, 1998 --------------------------------------------------------------------*/ #include int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { MessageBox (NULL, TEXT ("Hello, Windows 98!"), TEXT ("HelloMsg"), 0); return 0 ; } 在剖析该程序之前,让我们看一下在Visual C++ Developer Studio中建立新程序的方式。 首先,从File菜单中选New。在 New对话框中,单击Projects页面标签,选择 Win32 Application。在Location栏中,选择一个子目录,在 Project Name栏中,输入该项目的名称,此时该名称是HelloMsg,这便是在 Location栏中显示的目录的子目录。Create New Workspace复选框应该勾起来,Platforms部分应该显示 Win32,选择OK。 将会出现一个标题为Win32 Application - Step 1 Of 1的对话框,指出要建立一个Empty Project,并按下Finish按钮。 从File菜单中再次选择New。在 New对话框中,选择Files页面标签,选择 C++ Source File。Add To Project复选框应被选中,并应显示HelloMsg。在 File Name栏中输入HelloMsg.c,选中OK。 现在您可输入上面所示的HELLOMSG.C文件,您也可以选择Insert菜单和 File As Text选项从本书附带的CD-ROM上复制HELLOMSG.C的内容。 从结构上说,HELLOMSG.C与K&R的「hello,world」程序是相同的。表头文件STDIO.H已被WINDOWS.H所代替,进入点main被WinMain所代替,而且C语言执行时期链接库函数printf被Windows API函数MessageBox所代替。然而,在程序中有许多新东西,包括几个陌生的大写标识符。 让我们从头开始。 表头文件 HELLOMSG.C以一个前置处理器指示命令开始,实际上在每个用C编写的Windows程序的开头都可看到:
EXE工具 telnet exe远程登陆 Telnet协议是TCP IP协议族中的一员 是Internet远程登陆服务的标准协议和主要方式 它为用户提供了在本地计算机上完成远程主机工作的能力 在终端使用者的电脑上使用telnet程序 用它连接到服务器 一 运行telnet的方法 当运行远程登录时 应首先运行Telnet程序进行联机 有两种运行Telnet的方法: 1 运行telnet的第一种方法: 输入下列命令 并以回车换行结束 下同 命令格式:telnet 主机网络地址 例如:假设用户要连接一台名叫dns的计算机 它的网络地址为xxxx IP地址为202 197 96 1 则连接时应输入命令telnet xxxx或telnet 202 197 96 1 如果用户要登录的主机与用户的计算机在同一个本地网上 通常可以只输入主机的名字 而不用输入完整的地址 例如上例可以输入: 命令:telnet dns 2 运行telnet程序的第二种方法: 输入命令:telnet 此时程序运行 但并未进行连接 因未指明主机 然后屏幕显示:telnet> 这是telnet的提示符 它表明telnet程序已经运行 并正在等待用户输入使用telnet的命令 如要连接一台远程主机 则使用open命令 即输入命令open 并附上该主机的网络地址 如 telnet> open xxxx 其连接效果与第一种方法完全一样 假如Telnet的运行不能与主机确定连接 则用户将会看到主机找不到的信息 例如 假设用户想要连接的远程主机为yyyy 而用户的输入为: telnet yyyy 则在屏幕上用户将会看到: yyyy: unknown host telnet> 此时 用户可以另输入正确的主机名进行连接 或者用Quit命令中止telnet程序的执行 导致telnet不能与远程主机连接的因素很多 常见的因素有三类:计算机地址输入有错 如上面例子所示;远程计算机暂时不能使用 如发生故障等 ;用户指定的计算机不在Internet上 处理这类情况的主要办法包括重新联机 隔一段时间再试等 对不在Internet上的计算机 使用当然是比较困难的 二 确认终端的仿真类型 终端仿真 terminal emulation 的类型直接影响到数据如何在自己使用的计算机上的显示 类型确定不正确 读者可能无法认读网络终端上显示的信息 这就是远程登录要确认网络终端类型的原因 对方系统一般以提问方式让读者确认自己所使用的计算机的终端仿真类型 如 Terminal emulation “ ”表示光标 在此读者只要键入相应的终端仿真类型即可 最常用的终端仿真为VT100 许多系统因此把VT100作为默认值 default 有的系统列举出各种终端仿真类型供用户选择 如果用户不清楚自己所用的终端仿真类型 可用dumb 哑终端 代之 另外 也有些系统会自动地为用户确认终端仿真类型 这对用户来说当然是最省心的 如果用户使用的是PC机 最好的回答通常是ANS1 因为大多数PC机的终端程序使用的ANS1终端协议 三 登录与退出对方系统: 当对方主机接通以后 就应登录到对方系统 如果登录标识和密码被对方系统接收并确认无误 用户就进入了对方系统 成了对方主机系统的一个远程终端使用者 进一步的工作如何进行 完全取决于主机系统的应用软件功能和用户的要求 用户只要按照系统的提示和操作程序进行操作 一般说来都可以完成自己预期的工作 退出对方系统有以下几种情况: 1 正常退出对方系统 这需要用户随时了解系统显示的信息 密切注意它显示的正常退出系统的命令 以便需要时使用 按照系统提示的方法退出该系统 实际上也就退出了Telnet 此时 用户又回到了本地机系统 2 记住强行退出对方系统的命令 换码符 在远程登录时 有时需要强行退出对方系统 这时可使用换码符 Escape Character 系统默认的换码符一般为“^ ]” 即CTRL键和 ]键同时按下 按此组合键即可终止联机 并显示下列提示符: Telnet> 可输入close或quit命令来终止远程登录 换码符的使用看起来无关紧要 但实际上在使用远程登录功能时是不可忽略的 它是使用Telnet时处理异常状态的重要手段 当无法用正常手段退出系统时 只要键入换码符即可平安退出Telnet并返回用户的本地计算机系统 3 Telnet的常用命令 任何时候 在telnet>提示符之后 都可以有选择地使用telnet的各种命令 以完成特定的功能 telnet的命令可通过help命令来了解它们的使用方法 以下是telnet的基本命令 对于不同的操作系统来说 这些命令也会稍有不同 常用命令及功能简介: help 联机求助 open 后接IP地址或域名即可进行远程登录 close 正常结束远程会话 回到命令方式 display 显示工作参数 mode 进入行命令或字符方式 send 向远程主机传送特殊字符 键入send 可显示详细字符 set 设置工作参数 键入set 可显示详细参数 status 显示状态信息 toggle 改变工作参数 键入toggle 可显示详细参数 ^ ] 换码符 escape character 在异常情况下退出会话 回到命令方式 quit 退出telnet 返回本地机 z 使telnet进入暂停状态 <cr> 结束命令方式 返回telnet的会话方式 6 2 3 Windows下telnet的软件使用 Telnet的用户软件有许多版本 一些运行在DOS下的Telnet软件操作比较复杂 要记的命令也比较多 鉴于目前大部分用户都通过SLIP PPP 帐号与Internet联接 我们仅介绍运行于Windows下的Telnet软件 Windows 95内置的远程登录客户端应用程序是一个很简单的终端软件 但基本的远程登录功能都有了 如果你在某个Unix机器上有帐号 那么就可以远程登录到该主机 例如登录湖大的一台Unix邮件服务器 在“开始”->“运行”窗口中输入: telnet xxxx 这时会弹出一个窗口窗口内有远程机器系统的提示 并在最后一行有“login:” 键入用户名后 出现“password:”提示 再输入该机器上对应该帐号的口令 就可以进入系统 拨号的Windows 95计算机就成了远程Unix机器的一个远程终端 你可以对Telnet程序做一些设置 主要有:在弹出的窗口中打开“终端”菜单“首选项” 终端选项: 本地响应:选择该复选框则设置Telnet程序中的键盘输入在本地也显示 默认不选 ; 闪烁光标 块状光标 VT100箭头:选择光标类型; 缓冲区大小: 设置Telnet显示窗口的高度 根据需要可增加和减少 例如改为99; 仿真: 可选择VT52或者VT100 ANSI终端类型 另外 你还可以设置使用的字体与显示的颜色等 如果在进行删除操作时使用“Backspace”或“Delete”键无效 反而在后面追加了“^H”或“^ ”字符 这是终端方式设置不对 可以更改仿真类型为“VT100 ANSI” 如果还不能使用这两个删除键之一 请使用“Ctrl”+“Backspace”或“Delete”键试一下 也可以在Unix的提示符下输入“stty erase ^H” 这里“^H”是按“Backspace”键出现的显示 以后就可以使用“Backspace”来删除输入出错的字符了 你可以使用Telnet程序提供的“终端” >“开始记录”功能记录你使用Telnet的全过程 选中后屏幕弹出文件窗口 提示输入记录文件名称 输 入完毕 开始Telnet的操作 操作完成后再选择“终端” >“停止记录”项 关闭记录文件 断开远程登录有两种方法 在Unix的$提示符下输入exit 这时提示与远程系统断开 或者是使用“连接”菜单的“断开”项断开 断开后 Telnet 窗口并不消失 再次连接时可用“连接”菜单的“远程系统” 宿主名称输入远程主机名 端口采用标准的Telnet端口或23 终端类型一般采用默认的 “vt100” 单击“连接”按钮即可重新连接 ">EXE工具 telnet exe远程登陆 Telnet协议是TCP IP协议族中的一员 是Internet远程登陆服务的标准协议和主要方式 它为用户提供了在本地计算机上完成远程主机工作的能力 在终端使用者的电脑上使用telnet程序 用它连接到服务器 [更多]

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧