walker zqhxw@pub.jiangmen...:在 Windows NT 4.0 Workstation中文版环境下是否可以直接运行Windows 3.x、Windows 95和DOS软件?
李海:绝大多数Windows 3.x、Windows 95和DOS软件都可以在Windows NT 4.0 Workstation中文版环境下直接运行。但有几类程序可能无法在Windows NT 4.0 Workstation环境下运行:使用32位保护模式驱动的DOS程序;某些磁盘工具,Windows NT有一种新的文件系统NTFS,很多磁盘工具不支持这一系统,象Norton Utilities就有针对Win95和WinNT的两个版本;某些外挂式汉字操作系统。另外,还有些针对Windows 95设计的程序可能对Windows NT没有用处。从程序设计的角度来说,Windows 95和Windows NT虽都使用Win32 API,但小的差别很多,所以在Windows 95下测试过软件也可能在Windows NT下有些小问题。
lyj@info... 路永军:请问如何区分Windows 95的OEM版本,如OSR2、OSR2.1?
李海:选择“My Computer”(我的电脑)图标的Properties(属性)可以看到Windows 95的版本号,非OEM版本为4.00.950,OEM版本为4.00.950B。OEM版本和非OEM版本的差别比较大,比较好分辨。如果在Control Panel(控制面板)的Add/Remove Programs(安装/删除程序)处发现了USB Supplement to OSR2,则系统是OSR2.1,否则可能是OSR2。深圳 余陆斌:我的机器上有64MB的内存,希望在Windows 95上使用其中48MB作为虚拟硬盘,有什么软件可实现?
李海:Windows95仍然提供了建立虚拟磁盘的RAMDRIVE.SYS文件,在Windows 95目录下,使用方法同以前的DOS版本相同。Windows 95可以管理64MB内存,我不知道你为什么要使用48MB作为虚拟硬盘,这将会使系统性能下降。
jxnclt@public... Peter Zhu:我在Visual Basic 4.0 16位环境中使用数据感应(Dataware)的VBX网格控件(如FarPoint公司的Spread 2.5或Sheridan公司的DataGrid 1.0e),发现在执行Data1.recordset.findfirst "ID=10"时,该控件的当前行并不跳转到ID=10的那一行上去,而如果把VBX控件换成OCX控件则不存在此问题,或者在Visual Basic Pro 3.0 环境中使用以上的VBX控件,执行同样命令,也不存在问题。这是怎么回事?
李海:你所说的情况确实存在。Visual Basic在执行Data1.RecordSet.FindFirst "ID=10"后要向VBX发送一条VBM_DATA_REQUEST消息,最初,我怀疑Visual Basic没有发出这条消息,但实际情况是发出了,这一点我用VBTools v5.0的几个数据感应控制验证了。那么, 我认为可能性最大的原因是Visual Basic 4.0和3.0在内部数据结构方面不兼容,所以在Visual Basic Pro 3.0 环境中正常使用的VBX控件在4.0中不正常了。目前已经知道,两个版本在许多与VBX有关的方面不兼容,如Visual Basic 4.0内部的VBSetVariant函数就存在错误,Visual Basic 4.0在发送消息方面也同Visual Basic有所不同。Visual Basic 4.0对VBX控件和OCX控件的处理方法不一样,VBX控件是通过VB API同Visual Basic交换数据的,而OCX控件使用OLE API。如果你一定要在Visual Basic 4.0中使用VBX,只能使用一些特别的处理方法,如(以Spread 2.5为例):Data1.RecordSet.FindFirst "ID=10" Grid1.Row = Data1.RecordSet.AbsolutePosition Grid1.Col = 0 Grid1.Action = 0 * 设置Spread控制的当前行和列
ccaislin@public...:在Windows 95系统属性的设备管理窗口中,如果在子结点上连点两下,就可打开看其下面的叶结点,而在叶点上连点两下,则会弹出与其对应的属性窗口;但我在VB中使用Treeview控件,在叶结点上连点两下,却无对应的事件让我弹出对应的窗口,是我的控件没设置好还是Treeview本身的问题?我怎样才能实现这个功能?
李海:我想你需要的事件是NodeClick。与此相关的事件还有Collapse和Expand,前者是在叶节点关闭时产生,而前者在叶节点展开时产生。
Yin Cong iantel@online...:启动VB 5.0时会出现一个New Project对话框,如何去掉其中的Recent栏中过时的内容?
李海:Recent栏中的文件名来自HKEY_CURRENT_USER\Software\Microsoft\Visual Basic\5.0\RecentFiles。如图1所示,每个文件名对应一个序号。
需要注意的是如何修改该列表。直接删除某个子键会产生副作用。比如,一共有10个文件,删除其中第4个文件,那么Visual Basic 5.0将忽略列表中从第5个文件开始的所有文件。Visual
Basic在退出时,会删除RecentFiles下的所有子键,然后重新写入文件列表。这样,从第5个文件起的所有的文件名都将从Recent列表中消失。正确的修改方法是删除掉第4个文件后再用其他文件来填补这个空位。显然,手工修改太麻烦了,所以我编写了一个小程序(图2)来完成这一工作。你可以清除掉过时的文件名前的选中标志,然后按“OK”按钮完成Recent列表的更新。该软件还可以调整文件名出现在列表的顺序。你可以从这里下载这个软件。运行该程序前必需退出Visual
Basic 5.0。
一读者 (e-mail):我机器上的某些软件安装时使用了很深的目录结构。当Windows 95的Scandisk搜索到这些目录下的文件时,显示了如下错误:“在MS-DOS方式下,不能访问“某文件”,因为MS-DOS名及其所在文件夹名合起来超过66个字符”。请问如何解决这类问题?
李海:Windows 95的ScanDisk有两个版本,一个是Windows图形版本,一个是MS-DOS版本。从这条错误信息来看,你是在MS-DOS方式下或批命令中使用的ScanDisk。如果是这样,你可以从Start(开始)菜单或Explorer中调用ScanDisk,或在批命令中使用scandskw命令。两个版本的基本功能相同,但只有Windows版本可以正确地处理超过66个字符路径名。只要可能,Windows 95总是启动Windows版本的ScanDisk。从安全的角度考虑,我认为最好不要以MS-DOS方式启动Windows 95,然后运行ScanDisk。在ScanDisk中选择Advanced(高级)按钮,在对话框中有一个选项Check for invalid file names,这个选项可以避免类似的错误信息。但除非特别必要,不要修改这个选项。由于MS-DOS和Windows 3.x都有路径名不能超过66个字符的限制,所以在安装软件时要避免过深的目录。许多软件默认的安装目录名可能很长,有的包括两三级目录,比如Delphi可能建议安装目录为Program Fies\Borland\Delphi 3.0,这样很容易超过66个字符的限制,所以最好在安装时修改为Delphi3,这样可以保证同MS-DOS程序和Windows 3.x程序的兼容性。
一读者 (e-mail):是否有什么软件来跟踪某个IP信息包从源到目地地经过了哪些网关?
李海:Win95/NT提供了一系列的TCP/IP诊断工具,其中包括PING、FTP、ROUTE等。其中的TRACERT命令可以满足你的要求。这个命令是利用ICMP(Internet Control Message Protocol)来决定到目的地的路由。比如:TRACERT www.hotmail.com,可以得到如下结果:
Tracing route to www.hotmail.com [207.82.250.251] over a maximum of 30 hops: 1 615 ms 217 ms 267 ms 202.96.0.35 2 273 ms 316 ms 361 ms 202.96.0.33 3 265 ms 669 ms 279 ms 4F0-rtr2-r-1-bjbj.cn.net [202.97.16.166] 4 327 ms 263 ms 275 ms 0F0-rtr-c-1-bjbj.cn.net [202.97.2.13] 5 997 ms 1078 ms 1234 ms border7-serial3-0.Sacramento.mci.net [204.70.122 .69] 6 1084 ms 1078 ms 1434 ms core2-fddi-0.Sacramento.mci.net [204.70.164.49] 7 * 1438 ms 1257 ms core4-hssi-6.SanFrancisco.mci.net [204.70.1.233] 8 1000 ms 1115 ms 1077 ms bordercore3.SanFrancisco.mci.net [166.48.16.1] 9 1054 ms 995 ms * pb-nap-OC3-1.exodus.net [198.32.128.25] 10 1082 ms 1159 ms 1366 ms rsm-wy-a-bbone901.lan.exodus.net [209.1.217.21]第一个数是hop值,其后三列数据是到目的地的TTL(Time-To-Live)值。如果为星号,表示超时。另外,Starfish Internet Utilities 97 中包括一个叫QuickRoute的工具,它也可以完成类似的功能,是图形方式的,更便于使用。Starfish Internet Utilities 97有“Internet生存工具”的美誉。
广东中山 张存平(传真):请问用VB编程可否控制I/O口?
李海:VB没有提供直接读写I/O口的方法。所以只能借助其他语言来编写DLL,然后在VB中调用。你也,可以在这里下载编译好的DLL和例子。
如果你在Windows下使用过C/C++,那么编写这样的DLL可能没什么困难。在C语言里都包括inp和outp函数。你可以把下面这段C语言代码(32位)编译生成DLL,然后在VB中调用。
#include这种方法只能用于Windows 95,不能用于Windows NT。 如果要在Windows NT下读写I/O口,参考NTPort Library。#include /* 作用:从指定端口读入一个字节 参数:portid 端口号 返回值:读入的字节 */ int __stdcall Inport(short portid) { return inp(portid); } /* 作用:向指定端口写入一个字节 参数:portid 端口号 */ void __stdcall Outport(short portid, short byte) { outp(portid, byte); } /* 作用:从指定端口读入一个字 参数:portid 端口号 返回值:读入的字 */ int __stdcall InportW(short portid) { return inpw(portid); } /* 作用:向指定端口写入一个字节 参数:portid 端口号 */ void __stdcall OutportW(short portid, short word) { outpw(portid, (unsigned short) word); }
如果您有任何建议,请给我发电子邮件:
。
版权所有 李海,热情软件屋 1997-2006