精华内容
下载资源
问答
  • 目前众多的计算机用户使用的操作系统Windows 98它的 安全 性是大家非常关注的鉴于此写下此文希望有助于维护您的系统安全 ?目前众多的计算机用户使用的操作系统Windows 98它的安全性是大家非常关注的鉴于此写...
  • Windows 98拨号网络

    千次阅读 2007-07-26 14:52:00
    下载第22章Windows 98拨号网络作者:Kurt Hudson本章内容包括:• 配置拨号适配器• 安装拨号网络• 服务器类型• 编写脚本• 多路链接• PPTP• Windows 98拨号服务器• 解决拨号网络连接中的问题在上一章,我们...
    下载
    
    第22章Windows 98拨号网络
    作者:Kurt Hudson
    本章内容包括:
    • 配置拨号适配器
    • 安装拨号网络
    • 服务器类型
    • 编写脚本
    • 多路链接
    • PPTP
    • Windows 98拨号服务器
    • 解决拨号网络连接中的问题
    在上一章,我们学习了如何安装和配置Windows 98 TCP/IP协议包。本章我们继续讨论
    Windows 98与T C P / I P的远程连接访问部分。在Windows 98中,远程访问服务( R A S )又称为拨
    号网络( D U N )。在本章中,读者将了解到D U N、如何配置T C P / I P以便使用D U N及D U N的线路
    协议部分。
    22.1 配置拨号网络适配器
    在配置拨号网络适配器时,用户必须先安装拨号网络适配
    器或调制解调器;可使用“控制面板”中的M o d e m (调解解调
    器) 图标轻松实现调制解调器安装。双击M o d e m 图标打开
    Modems Properties对话框(如图2 2 - 1所示)。
    点击A d d (添加)按钮,Wi n d o w s将检测调制解调器。如果用
    户已经知道调制解调器的类型,或计划从厂商提供的文件中安
    装驱动程序,选择“ Don't Detect My modem,l will Select It
    From a List”复选框。点击N e x t (下一步),如果Wi n d o w s不能
    检测到用户的调制解调器,或用户不允许Wi n d o w s检测调制解
    调器,将弹出Install New Modem(安装新调制解调器)对话框,
    其中列出了大多数调制解调器厂商及其产品(见图2 2 - 2 )。注意,
    用户也可以使用串行或并行线缆通过D U N连接两台P C。选择
    与调制解调器匹配的厂商及型号,或点击Have Disk( 从磁盘安装)按钮从磁盘中安装。点击
    N e x t继续。
    下一步将选择调制解调器的端口。选择正确的端口并点击N e x t (下一步)。安装成功后,点
    击F i n i s h (完成)按钮。
    如果需要进一步配置调制解调器,在“控制面板”中点击m o d e m图标,并点击列出的
    m o d e m。在打开的modems Properties(属性)对话框中用户可以检查或设置连接速度、拨号特征、
    图22-1 安装modem以配置
    拨号网络适配器
    响铃类型及F o r w a r d i n g等属性(见图2 2 - 3 )。如果调制解调器安装及配置正确,下面就可以继续
    配置D U N。
    22.2 安装拨号网络
    下面开始安装并配置D U N,首先点击桌面上“我的电脑“图标,然后执行下列步骤:
    1) 双击标有“拨号网络”的图标,访问拨号网络文件夹,其中包含Make New
    C o n n e c t i o n (创建新连接)图标。
    2) 双击“创建新连接”图标配置D U N连接。首先将弹出Make New Connection(创建新连
    接)对话框(见2 2 - 4 )。
    图22-4 在“创建新连接”对话框中用户必须键入拨号及位置信息
    如果未发现D U N文件夹,用户必须在配置中添加拨号网络。首先点击“开始”设置,然
    后在“控制面板”中双击“添加/删除程序”。在弹出对话框中,点击“ Wi n d o w s设置”。在列
    出的Wi n d o w s组件中,双击“通信组件”,选中“拨号网络”复选框。点击“确定”按钮将
    D U N添加到系统配置中,其中可能需要指定Windows 98资源文件的路径。
    注意当没有安装调制解调器,配置拨号网络连接时, D U N将自动启动安装新调制解
    234使用第六部分实现T C P / I P
    下载
    图22-2 从列出的选项中选择正确的modem 图22-3 检查所选的modem属性是否符合需要
    调器向导。
    在对话框的第一文本框中键入拨号连接的名称。
    3) 敲入可以清楚标识连接的名字,因为它将做为连接图标的名称。例如,图2 2 - 4中显示
    的各种连接名称( I n f o m a g i c M a i n、AT T、O n R a m p等等)。
    4) 选择拨号网络连接使用的m o d e m。
    5) 点击“下一步”继续。
    在弹出的对话框中,用户必须输入拨出的电话号码。
    6) 键入区号及电话号码,或修改国家名称、敲入相应拨号信息。号码应是I n t e r n e t服务提
    供商( I S P )的号码或用户想连接的远程访问服务器的号码。
    7) 点击“下一步”继续。
    8) 点击“完成”按钮确认新连接。
    新连接的图标将出现在“拨号网络”文件夹中,为进一步配置及修改拨号网络连接,选
    择相应图标,从菜单条中选择文件及属性。用户将在弹出对话框中看到以下四个标签:
    • 常规
    • 服务器类型
    • 脚本
    • 多路链接( M u l t i l i n k )
    常规标签
    如果用户需要修改电话号码、修改m o d e m设置或修改连接使用的调制解调器,则需点击
    “常规”标签,用户甚至可以在“常规”标签页中点击“配置”按钮以配置用户的调制解调器。
    22.3 服务器类型
    一旦创建了拨号网络连接, Windows 98 DUN连接通常需
    要通过“服务器类型”对话框做进一步配置。“服务器类型”
    对话框允许用户对将要连接的服务器类型进行配置,并且配置
    T C P / I P及将使用的协议等。
    用户可以通过点击拨号网络连接图标的“属性”菜单打开
    “服务器类型”对话框:
    1) 打开“拨号网络”文件夹。
    2) 右键点击将要配置的连接。
    3) 从上下文菜单中选择“属性”菜单。
    4) 在I P U n l e a s h e d对话框中,选择Sever Ty p e s (服务器类型)
    标签页(见图2 2 - 5 )。
    在文中用户可以指明将要连接的服务器的类型。在( Ty p e
    of Dial-UP Server拨号服务器类型)下拉菜单中有以下可选项:
    • PPP Internet、Windows NT Server、Windows 98
    • SLIP UNIX连接
    • CSLIP IP头压缩的U N I X连接
    • NRN Netware连接版本1 . 0和1 . 1
    • Windows for Wo r k g r o u p和Windows NT 3.1
    第2 2章Windows 98拨号网络使用235
    下载
    图22-5 虽然向导中没有此步
    骤,但配置DUN服务器是大
    多数拨号连接的关键步骤
    其中, NRN: Netware Connection版本1 . 0和1 . 1仅支持I P X / S P X兼容协议。Windows for
    Wo r k g r o u p和Windows NT 3.1,只支持N e t B E U I连接。因为这两个选项都不支持T C P / I P连接,
    所以后面将不做进一步讨论。下面将详细讲解P P P、S L I P及C S L I P。
    1. SLIP和C S L I P
    串行线路互联网协议( S L I P )及压缩S L I P ( C S L I P )是典型的U N I X系统R A S服务器使用的类
    型。如果用户的I S P或UNIX RAS服务器支持S L I P或C S L I P,就可以为Windows 98选择这些连
    接选项。但是, Microsoft RAS 服务器,如Windows 98 和Windows NT不支持S L I P连接。
    M i c r o s o f t仅支持S L I P客户端但不支持S L I P服务器。如果用户需要连接Microsoft RAS服务器,
    就必须使用P P P连接。
    注意S L I P和C S L I P不是Windows 95的缺省配置。如果用户需要在Windows 95中支持
    SLIP及/或CSLIP,必须安装Dial-Up Scripting工具包,它包含在Windows 95 CD-ROM中。
    要获得这一支持,需做以下步骤:在“控制面板”中双击“添加删除程序”图标,点
    击“Wi n d o w s设置”标签,然后点击“从磁盘安装”选项。将安装路径设为Wi n d o w s
    95 CD-ROM驱动器的目录/ a d m i n / a p p t o o l s / d s c r i p t,然后点击“确认”按钮。选择S L I P
    and Scripting for Dial-Up Networking选项,点击“安装”按钮。
    S L I P与C S L I P的主要区别在于C S L I P支持I P头压缩,而S L I P不支持。这使得C S L I P连接的
    传输速度较S L I P快。除此之外,在Windows 98中,S L I P及C S L I P的功能及配置选项完全相同。
    当用户从拨号服务器类型下拉菜单中选中S L I P或C S L I P后,注意软件压缩及加密选项都不可
    用。这是因为S L I P及C L S I P不提供数据压缩或加密的功能。
    S L I P和C S L I P同时只能传输一个网络协议。因此,如果选中S L I P或C S L I P后,拨号服务器
    类型下拉菜单中的I P X / S P X与N e t B E U I都不可用。在Windows 98中,仅有T C P / I P协议可用于
    S L I P和C S L I P。
    S L I P不提供错误校正机制。S L I P依靠物理层硬件及T C P / I P错误校正能力维护数据的正确
    性。此外, S L I P不能使用压缩算法, C S L I P仅提供I P头压缩功能,它不能对报文的数据进行
    压缩。
    2. PPP
    点到点协议是Windows 98 DUN客户端缺省协议。P P P是一种线路协议,它用来包装、传
    输其他协议数据通过点到点连接。P P P可以支持一种或多种协议,它甚至可同时支持多种协议。
    缺省情况下,Windows 98 RAS客户端仅配置了三种协议( N e t B E U I、P X / S P X和T C P / I P )。但是,
    为网络效率起见,用户应尽可能少地选择连接所用的协议。本书中,假设用户仅选择了
    T C P / I P协议。
    除了支持多种网络协议外, P P P还提供数据链路层(Data Link Layer)协议、链接控制协议
    ( L C P ),它负责配置及监视线路连接。这表明P P P比S L I P及C S L I P有更高的可靠性。P P P可包
    含更多的数据信息,其头也比S L I P长,但采用先进的压缩技术, P P P连接的速度及效率都远
    远超过了S L I P连接。
    注意在Windows 98 PPP连接中,用户可以使软件压缩可用是缺省选项,但此选项不能
    用于SLIP或CSLIP。
    P P P连接允许用户配制额外的口令与数据安全。Require encrypted password与Require data
    236使用第六部分实现T C P / I P
    下载
    e n c r y p t i o n复选框可用于P P P连接,但它们不能用于S L I P或C S L I P连接(参见图2 2 - 5 )。
    如果远程R A S服务器支持S L I P、C S L I P或P P P,用户最好选择使用P P P,因为它在效率、
    灵活性及安全方面都优于其他两个线路协议。
    3. 高级选项
    “服务器类型”标签页的“高级选项”部分允许用户配置基于所选服务器类型的拨号属性
    及安全属性。正如前面提到的,选择“ PPP: Internet, Windows NT Server, Windows 98”提供
    更多的配置选项。“高级选项”列举如下:
    • Log on to network(登录到网络)—这一选项在用户连入Windows RAS服务器、Wi n d o w s
    for Workgroup RAS服务器或N e t Wa r e网络时使用。如果用户必须登录到远程网络,必须
    选中此选项。但对于互联网连接, Log on to network选项不是必要的,虽然它是缺省设
    置,但当用户与I S P建立连接时,取消Log on to network复选框可加速连接。
    • Enable software compression(启用软件压缩)—这一选项只适用于P P P连接,对于S L I P
    或S C L I P连接不适用。软件压缩可以提高拨号网络的速度。如果R A S服务器不支持,将
    不进行压缩。
    • Require encrypted password(需要加密口令)—P P P连接支持口令加密。如果选中这一选
    项,客户端将使用挑战握手认证协议( C H A P )加密传输口令。只有服务器也同时支持加
    密认证,该协议才可正常工作。如果不选此选项,客户方仍使用口令认证协议( PA P ),
    但它不如C H A P安全。如果R A S服务器要求,客户方将只使用PA P。
    • Require data encryption(需要数据加密)—这一选项适用于P P P连接,它强迫使用数据加
    密。如果选中此选项,客户方将只与支持数据加密的服务器建立连接。它不能工作于互
    联网拨号连接。但是,如果Windows NT RAS服务器支持数据加密, Windows 98客户端
    与之建立连接时,可在P P P连接上建立数据加密传输。S L I P和C S L I P不支持此选项。
    • Record a log file for this connection(为连接创建日志文件)—这一属性主要用于解决拨
    号连接中碰到的问题。它将创建PPP LOG.TXT文件,详细记录P P P连接过程中的协商细
    节。本章后半部分将详细讲述如何使用日志文件解决连接中碰到的问题。
    4. TCP/IP设置
    如果用户连入互联网,则必须为拨号连接配置额外的
    T C P / I P属性。用户可以为系统设置静态I P地址、名字服务器地
    址及W I N S服务器地址,这些属性可供任何线路协议( P P P、
    S L I P和C S L I P )使用。点击“ T C P / I P设置”按钮打开T C P / I P
    S e t t i n g s ( T C P / I P设置)对话框,并为拨号连接配置这些属性(见
    图2 2 - 6 )。
    如果用户的I S P或将要连接的R A S服务器允许用户配置静
    态I P地址,点击Specify an IP address(指定I P地址)单选按钮,
    在按钮下方的IP address(IP地址)框中填入分配的静态I P地址。
    通过D U N连接互联网的另一项重要配置是名字服务器。名
    字服务器可使系统将主机名如w w w. t s i n g h u a . e d u . c n解析为I P地
    址。如果用户使用主机名或域名建立连接,配置名字服务器非
    常关键。用户的I S P应提供名字服务器的I P地址。
    第2 2章Windows 98拨号网络使用237
    下载
    图22-6 配置TCP/IP设置:尤其
    是DNS服务器IP地址
    如果用户没有连入互联网,仍需要配置名字服务器上的I P地址以实现名字解析。用户也
    可以配置W I N S服务器的I P地址以便解析N e t B I O S名。检查将要连接的R A S服务器以获取正确
    的配置信息(远程网络的W I N S和D N S服务器的地址)。
    22.4 编写脚本
    目前,大多数I S P都支持从Dial-Up Networking(DUN连接)
    对话框中传输用户名及口令的M i c r o s o f t拨号网络方法。但是某
    些服务提供者仍希望用户使用终端窗口或脚本与服务器建立连
    接。每个D U N连接(不使用V P N适配器)的属性页中都包含
    S c r i p t i n g (制作脚本)标签。S c r i p t i n g标签可使用户映射脚本路径
    以便与服务器建立连接(见图2 2 - 7 )。需要终端窗口登录的I S P都
    为其用户提供脚本。
    在S p r i p t i n g标签中,用户也可以使在拨号连接协商过程中
    弹出终端窗口,以便敲入用户名和口令登录到I S P的R A S服务
    器上。
    注意用户可以通过Wi n d o w s目录下的s c r i p t . d o c文件了解到
    编写DUN连接脚本的方法。
    22.5 多重链接
    PPP Multilink允许用户综合多个拨号网络设备的带宽以提高有效连接的吞吐量。使用多
    重链接,用户可以结合两个或多个m o d e m、I S D N线路或它们的任意组合以提高连接速度。
    注意Windows 98中PPP多重链接(多路链接)遵循RFC 1717中定义的互联网工程任务规
    范(IETF)。
    虽然用户可在多重链接中使用不同类型的拨号连接,但使用对等的拨号适配器可以获得
    最佳性能。这是因为多重链接仅使用通用连接的最高速度。例如,同时使用4 8 0 0 0 b p s的
    m o d e m和2 8 0 0 0 b p s的m o d e m,则两个m o d e m都将使用2 8 0 0 0 b p s的传输率。如果选用两个B信
    道I S D N实现一个多重链接,用户将不能使用其他信道进行传真或语音通信。
    使用多重链接最重要的问题是用户的I S P或远程R A S服务器题必须支持多重链接。否则,
    多重链接将失败。如果用户通过I S P建立连接,就需要询问提供者是否支持P P P多重链接。
    配置多重链接,用户系统必须配置多个拨号适配器。每个拨号适配器必须使用独立的
    I S D N线路或电话线。为多重链接配置额外设置如下:
    1) 打开“拨号网络”文件夹。
    2) 在拨号连接上点击右键以创建“多重链接”,从上下文菜单中点击“属性”菜单。
    3) 点击“多重链接”标签。
    4) 点击“添加”按钮,如果“添加”按钮不可用,说明Windows 98没有检测到多个拨号
    适配器。用户需首先确认系统配置了多个网络适配器。
    5) 在Edit Extra Device(编辑额外设备)对话框中,选中加入连接中的设备,选中的设备将
    238使用第六部分实现T C P / I P
    下载
    图22-7 用户可以使用和修改在
    Program Files Accessories目
    录下的脚本文件
    与连接配置的设备共同工作。如果用户计划使用两条I S D N线
    路,在对话框中选择新的I S D N线路标号。
    6) 正确的配置完额外的设备后,见图2 2 - 8,点击O K按钮
    关闭多重链接对话框。
    正确配置完M u l t i l i n k及拨号适配器后,用户可以建立
    Multilink DUN连接。双击表示Multilink DUN连接的图标,然
    后点击“连接”按钮。D U N将使用主设备及从设备进行连接。
    为了确认M u l t i l i n k连接正常工作,双击任务栏中的拨号网
    络连接图标,在Connected To (连接到)对话框中点击“详细信
    息”按钮查看连接的详细信息。它将显示连接类型、适配器及
    使用的网络协议等信息。
    22.6 PPTP
    实现点到点隧道协议( P P T P )的目的是为网络中两个主机提供安全连接。典型的例子如:在
    互联网中两台主机间建立虚拟专用网连接( V P N )。两个主机间的连接是“私用”的,因为在连
    接设备间传送的都是加密报文,只有这两个设备可解密。加密算法的协商过程只有建立连接
    的P P T P主机知道。即使数据通过公共互联网传输,两个节点间的连接仍被视为安全和专用的。
    这并不意味着P P T P只适用于互联网,P P T P也可用于内部专用网络的两台主机建立安全连接。
    注意P P T P对于黑客攻击并非能安全防范。但是如果要破解P P T P报文,黑客必须知道
    或可以预测出通过P P T P连接传送的一些数据,然后使用“已知”的数据去解码通过
    P P T P传输的加密数据。这比仅通过搜集报文并通过协议分析器分析报文以获取信息要
    困难得多。
    与P P P一样,P P T P也可以支持多个网络协议如I P、I P X及N e t B E U I。但是,P P T P连接局限
    在两台机器之间。此外,即使使用专用网络连接,在Windows 98中,用户仍需使用虚拟专用
    网络适配器(软件组件)建立拨号网络连接。P P T P连接的两端必须配置使用D U N或PPTP RAS。
    虽然P P T P可用于多种方案中,但主要的P P T P连接配置方案有以下三种:
    • P P T P客户端到I S P到P P T P服务器。用户可以通过P P T P拨号客户与I S P连接建立此种类型
    的连接。然后再与P P T P服务器建立基于互联网的虚拟专用网连接。P P T P服务器应连接
    入互联网和远程目标网。一旦拨号网络客户与服务器建立P P T P连接,它就可以安全地
    访问远程网络。
    • 在永久L A N或WA N连接中创建V P N。如果用户客户方系统在同一个网络(使用永久连接),
    可以使用拨号网络通过永久连接直接链接服务器。这可以使用户在永久连接中传输加密
    数据。
    • I S P到P P T P服务器。某些I S P支持与远程网络的P P T P连接。使用D U N连接I S P,数据在
    互联网上传输时由I S P加密。I S P必须经过一定配置,且不影响D U N客户端配置。在这种
    方案中,D U N客户端无需配置P P T P或虚拟专用网络适配器。
    在三种方案中,使用最普遍的是第一种。在远程拨号客户到R A S服务器间实现数据加密
    是最关键的需求。如果用户使用P P T P连入I S P,远程P P T P服务器必须有合法的I P地址。否则,
    第2 2章Windows 98拨号网络使用239
    下载
    图22-8 如果需要配置多路拨号
    线路,用户需要首先配
    置多重链接
    用户将不能在I n t e r n e t中连接P P T P服务器。
    下面几节将讲述通过P P T P建立V P N的基本配置及连接步骤。
    22.6.1 安装及配置PPTP
    在安装和配置P P T P连接前,必须考虑一些因素。其中最重要的是基于P P T P的V P N只能在
    双方均支持P P T P的主机上建立。如果用户访问的R A S服务器不支持P P T P,则V P N将不能正常
    工作。
    P P T P连接可以在拨号连接、以太网或令牌环网上实现。但是所有的P P T P连接都必须使用
    拨号网络组件(在Windows NT中使用R A S组件)。因此,为建立P P T P连接,必须配置D U N或
    R A S及P P T P支持。
    P P T P客户通过P P T P建立连接时,必须通过远程客户认证。即使客户端与R A S服务器在同
    一个局域网,也必须进行认证。
    为安装P P T P支持,用户必须安装虚拟专用网络适配器。适配器的安装与安装物理设备如
    m o d e m的过程类似。它也必须像物理设备一样通过D U N进行配置。在Windows 98客户系统中
    安装V P N支持的过程如下:
    1) 在桌面上“网络邻居”图标上点击右键,在上下文菜单中选择“属性”菜单。
    2) 在弹出的网络对话框中点击“添加”按钮。
    3) 选择适配器并在“选择网络类型组件”对话框中点击
    “添加”按钮。
    4) 在选择网络适配器对话框的左边,厂商列表框中选中
    M i c r o s o f t。
    5) 在对话框的右边,选择M i c r o s o f t虚拟专用网络适配器。
    6) 点击“确定”按钮将适配器加入到N e t w o r k (网络)对
    话框中,见图2 2 - 9。
    7) 确定与/或关闭的所有对话框。
    用户安装了Microsoft VPN适配器后,必须单独配置使
    用适配器的拨号连接。配置V P N适配器的拨号网络连接过程
    如下:
    1) 打开“拨号网络”文件夹(“我的电脑”|“拨号网络”)。
    2) 点击“创建新连接”图标。
    3) 敲入连接的名称,名称仅做标识用,因此,尽量选择有意义的名称。
    4) 在“选择设备”对话框中,选择Microsoft VPN适配器。点击“下一步”继续。
    5) 敲入想要连接的P P T P服务器的名称及I P地址,点击“下一步”继续。
    6) 点击“完成”结束配置。
    当安装了V P N适配器并配置了使用V P N适配器的拨号网络连接后,用户就可与P P T P服务
    器建立V P N。
    22.6.2 建立PPTP连接
    如果用户想通过拨号网络连接建立P P T P连接,则首先需建立拨号网络连接,然后使用
    240使用第六部分实现T C P / I P
    下载
    图22-9 安装VPN适配器
    V P N进行连接(见图2 2 - 1 0 )。
    1) 在与I S P建立连接后,点击使用P P T P服务器名建立的
    P P T P连接的图标。
    2) 敲入正确的用户名及口令。
    3) 点击“连接”按钮,在已建立的与I S P的连接上创建
    安全的P P T P连接。
    一旦与远程网络的P P T P服务器建立连接,从工作站发
    出的报文将通过互联网直接路由到P P T P服务器。在远程网
    络中, P P T P服务器将报文路由到正确的位置。因为通过互
    联网与远程网络建立连接,用户将不再能访问互联网。除非
    远程网络允许,用户才可以访问互联网。
    1. ISP提供P P T P连接
    如果用户的I S P提供到远程服务器的P P T P连接,就不需
    要在本地工作站上配置P P T P连接。用户的I S P将告诉用户它
    是否提供此项服务。
    在这种情况下,发送给I S P的数据并未经过P P T P加密。然而,当数据通过互联网发送到远
    程服务器前,经过了I S P的P P T P加密。
    使用此种类型的P P T P连接,用户只需配置到I S P的拨号网络连接即可,而不需要在本地工
    作站上配置V P N连接。I S P必须配置到远程P P T P服务器的P P T P连接。
    2. 在L A N连接中创建P P T P连接
    如果用户使用永久L A N或WA N与P P T P服务器建立连接,仍可以使用P P T P加密用户数据。
    在工作站与P P T P服务器间传输的数据将通过永久网络连接加密。P P T P连接允许用户访问
    P P T P服务器可以访问的所有系统。因此,用户可以在内部网中创建独立的虚拟专用网。对于
    大型公司保障雇员的秘密性此种方案尤其适合。
    为创建到P P T P服务器的连接,用户必须配置拨号网络并添加V P N适配器。P P T P服务器同
    时也必须配置基于V P N的拨号服务(或R S A服务)。同时,用户还必须配置到P P T P服务器的拨
    号连接。最后,运行连接P P T P服务器的拨号连接。
    3. 基于防火墙及路由器实现P P T P
    如果与P P T P服务器建立连接时必须通过防火墙、路由器或代理服务器,用户需要设置正
    确的端口号及I P协议I D。I n t e r n e t编号管理局( I A N A )规定, P P T P使用T C P端口1 7 2 3,P P T P服
    务的I P协议号为4 7。如果采用正确的T C P端口及I P协议号,用户就能通过防火墙、路由器或代
    理服务器发送V P N报文。
    22.7 Windows 98拨号服务器
    Windows 98可以用来建立拨号服务器以处理拨号连接。用户可以从Windows 98“添加/删
    除程序”图标安装D U N服务器。在Windows 98中安装D U N服务器的过程如下:
    1) 打开“控制面板”(“开始”|“设置”|“控制面板”)。
    2) 双击“添加/删除程序”图标。
    3) 点击“Wi n d o w s安装”标签。
    第2 2章Windows 98拨号网络使用241
    下载
    图22-10 用户必须在建立网络
    连接后才可建立VPN连接
    4) 双击“通讯”。
    5) 选择“拨号服务器”复选框。
    6) 点击“确定”按钮安装相应组件。
    7) 敲入Windows 98安装文件的路径,点击“确定”按钮开始安装。
    一旦用户在系统中安装D U N服务器,就可以通过“拨号网络”文件夹对它进行访问。点
    击文件夹“连接”下拉菜单,选择Dial-Up Server(拨号服务
    器)。将弹出如图2 2 - 11所示的对话框。
    D U N服务器的配置选项非常有限,正如图中所示,用户
    可以点击Allow Caller Access或No Caller Access单选按钮开
    启或关闭服务。如果允许访问,用户可以配置拨号连接的口
    令。它是一种共享级保护,即所有用户都可以使用此口令与
    服务器建立连接。服务器每次仅能处理一个连接。
    如果点击Serrer Ty p e按钮,用户可以看到两个附加选项:
    使能软件压缩及连接口令需要加密。用户还可以选择拨号服
    务器的类型。只要系统支持, 服务器的类型可以是
    “PPP:Internet, Windows NT Server, Windows 98 DUN Server”或“Windows for Wo r k g r o u p s”
    及“Windows NT 3.1 DUN Server”。缺省的设置为仅支持T C P / I P拨号连接。Windows 98 DUN
    服务器没有其他配置选项。即使用户在Windows 98 DUN服务器中配置了多个拨号网络适配器,
    服务器也不支持M u l t i l i n k连接。
    注意Windows 95 DUN服务器是Windows 95 Plus!Pack CD-ROM的一部分。
    如果用户需要进一步的R A S特性和支持,可以使用Windows NT RAS,它支持M u l t i l i n k、
    多个拨入连接及数据加密。
    22.8 解决拨号网络连接中的问题
    当处理拨号网络连接中的问题时,需注意一些特殊情况。大多数明显的问题常常被忽略,
    例如,硬件故障导致D U N连接不正确。如果m o d e m没有连接上或配置不正确, D U N连接也可
    能发生错误。
    在解决D U N问题时,首先应确定m o d e m配置及功能正确。如果有条件,可以在别的主机
    上测试m o d e m是否正常。如果工作正常,则可以删除产生问题的D U N组件。检验m o d e m工作
    是否正常时,可使用m o d e m控制面板中“诊断标签”页的“详细信息”按钮。
    22.8.1 确认DUN配置
    如果m o d e m可正常工作,下一步应检查D U N设置,在“拨号网络”文件夹中不能正确工
    作的连接图标上点击右键,在弹出的上下文菜单中选择“属性”子菜单。确认G e n e r a l (常规)
    页中的电话号码及区号设置正确。如果电话号码显示其区号与D U N配置的在区号不同时,
    Windows 98 DUN将拨打长距离号码。如果区号不正确,用户可以不选择“常规”标签页中的
    “使用区号与拨号属性”复选框。
    确认D U N配置对话框选择了正确的m o d e m。用户也可以通过点击C o n f i g u r e (配置)按钮查
    242使用第六部分实现T C P / I P
    下载
    图22-11 Windows 98拨号
    网络服务器
    看m o d e m的设置是否正确。重复安装m o d e m驱动程序并以不同方式进行配置,以确保m o d e m
    配置正确。
    点击“服务器类型”页以确信配置正确。确认用户试图连接的服务器的类型设置正确,
    与I S P或R A S服务器管理员取得联系,获得正确的设置信息。
    如果R A S服务器不支持数据加密,若客户方选择需要数据加密将导致连接失败。如果远
    程服务器不接收用户口令,修改需要加密口令复选框重新尝试连接。另一个解决问题的步骤
    是清除“启用软件压缩”复选框。某些R A S服务器不支持这一特性,清除该复选框可能解决
    问题。
    登录网络复选框对于与大多数I S P建立连接都可以不选,但是如果选中也不会引发问题。
    但是,如果如果I S P或R A S不需要用户登录时,必须清除该复选框。
    22.8.2 PPP日志
    如果用户使用P P P连接,可以点击“为连接创建日志文件”复选框,以解决P P P连接中的
    问题。当选中这个复选框后,将在Wi n d o w s根目录下创建P P P L O G . T X T文件。P P P L O G . T X T
    文件中记录的连接过程可以帮助用户标识连接在何处失败。微软创建了名为“如何解释
    P P P L O G . T X T文件”的文档,可从Microsoft TechNet CD 或在线帮助w w w. microsoft.
    c o m / s u p p o r t中获得,文档标号为Q 1 5 6 4 3 5。
    22.9 小结
    Windows 98“拨号网络”允许用户通过拨号连接与远程系统通信。D U N客户端软件可以
    用来与各种类型的R A S服务器建立连接,包括S L I P、C S L I P和P P P等。在Windows 98中,P P P
    是缺省设置,它也是最有效的D U N连接方式。目前,大多数I S P都支持P P P连接;同时
    Windows 98也支持C S L I P和S L I P客户端连接。
    为了配置D U N,用户必须首先安装拨号网络设备。因为D U N为重要的网络,用户可以通
    过网络对话框添加D U N适配器。如果用户没有安装m o d e m,D U N安装过程将激活m o d e m安装
    向导。当安装并正确配置了m o d e m和拨号网络适配器软件后,用户可以建立D U N连接。
    为创建D U N连接,用户必须首先进入“拨号网络”文件夹,并使用“创建新连接”向导。
    当连接创建完成后,用户通常应对D U N连接属性作一定修改。例如,需要为客户端系统添加静
    态I P地址,或增加用于解析名字的D N S或W I N S服务器地址。用户还可以配置加密、压缩及服务
    器类型等属性。如果系统中安装了多个D U N设备,用户可以通过D U N连接属性建立多重链接。
    Windows 98支持P P T P,它可以在公共或专用网中的两个节点间创建安全连接。使用P P T P
    时,客户方系统及服务器方都必须支持并配置P P T P及V P N适配器。P P T P连接可以建立在永久
    L A N或WA N连接或拨号连接基础上。无论哪种方式,在建立P P T P连接前都必须首先建立网络
    连接或拨号网络连接。实现V P N需要独立的V P N适配器及拨号网络连接。
    当解决拨号网络连接中出现的问题时,千万不要忽略m o d e m的检测。如果m o d e m配置不
    正确或功能错误,拨号连接将不可能正确。检查完m o d e m的设置及驱动程序后,应检查D U N
    配置,确定服务器的类型配置正确,客户方没有使用服务器不支持的加密或压缩功能。如果
    没有发现P P P配置错误,选中D U N连接属性框中的“创建日志文件”复选框,尝试建立连接,
    然后查看Wi n d o w s系统目录下的P P P L O G . T X T文件,文件显示连接失败的过程。
    第2 2章Windows 98拨号网络使用243
    下载 
    展开全文
  • 增强Windows 98的系统安全性实战 关键字:Windows 98目前,众多的计算机用户使用的操作系统Windows 98,它的安全性是大家非常关注的,鉴于此写下此文,希望有助于维护您的系统安全。 设置用户权限 对...

    增强Windows 98的系统安全性实战

      关键字:Windows 98


    目前,众多的计算机用户使用的操作系统仍是Windows 98,它的安全性是大家非常关注的,鉴于此写下此文,希望有助于维护您的系统安全。





    设置用户权限





    对不同的用户设置不同的使用权限,限制一些用户对系统文件的修改权,将大大提高系统的安全性。其具体步骤如下(这里以设置“管理员”和“用户”两个级别为例):





    1、选择“控制面板/密码/用户配置文件/用户可自定义选项及桌面设置。登录时,Windows自动启用个人设置”(见图)。单击[确定]按钮,按屏幕提示设置“管理员”用户及密码。





    2、重新启动计算机后,以“管理员”身份进入Windows 98。选择“控制面板/用户”按向导提示,设置用户及密码,此时要根据需要设置“用户”级别所需项目。





    防止非法用户进入





    为防止非法用户以系统默认配置进入Windows 98,可采用以下措施:运行注册表编辑器“Regedit”打开注册表,在“/HKEY-USER/.DEFAULT/Software/Microsoft/Windows/CurrentVersion/Runonce”中创建新“字符串值”串值名为“非法用户,退出”。编辑字符串值为“Rundll.exe User.exe,Exitwindows”。这样,当非法用户试图进入你的Windows 98系统时计算机便会自动关机。





    为防止非法用户按F8键调出Windows 98的启动菜单以安全方式进入系统,我们还需要编辑MSDOS.sys文件。在该文件的[option]小节加入如下几行:





    “BootMulti=0”:设置系统不能进行多重引导;





    “BootGUI=1”:在启动时直接进入Windows 98图形用户界面;








    图1








    “BootDelay”:设置在启动时“Starting Windows 98 …”信息停留的时间为0秒;





    “BootKeys”:设置在启动过程中F4、F5、F6、F8功能键失效。





    限制用户级别





    用户在该分支下新建一个的使用权限用“用户”身份进入Windows 98系统,此时你可以通过修改文件注册表,根据需要限制“用户”级用户的使用权限。





    1、隐藏“开始”菜单的部分内容





    打开注册表,在“/HKEY-CURRENT-USER/Software/Microsoft/Windows/CurrentVersion/Policies/Explorer”中:①在该分支下建立一个DWORD值“NoSetFolders”,键值为“1”。这样用户便不能使用“控制面板”,且不能使用“开始/设置”中的“打印机”;②在该分支下新建一个DWORD值“NoSetTaskbar”,键值为“1”,则“任务栏属性”功能被禁止;③在该分支下新建一个DWORD值“NoFind”,键值为“1”,则“查找”功能被禁止;④在该分支下新建一个二进制值“NoRun”,键值为“0x00000001”,则“运行”菜单项被关闭。





    2、隐藏桌面上所有图标





    打开注册表,在“/HKEY-CURRENT-USER/Software/Microsoft/Windows/CurrentVersion/Policies/Explorer”中建立一个DWORD值“NoDesktop”,键值为“1”。重启计算机后,普通用户桌面上的所有图标将全部隐藏。





    3、禁用注册表编辑器





    为防止普通用户使用注册表,我们可以用以下办法禁止普通用户使用注册表:打开注册表,在“/HKEY-CURRENT-USER/Software/Microsoft/Windows/CurrentVersion/Policies/System”中建立一个DWORD值“DisableRegistryTools”,键值为“1”。





    4、隐藏驱动器





    为了重要文件的安全性,可将一个驱动器隐藏起来,具体步骤为:打开注册表,在“/HKEY-CURRENT-USER/Software/Microsoft/Windows/CurrentVersion/Policies/Explorer”中新建一个二进制值“NoDrive”,其缺省值为“00000000”,表示不隐藏任何驱动器,该值有四个字节组成,每个字节的第一位对应从A:到Z:的一个盘,即01为A,02为B,04为C……如隐藏D盘,键值为“0800000”;隐藏所有驱动器为“ffffffff”。





    5、禁用MS-DOS方式





    为防止普通用户使用MS-DOS方式进入任何驱动器,可以关闭MS-DOS功能,具体步骤为:打开注册表,在“/HKEY-CURRENT-USER/Software/Microsoft/Windows/CurrentVersion/Policies”中新建一个“WinOldApp”主键,在其下新建一个DWORD值“Disable”键值为“1”。





    6、禁止光盘的自动运行





    方法为:打开注册表,在“/HKEY-CURRENT-USER/Software/Microsoft/Windows/CurrentVersion/Policies/Explorer”中新建一个DWORD值“NoDriveTypeAutoRun”,键值为“1”。 禁止用软盘或光盘启动





    在CMOS设置中将启动顺序改为“C ONLY”,并为其设置必要的密码。





    经过以上的设置后,系统的安全性大大提高,但您必须做的就是要牢牢记住密码!不过Windows 98的安全性毕竟是有限的,如果您需要很高的安全性,还是使用Windows 2000吧。

    展开全文
  • 概要 Microsoft Windows 95、Windows 98Windows Millennium Edition (Me) 系统上,可以灵活地自定义页面大小。但运行 Windows NT 和 Windows 2000 的系统上,必须先将所有页面大小定义为页形 (form) 才能...

    概要

    在 Microsoft Windows 95、Windows 98 和 Windows Millennium Edition (Me) 系统上,可以灵活地自定义页面大小。但在运行 Windows NT 和 Windows 2000 的系统上,必须先将所有页面大小定义为页形 (form) 才能使用。本文介绍如何在 Windows NT 和 Windows 2000 上打印自定义页面大小,并包含一个代码示例,演示如何添加、选择和删除自定义页形。

    备注:由于 Visual Basic 5.0 Printer 对象的特性,通过调用 ResetDC 对 DEVMODE 所做的更改不起作用。因此,本文中的代码示例不适用于 Visual Basic 5.0。

    本文分为以下几个部分:

    定义或选择页面大小的 DEVMODE 成员
    如何通过编程方式选择页形
    页形来源和函数
    为网络打印机添加本地打印驱动程序的步骤
    分步示例

    更多信息

    定义或选择页面大小的 DEVMODE 成员

    打印机将其默认设置存储在名为 DEVMODE 的结构中。定义或选择页面大小时,可能会涉及此结构的四个成员:

    dmPaperSize
    dmPaperLength
    dmPaperWidth
    dmFormName
    dmPaperLengthdmPaperWidth 成员在所有系统上都包含值,但只能用于在运行 Windows 95、Windows 98 或 Windows Me 的系统上选择或定义大小。 dmFormName 成员仅在运行 Windows NT 或 Windows 2000 的系统上有效。 dmPaperSize 成员可在任何 32 位 Windows 操作系统上使用,只要分配给它的值对应于该系统上定义的大小或页形。

    因此,在运行 Windows 95、Windows 98 或 Windows Me 系统上,可以用高度(长度)和宽度或预定义的纸张大小来定义自定义页面大小。基于 Windows NT 或 Windows 2000 的系统仅使用定义的页形来指定页面大小,您可以通过以下两种方式来进行选择:设置 dmFormName ,或将一个“常量”值赋给 dmPaperSize

    若要在 Windows NT 或 Windows 2000 系统上使用特定的纸张大小,则必须为其定义一个页形。Visual Basic 中的 Printer 对象具有 PageSizeHeightWidth 属性,对应于 DEVMODE 的 dmPaperSizedmPaperLengthdmPaperWidth 成员。但是, Printer 对象未提供按名称选择页形的方式,而且也未提供在运行时添加自定义页形的方法。我们必须使用 Win32 应用程序编程接口 (API) 来创建自定义页形,和/或按名称选择页形。

    如何通过编程方式选择页形

    本文使用 EnumForms 基本进程来列出当前打印机支持的所有页形,并检查每个页形的高度和宽度。如果找到了指定的大小,将选择该大小。如果未找到指定的大小,代码将添加该页形,然后选择它。

    有三种方法可以通过编程方式选择页形:
    检索打印机的 DEVMODE 结构,设置dmFormName 成员,并使用ResetDC 函数将此页形设置为打印机设备上下文 (DC) 的当前页形。选择此页形作为 DC 的当前页形时,它仅对调用进程有效,而不会更改驱动程序的默认设置。这不需要任何特殊权限。对于需要更改打印机设置的应用程序,建议使用此方法。
    调用SetForm 函数更改打印机驱动程序的默认页形。使用此方法时,需要具有对该驱动程序的完全访问权限。更改了默认页形后,将影响所有使用该驱动程序进行打印的应用程序。对于网络打印机,多数用户都没有执行此调用所必需的权限。
    将自定义页形的系统定义值赋给Printer.PaperSize
    本文中的示例代码仅演示了第一种方法,而未演示调用 SetForm 的方法,或将值赋给 Printer.PaperSize 的方法。示例代码通过返回新的自定义页形在 EnumForms 返回的列表中的位置顺序来获取其系统定义值。请注意,此方法仅适用于自定义页形。分配给预定义页形的常量值与它们在该列表中的位置顺序不对应。

    使用 AddForm 函数添加自定义页形时,将为该页形分配它自己的编号(如果可用)。此编号对于使用该页形的所有打印机将一直保持一致。这样,就在当前系统上为该页形定义并分配了一个“常量”值。之后,即可通过将该值赋给 Printer.PaperSize 来选择该页形。但是,由于分配的编号只是简单地在添加该页形时列出的当前打印机页形数上加一,因此该编号可能会因某个预定义页形已经使用了该编号而不可用。因此,不建议使用此值来选择页形,所以本文中未演示使用此值的方法。如果使用分配的编号,但该值不可用,则可能会选择错误的页形或引发运行时错误 380:“Invalid Property Value.”

    页形来源和函数

    多数页形都由操作系统定义,而且对所有本地打印机都可用。但网络打印机的页形在打印机服务器上定义。某些页形可能是专为特定打印机驱动程序定义的,因此只出现在该驱动程序的列表中。页形的另一个来源是自定义或用户定义的页形。这些页形可以手动创建,或通过代码创建,并且对系统上的所有本地打印机都可用。特定于打印机的页形和用户定义的页形都存储在注册表中。

    本文中的示例使用了几个与页形相关的函数调用。下表简要地列出了主要的函数:

    函数说明
    EnumForms返回当前打印机支持的所有页形的信息。
    AddForm在系统中添加一个自定义页形。该页形上的数据存储在注册表中。因此,自定义页形对所有打印机都可用,而不是仅对添加该页形时的当前打印机可用。系统分配给该页形的数字值只是简单地在EnumForms 返回的当前打印机页形数上加一。必须具有对该驱动程序的完全访问权限才能调用此函数。如果不能手动添加页形,此函数也会失败。因此,通常不能在网络打印机上使用此函数。
    DeleteForm删除一个自定义页形。但是,此函数不会删除操作系统定义的标准页形。如果尝试删除标准页形,将返回错误代码 87。此函数需要的权限与AddForm 函数相同。


    虽然示例中未使用以下函数,但却包含这些函数的声明:

    函数说明
    GetForm检索有关特定页形的信息。
    SetForm设置指定打印机的默认页形信息。此函数需要完全访问权限,就像更改任何打印机驱动程序设置一样。


    必须强调这些函数中有一些需要对打印机的完全控制权限。因此,对于安装为“网络打印机”的打印机, SetFormAddFormDeleteForm 函数几乎根本不可用。这是因为网络打印机的驱动程序未安装在本地,而是安装在打印机服务器上,而您的用户帐户不太可能在打印机服务器上具有 Administrator 权限。但在 Windows 95、Windows 98 或 Windows Me 系统上情况有所不同。在这些系统上,所有打印机驱动程序(甚至网络打印机)始终都安装在本地。然而,可以在 Windows NT 或 Windows 2000 上将网络打印机安装为本地打印机,并将“端口”设置为打印机队列。这样,您就可以使用这些函数来进行更改,而不会影响共享该打印机的其他用户。

    为网络打印机添加本地打印机驱动程序的步骤

    1.开始菜单上,指向设置,然后单击打印机。双击添加打印机 ,启动“添加打印机向导”。
    2.向导提示时,一定要单击本地打印机 -或- 我的电脑 ,而不要选择网络打印机。虽然将连接到一台网络打印机,但要使用“我的电脑”上的驱动程序。单击下一步以继续。
    3.在 Windows NT 上,单击添加端口。在 Windows 2000 上,单击创建新端口
    4.在下拉列表框中,单击本地端口。在 Windows NT 上,单击新端口。在 Windows 2000 上,单击下一步,然后向导将提示您输入端口名
    5.键入该打印机在网络上的位置。例如:
    //printserver/printername
    (请用指向该打印机的实际路径名替换)。
    6.单击确定,完成该向导。
    如果您更改了活动打印机的打印机属性,仍会影响所有使用该打印机的应用程序,但仅限于本地系统上。

    重要说明 使用自定义页面大小时,在激光或喷墨式打印机和点阵或撞击式打印机上的现象有所不同。很明显,没有打印机会接受比它实际能够容纳的纸张大小还要宽的页面大小。但使用连续送纸机制的打印机对页面大小的限制很灵活,因为这种打印机每次打印一行。而激光和喷墨打印机每次却打印一页。因此,在打印到点阵打印机(这种打印机使用连续送纸机制)时,很容易就可以在换页时看到页面长度,因为打印机会将纸张向前送动它认为下一页的顶端开始的位置,而不管所用纸张的实际大小有多大。在激光和喷墨打印机上,换页时通常会弹出一整页打印纸,而不管它所识别的页面大小有多大。此外,在多数激光打印机上,让打印机在用户定义的页面大小上打印时,显示屏上将显示“Load Custom(装入自定义大小纸张)”,或类似提示。

    分步示例

    1.将一台本地打印机设置为默认打印机。为此,请按照下列步骤操作:
    a. 开始 菜单上,指向设置,然后单击打印机
    b. 右键单击一台本地打印机的图标,然后单击设为默认值
    2.在 Visual Basic 中启动一个新的标准 EXE 工程。默认情况下将创建 Form1。
    3.在 Form1 上添加三个命令按钮和一个列表框。s
    4.将以下代码粘贴到 Form1 的模块中:
    Option Explicit
    
    Private Sub Command1_Click()
    Dim FormName As String
    
    FormName = "MyCustomForm"   ' Use special, user-defined form.
    UseForm FormName
    End Sub
    
    Private Sub Command2_Click()
    Dim FormName As String
    
    ' Get FormName from the ListBox.
    On Error GoTo ListBoxERR    ' Trap for no selection.
    FormName = Mid(List1.Text, 1, InStr(1, List1.Text, " -") - 1)
    On Error GoTo 0             ' Turn off Error trap.
    
    UseForm FormName
    
    Exit Sub
    ListBoxERR:
    MsgBox "Select a printer from the ListBox before using this option.", _
       vbExclamation
    End Sub
    
    Private Sub Command3_Click()
    Dim RetVal As Long
    Dim PrinterHandle As Long   ' Handle to printer
    Dim PrinterName As String
    Dim FormName As String
    Dim Continue As Long
    
    ' Delete form that is selected in ListBox.
    PrinterName = Printer.DeviceName  ' Current printer
    If OpenPrinter(PrinterName, PrinterHandle, 0&) Then
    
        On Error GoTo ListBoxERR    ' Trap for no selection.
        FormName = Mid(List1.Text, 1, InStr(1, List1.Text, " -") - 1)
        On Error GoTo 0             ' Turn off Error trap.
    
        Continue = MsgBox("Are you sure you want to permanently remove " & _
                   FormName & " from " & PrinterName & "?", vbYesNo)
        If Continue = vbYes Then
            RetVal = DeleteForm(PrinterHandle, FormName & Chr(0))
            If RetVal <> 0 Then ' DeleteForm succeeded.
                List1.Clear     ' Reflect the deletion in the ListBox.
                Form_Load       ' Rebuild the list.
                MsgBox FormName & " deleted!", vbInformation, "Success!"
            Else
                MsgBox FormName & " not deleted!" & vbCrLf & vbCrLf & _
                   "Error code: " & Err.LastDllError, vbInformation, "Failure!"
            End If
        End If
        ClosePrinter (PrinterHandle)
    End If
    
    Exit Sub
    ListBoxERR:
    MsgBox "Select a printer from the ListBox before using this option.", _
       vbExclamation
    ClosePrinter (PrinterHandle)
    End Sub
    
    Private Sub Form_Load()
    Dim NumForms As Long, I As Long
    Dim FI1 As FORM_INFO_1
    Dim aFI1() As FORM_INFO_1           ' Working FI1 array
    Dim Temp() As Byte                  ' Temp FI1 array
    Dim BytesNeeded As Long
    Dim PrinterName As String           ' Current printer
    Dim PrinterHandle As Long           ' Handle to printer
    Dim FormItem As String              ' For ListBox
    Dim RetVal As Long
    Dim FormSize As SIZEL               ' Size of desired form
    
    PrinterName = Printer.DeviceName    ' Current printer
    If OpenPrinter(PrinterName, PrinterHandle, 0&) Then
        With FormSize   ' Desired page size
            .cx = 214000
            .cy = 216000
        End With
        ReDim aFI1(1)
        RetVal = EnumForms(PrinterHandle, 1, aFI1(0), 0&, BytesNeeded, _
                 NumForms)
        ReDim Temp(BytesNeeded)
        ReDim aFI1(BytesNeeded / Len(FI1))
        RetVal = EnumForms(PrinterHandle, 1, Temp(0), BytesNeeded, _
                 BytesNeeded, NumForms)
        Call CopyMemory(aFI1(0), Temp(0), BytesNeeded)
        For I = 0 To NumForms - 1
            With aFI1(I)
                ' List name and size including the count (index).
                FormItem = PtrCtoVbString(.pName) & " - " & .Size.cx / 1000 & _
                   " mm X " & .Size.cy / 1000 & " mm   (" & I + 1 & ")"
                List1.AddItem FormItem
            End With
        Next I
        ClosePrinter (PrinterHandle)
    End If
    End Sub
    
    Private Sub UseForm(FormName As String)
    Dim RetVal As Integer
    
    RetVal = SelectForm(FormName, Me.hwnd)
    Select Case RetVal
        Case FORM_NOT_SELECTED   ' 0
            ' Selection failed!
            MsgBox "Unable to retrieve From name", vbExclamation, _
               "Operation halted!"
        Case FORM_SELECTED   ' 1
            ' Selection succeeded!
            PrintTest     ' Comment this line to avoid printing
        Case FORM_ADDED   ' 2
            ' Form added and selected.
            List1.Clear   ' Reflect the addition in the ListBox
            Form_Load     ' by rebuilding the list.
    End Select
    End Sub
    					
    5.工程 菜单上,添加一个新模块,Module1。
    6.将下面的代码粘贴到 Module1 中:
    Option Explicit
    
    Public Declare Function EnumForms Lib "winspool.drv" Alias "EnumFormsA" _
        (ByVal hPrinter As Long, ByVal Level As Long, ByRef pForm As Any, _
        ByVal cbBuf As Long, ByRef pcbNeeded As Long, _
        ByRef pcReturned As Long) As Long
    
    Public Declare Function AddForm Lib "winspool.drv" Alias "AddFormA" _
        (ByVal hPrinter As Long, ByVal Level As Long, pForm As Byte) As Long
    
    Public Declare Function DeleteForm Lib "winspool.drv" Alias "DeleteFormA" _
        (ByVal hPrinter As Long, ByVal pFormName As String) As Long
    
    Public Declare Function OpenPrinter Lib "winspool.drv" _
        Alias "OpenPrinterA" (ByVal pPrinterName As String, _
        phPrinter As Long, ByVal pDefault As Long) As Long
    
    Public Declare Function ClosePrinter Lib "winspool.drv" _
        (ByVal hPrinter As Long) As Long
    
    Public Declare Function DocumentProperties Lib "winspool.drv" _
        Alias "DocumentPropertiesA" (ByVal hwnd As Long, _
        ByVal hPrinter As Long, ByVal pDeviceName As String, _
        pDevModeOutput As Any, pDevModeInput As Any, ByVal fMode As Long) _
        As Long
    
    Public Declare Function ResetDC Lib "gdi32" Alias "ResetDCA" _
        (ByVal hdc As Long, lpInitData As Any) As Long
    
    Public Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" _
        (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
    
    Public Declare Function lstrcpy Lib "KERNEL32" Alias "lstrcpyA" _
        (ByVal lpString1 As String, ByRef lpString2 As Long) As Long
    
    ' Optional functions not used in this sample, but may be useful.
    Public Declare Function GetForm Lib "winspool.drv" Alias "GetFormA" _
        (ByVal hPrinter As Long, ByVal pFormName As String, _
        ByVal Level As Long, pForm As Byte, ByVal cbBuf As Long, _
        pcbNeeded As Long) As Long
    
    Public Declare Function SetForm Lib "winspool.drv" Alias "SetFormA" _
        (ByVal hPrinter As Long, ByVal pFormName As String, _
        ByVal Level As Long, pForm As Byte) As Long
    
    ' Constants for DEVMODE
    Public Const CCHFORMNAME = 32
    Public Const CCHDEVICENAME = 32
    Public Const DM_FORMNAME As Long = &H10000
    Public Const DM_ORIENTATION = &H1&
    
    ' Constants for PRINTER_DEFAULTS.DesiredAccess
    Public Const PRINTER_ACCESS_ADMINISTER = &H4
    Public Const PRINTER_ACCESS_USE = &H8
    Public Const STANDARD_RIGHTS_REQUIRED = &HF0000
    Public Const PRINTER_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or _
      PRINTER_ACCESS_ADMINISTER Or PRINTER_ACCESS_USE)
    
    ' Constants for DocumentProperties() call
    Public Const DM_MODIFY = 8
    Public Const DM_IN_BUFFER = DM_MODIFY
    Public Const DM_COPY = 2
    Public Const DM_OUT_BUFFER = DM_COPY
    
    ' Custom constants for this sample's SelectForm function
    Public Const FORM_NOT_SELECTED = 0
    Public Const FORM_SELECTED = 1
    Public Const FORM_ADDED = 2
    
    Public Type RECTL
            Left As Long
            Top As Long
            Right As Long
            Bottom As Long
    End Type
    
    Public Type SIZEL
            cx As Long
            cy As Long
    End Type
    
    Public Type SECURITY_DESCRIPTOR
            Revision As Byte
            Sbz1 As Byte
            Control As Long
            Owner As Long
            Group As Long
            Sacl As Long  ' ACL
            Dacl As Long  ' ACL
    End Type
    
    ' The two definitions for FORM_INFO_1 make the coding easier.
    Public Type FORM_INFO_1
            Flags As Long
            pName As Long   ' String
            Size As SIZEL
            ImageableArea As RECTL
    End Type
    
    Public Type sFORM_INFO_1
            Flags As Long
            pName As String
            Size As SIZEL
            ImageableArea As RECTL
    End Type
    
    Public Type DEVMODE
            dmDeviceName As String * CCHDEVICENAME
            dmSpecVersion As Integer
            dmDriverVersion As Integer
            dmSize As Integer
            dmDriverExtra As Integer
            dmFields As Long
            dmOrientation As Integer
            dmPaperSize As Integer
            dmPaperLength As Integer
            dmPaperWidth As Integer
            dmScale As Integer
            dmCopies As Integer
            dmDefaultSource As Integer
            dmPrintQuality As Integer
            dmColor As Integer
            dmDuplex As Integer
            dmYResolution As Integer
            dmTTOption As Integer
            dmCollate As Integer
            dmFormName As String * CCHFORMNAME
            dmUnusedPadding As Integer
            dmBitsPerPel As Long
            dmPelsWidth As Long
            dmPelsHeight As Long
            dmDisplayFlags As Long
            dmDisplayFrequency As Long
    End Type
    
    Public Type PRINTER_DEFAULTS
            pDatatype As String
            pDevMode As Long    ' DEVMODE
            DesiredAccess As Long
    End Type
    
    Public Type PRINTER_INFO_2
            pServerName As String
            pPrinterName As String
            pShareName As String
            pPortName As String
            pDriverName As String
            pComment As String
            pLocation As String
            pDevMode As DEVMODE
            pSepFile As String
            pPrintProcessor As String
            pDatatype As String
            pParameters As String
            pSecurityDescriptor As SECURITY_DESCRIPTOR
            Attributes As Long
            Priority As Long
            DefaultPriority As Long
            StartTime As Long
            UntilTime As Long
            Status As Long
            cJobs As Long
            AveragePPM As Long
    End Type
    
    Public Function GetFormName(ByVal PrinterHandle As Long, _
                              FormSize As SIZEL, FormName As String) As Integer
    Dim NumForms As Long, I As Long
    Dim FI1 As FORM_INFO_1
    Dim aFI1() As FORM_INFO_1           ' Working FI1 array
    Dim Temp() As Byte                  ' Temp FI1 array
    Dim FormIndex As Integer
    Dim BytesNeeded As Long
    Dim RetVal As Long
    
    FormName = vbNullString
    FormIndex = 0
    ReDim aFI1(1)
    ' First call retrieves the BytesNeeded.
    RetVal = EnumForms(PrinterHandle, 1, aFI1(0), 0&, BytesNeeded, NumForms)
    ReDim Temp(BytesNeeded)
    ReDim aFI1(BytesNeeded / Len(FI1))
    ' Second call actually enumerates the supported forms.
    RetVal = EnumForms(PrinterHandle, 1, Temp(0), BytesNeeded, BytesNeeded, _
             NumForms)
    Call CopyMemory(aFI1(0), Temp(0), BytesNeeded)
    For I = 0 To NumForms - 1
        With aFI1(I)
            If .Size.cx = FormSize.cx And .Size.cy = FormSize.cy Then
               ' Found the desired form
                FormName = PtrCtoVbString(.pName)
                FormIndex = I + 1
                Exit For
            End If
        End With
    Next I
    GetFormName = FormIndex  ' Returns non-zero when form is found.
    End Function
    
    Public Function AddNewForm(PrinterHandle As Long, FormSize As SIZEL, _
                               FormName As String) As String
    Dim FI1 As sFORM_INFO_1
    Dim aFI1() As Byte
    Dim RetVal As Long
    
    With FI1
        .Flags = 0
        .pName = FormName
        With .Size
            .cx = FormSize.cx
            .cy = FormSize.cy
        End With
        With .ImageableArea
            .Left = 0
            .Top = 0
            .Right = FI1.Size.cx
            .Bottom = FI1.Size.cy
        End With
    End With
    ReDim aFI1(Len(FI1))
    Call CopyMemory(aFI1(0), FI1, Len(FI1))
    RetVal = AddForm(PrinterHandle, 1, aFI1(0))
    If RetVal = 0 Then
        If Err.LastDllError = 5 Then
            MsgBox "You do not have permissions to add a form to " & _
               Printer.DeviceName, vbExclamation, "Access Denied!"
        Else
            MsgBox "Error: " & Err.LastDllError, "Error Adding Form"
        End If
        AddNewForm = "none"
    Else
        AddNewForm = FI1.pName
    End If
    End Function
    
    Public Function PtrCtoVbString(ByVal Add As Long) As String
    Dim sTemp As String * 512, x As Long
    
    x = lstrcpy(sTemp, ByVal Add)
    If (InStr(1, sTemp, Chr(0)) = 0) Then
         PtrCtoVbString = ""
    Else
         PtrCtoVbString = Left(sTemp, InStr(1, sTemp, Chr(0)) - 1)
    End If
    End Function
    
    Public Function SelectForm(FormName As String, ByVal MyhWnd As Long) _
        As Integer
    Dim nSize As Long           ' Size of DEVMODE
    Dim pDevMode As DEVMODE
    Dim PrinterHandle As Long   ' Handle to printer
    Dim hPrtDC As Long          ' Handle to Printer DC
    Dim PrinterName As String
    Dim aDevMode() As Byte      ' Working DEVMODE
    Dim FormSize As SIZEL
    
    PrinterName = Printer.DeviceName  ' Current printer
    hPrtDC = Printer.hdc              ' hDC for current Printer
    SelectForm = FORM_NOT_SELECTED    ' Set for failure unless reset in code.
    
    ' Get a handle to the printer.
    If OpenPrinter(PrinterName, PrinterHandle, 0&) Then
        ' Retrieve the size of the DEVMODE.
        nSize = DocumentProperties(MyhWnd, PrinterHandle, PrinterName, 0&, _
                0&, 0&)
        ' Reserve memory for the actual size of the DEVMODE.
        ReDim aDevMode(1 To nSize)
    
        ' Fill the DEVMODE from the printer.
        nSize = DocumentProperties(MyhWnd, PrinterHandle, PrinterName, _
                aDevMode(1), 0&, DM_OUT_BUFFER)
        ' Copy the Public (predefined) portion of the DEVMODE.
        Call CopyMemory(pDevMode, aDevMode(1), Len(pDevMode))
    
        ' If FormName is "MyCustomForm", we must make sure it exists
        ' before using it. Otherwise, it came from our EnumForms list,
        ' and we do not need to check first. Note that we could have
        ' passed in a Flag instead of checking for a literal name.
        If FormName = "MyCustomForm" Then
            ' Use form "MyCustomForm", adding it if necessary.
            ' Set the desired size of the form needed.
            With FormSize   ' Given in thousandths of millimeters
                .cx = 214000   ' width
                .cy = 216000   ' height
            End With
            If GetFormName(PrinterHandle, FormSize, FormName) = 0 Then
                ' Form not found - Either of the next 2 lines will work.
                'FormName = AddNewForm(PrinterHandle, FormSize, "MyCustomForm")
                AddNewForm PrinterHandle, FormSize, "MyCustomForm"
                If GetFormName(PrinterHandle, FormSize, FormName) = 0 Then
                    ClosePrinter (PrinterHandle)
                    SelectForm = FORM_NOT_SELECTED   ' Selection Failed!
                    Exit Function
                Else
                    SelectForm = FORM_ADDED  ' Form Added, Selection succeeded!
                End If
            End If
        End If
    
        ' Change the appropriate member in the DevMode.
        ' In this case, you want to change the form name.
        pDevMode.dmFormName = FormName & Chr(0)  ' Must be NULL terminated!
        ' Set the dmFields bit flag to indicate what you are changing.
        pDevMode.dmFields = DM_FORMNAME
    
        ' Copy your changes back, then update DEVMODE.
        Call CopyMemory(aDevMode(1), pDevMode, Len(pDevMode))
        nSize = DocumentProperties(MyhWnd, PrinterHandle, PrinterName, _
                aDevMode(1), aDevMode(1), DM_IN_BUFFER Or DM_OUT_BUFFER)
    
        nSize = ResetDC(hPrtDC, aDevMode(1))   ' Reset the DEVMODE for the DC.
    
        ' Close the handle when you are finished with it.
        ClosePrinter (PrinterHandle)
        ' Selection Succeeded! But was Form Added?
        If SelectForm <> FORM_ADDED Then SelectForm = FORM_SELECTED
    Else
        SelectForm = FORM_NOT_SELECTED   ' Selection Failed!
    End If
    End Function
    
    Public Sub PrintTest()
        ' Print two test pages to confirm the page size.
        Printer.Print "Top of Page 1."
        Printer.NewPage
        ' Spacing between lines should reflect the chosen page height.
        Printer.Print "Top of Page 2. - Check the page Height (Length.)"
        Printer.EndDoc
        MsgBox "Check Printer " & Printer.DeviceName, vbInformation, "Done!"
    End Sub
    					
    7.运行该工程。列表框中将显示当前打印机支持的所有页形。
    8.单击Command1。这将在该列表的末尾添加“MyCustomForm - 214 mm X 216 mm (xxx)”。其中,“xxx”是分配给这个新页形的编号。
    9.单击列表框中的一个页形,然后单击Command2。这将使用所选页形在当前打印机上打印一张测试页。
    10.单击列表框中的新自定义页形,然后单击Command3。程序将提示您是否确定要删除该页形。如果单击,程序将删除该自定义页形。如果尝试删除预定义的页形,将引发错误 87,因为只有自定义页形可以删除。

    原文:

    http://support.microsoft.com/default.aspx?scid=kb;zh-cn;282474

    展开全文
  • Windows NT/2000/XP与Windows 95/98/Me的对比

    千次阅读 2005-08-15 10:26:00
    以下是Windows NT与Windows 95的对比,这些对比同样适用于Windows 2000/XP与Windows 98/Me的对比。(1)Windows NT支持多处理器系统,而Windows 95不支持。(2)Windows NT可以各种体系结构的计算机上运行,而Windows ...

            以下是Windows NT与Windows 95的对比,这些对比同样适用于Windows 2000/XP与Windows 98/Me的对比。

    (1)Windows NT支持多处理器系统,而Windows 95不支持。

    (2)Windows NT可以在各种体系结构的计算机上运行,而Windows 95只限于在x86平台上运行。

    (3)Windows 95不具有支持安全性的文件系统(如自主访问控制)。

    (4)Windows NT是完全32位的操作系统,不包含16代码。Windows 95继承了其前辈MS-DOS及Windows 3.1中大量的16位代码。

    (5)Windows NT是完全可重入的,而Windows 95的重要部分是不可重入的(主要来源于Windows 3.1的早期16位代码)。这些不可重入的代码包括多数的图形和窗口管理函数(USRE和GDI)。当Windows 95中的一个32位应用程序试图调用一个由不可重入的16位代码实现的系统服务时,必须先获得一个系统范围的锁定(或互斥)来阻止其他线程进入这段不可重入的代码。更糟糕的是,16位应用程序在运行时保存这个锁定。因此,尽管Windows 95的内核Kernal中包含强制的32位多线程调度程序,但由于系统的大部分仍在不可重入代码中执行,因而应用程序在多数时间内运行单个线程。

    (6)Windows NT提供在其自己的地址空间中运行16位Windows应用程序的选项;而Windows 95总是在共享的地址空间中运行16位Windows应用程序,在这个地址空间中,他们可能会彼此相互破坏,导致程序挂起。

    (7)在Windows NT中共享的内存只对于有相同共享内存区域的进程是可见的(在Win32 API中称为“文件映射对象”)。在Windows 95中所有共享的内存对于所有进程来说都是可见和可写的。因此,任何进程都可以向任何文件映射对象中写入数据。

    (8)Windows 95中有一些重要的操作系统页面,这些页面对于用户态是可写的,这样就允许用户用程序去破坏系统。但在Windows NT中,所有操作系统页面对于应用程序代码来说都是不可写的。

    (9)在Windows 95上能够运行所有早期的MS-DOS和Windows 3.1应用程序,特别是那些需要直接访问系统硬件的应用程序,但Windows NT只支持大多数16位应用程序,由于Windows NT对I/O访问有严格的权限限制,因此对于直接访问系统硬件的16位应用程序不提供支持。

    展开全文
  • windows 程序设计

    2009-05-19 23:00:54
    为说明Windows程序设计的多种技术,本书提供了许多范例程序。这些程序使用C语言撰写并原原本本的使用Windows API来开发程序。...这是我们1985年为Windows 1.0写程序的方法,它今天是写作Windows程序的有效方法。
  • Microsoft Windows使用Apache

    千次阅读 2007-10-19 11:06:00
    Microsoft Windows使用Apache此文档阐述了如何Microsoft Windows平台上安装、配置和运行Apache 2.2 。 如果你发现了bug,或者希望以其他方式作出贡献,请使用我们的bug报告页面。本文档的大多数内容假定你是从...
  • IE6很烂,为什么我们仍在使用

    千次阅读 2009-03-17 21:12:00
    很多人说Internet Explorer 6是开发者的梦魇,因为一些...现在IE8都已发布,但一个有意思的话题是:IE 6这么烂,为什么我们中的许多人仍然在使用它呢?ChrisCoyier他的博客中就此问题表达了他的看法:Internet Explo
  • (转载)使用Windows的140个技巧(二)

    千次阅读 2005-05-06 18:21:00
    71.采用Windows 98/2000的窗口风格 有些人可能不喜欢Windows XP的窗口风格,想恢复原来的Windows 98/2000的界面,怎么办?桌面空白处单击鼠标右键,快捷菜单中选择“属性”,弹出的窗口中选择“主题”标签,从...
  • Windows XP使用技巧大全

    千次阅读 2012-09-20 09:22:21
    1 怎样电脑右下角的日期上显示星期? 点击开始--打开控制面版-----找到区域和语言选项双击打开-----点击自定义 自定义区域选项-----点击日期------找到长日期格式(L)-----日期后加"dddd" 点确定即可.回到...
  • 使用 Sysprep 自动部署 Windows 2000

    千次阅读 2004-12-06 14:24:00
    使用 Sysprep 自动部署 Windows 2000操作系统 白皮书 摘要 本文档讨论如何使用简单实用程序 Sysprep 硬盘上准备要复制和自定义的系统,以便具有兼容配置的多台计算机上快速部署 Microsoft® Windows® 2000 操作...
  • (转载)使用Windows的140个技巧(一)

    千次阅读 2005-05-06 18:25:00
    事实上只要第一次激活时,备份好Windows/System32目录中的Wpa.dbl文件,就不用再进行激活的工作了。重装Windows XP后,只需要复制该文件到上面的目录即可。 2. 如何知道自己的Windows XP是否已激活 打开
  • 如何使用远程工具跟踪 Windows CE 应用程序中的内存泄漏 发布日期 : 4/6/2005 | 更新日期 : 4/6/2005 Mike Hall Microsoft 适用于: Microsoft Windows CE 5.01 摘要:本文提供了有关调试...
  • 一个常规的windows窗口一般都是一些一样的构造,你如果想要更改一些个性化的设置,你可以这个一般的模板伤添砖加瓦,构造自己比较喜欢的类型,下边就分析一下一般的windows窗口的一般模板。 一. 首先看一下一般...
  • windows 8

    千次阅读 2011-09-16 08:48:11
    业界对Windows 8的初步印象很好,不过微软今天推出的Windows 8是一款预装版。 Windows8主界面  微软目前没有透露Windows 8正式版推出的具体时间,但业界认为,至少可能要到一年以后,这种...
  • 微软操作系统(二) Windows95/98/me简介

    千次阅读 2007-03-23 20:45:34
    ·Windows95发布成为那一年最轰动的事件 Windows 95 1995年最轰动的事件,莫过于8月期间windows95发布,当时微软视窗95以强大的攻势进行发布,包括了商业性质的Rolling Stones的歌曲...强大的宣传攻势和Wi...
  • Windows注册表

    万次阅读 2019-07-02 21:40:41
    在Windows 3.0推出OLE技术的时候,注册表就已经出现。随后推出的Windows NT是第一个从系统级别广泛使用注册表的操作系统。但是,从Microsoft Windows 95操作系统开始,注册表才真正成为Windows用户...
  • windows的发展历程(适合小白科普)

    千次阅读 2020-11-26 16:24:22
    Windows 1.0:一切开始! Windows 1.0于1985年11月20日发布。 微软的第一个Windows系统引入了图形用户界面,...此版本继续使用VGA图形以16位运行,并较流行的Word和Excel程序的旧版本中运行。 该版本允许应用程序
  • 现在,个人仍在使用Windows 2000的人恐怕不多,使用Windows98的更是个别,不过,现在还有很多工厂还在使用Windows 2000系统,Windows 98和2000毕竟过去的历史时期,是大家常用的主流操作系统,也曾有过它们的骄傲...
  • 在Windows世界中,有无数块活动的大陆,它们都有一个共同的名字——动态链接库。现在就让我们走进这些神奇的活动大陆,找出它们隐藏已久的秘密吧!   初窥门径:Windows的基石   随便打开一个系统目录,一...
  • linux & windows C++开发差异

    千次阅读 2017-11-03 17:46:19
    windows下不区分大小写,路径分隔符一般使用”\”;linux下区分大小写,路径分隔符使用”/”。 2、itoa()函数linux下并不存在。 所以使用类似sprintf();之类的函数是个不错的替代。(为什么说是类似函数,看...
  • Windows基础知识整理

    千次阅读 2020-07-23 15:04:41
    Windows基础知识1、Windows简介Windows系列1.Windows 1.02.Windows 2.03.Windows 3.04.Windows 955.Windows 986.Windows 98 SE7.Windows ME8.Windows NT9.Windows 200010.Windows XP11.Windows Vista12.Windows 713....
  • Windows 1.0 软盘镜像

    热门讨论 2010-11-13 09:23:46
    这个是微软的第一个Windows系统,快绝迹江湖了,值得收藏,包含全5张软盘...之后的 Windows 2.x,3.x 和 95,98,ME是基于DOS的操作系统。 而Windows NT则宣告了DOS操作系统的终结,并成为流行至今的主流操作系统。
  • windows命令

    千次阅读 2016-04-19 11:08:16
    虽然随着计算机产业的发展,Windows 操作系统的应用越来越广泛,DOS 面临着被淘汰的命运,但是因为它运行安全、稳定,有的用户还在使用,所以一般Windows 的各种版本都与其兼容,用户可以在Windows 系统下运行DOS,...
  • windows 1.04 软盘镜像

    2010-11-13 10:05:11
    之后的 Windows 2.x,3.x 和 95,98,ME是基于DOS的操作系统。 而Windows NT则宣告了DOS操作系统的终结,并成为流行至今的主流操作系统。 编辑本段历史  Microsoft Windows 1.0于1985年11月发布,最初售价为100...
  • Windows提供了应用程序丰富的可呼叫函数,大多数用于实作其使用者接口和视讯显示器上显示文字和图形。这些函数采用动态链接库(Dynamic Linking Library,DLL)的方式撰写。这些动态链接库是些具有.DLL或者有时是....
  • Windows CE

    千次阅读 2012-07-09 16:26:18
    WindowsCE是微软公司嵌入式、移动计算平台的基础,它是一个开放的、可升级的32位嵌入式操作系统,是基于掌上型电脑类的电子设备操作系统,它是精简的Windows 95,Windows CE的图形用户界面相当出色。 目录 ...
  • Windows 终端命令大全

    万次阅读 多人点赞 2018-09-12 20:18:44
    虽然随着计算机产业的发展,Windows 操作系统的应用越来越广泛,DOS 面临着被淘汰的命运,但是因为它运行安全、稳定,有的用户还在使用,所以一般Windows 的各种版本都与其兼容,用户可以在Windows 系统下运行DOS,....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,320
精华内容 8,128
关键字:

仍在使用windows98