无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 6236|回复: 19
打印 上一主题 下一主题

QBWIN做的程序 在电脑上死机的原因!

[复制链接]
跳转到指定楼层
1#
发表于 2007-7-24 23:01:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
天风做的一键恢复程序(同方HPA的哪个)在我的笔记本上运行正常,但是在另一台台式机上一直不能运行,就只有光标在闪,不能运行下去,我还以为是我电脑太老了(奔三的)的原因,后来又在一台同方机子上又碰上了,这个比较新,看来不是这个原因了,后来在一次偶然的机会当中,发现了死机的原因了,原来跟硬盘的分区有关,只要在硬盘上没有FAT分区类型的,也就是全是NTFS格式分区类型的就会死机,后来想一下就会明白了,只要是用QBWIN做的程序,每次运行时,QBWIN就会在硬盘上找一分区来做临时文件,但DOS不认识NTFS文件格式,在全NTFS文件格式下的系统中,QBWIN找不到硬盘分区来做临时文件,就卡在那儿,死机了,后来我在硬盘上划一个FAT分区,就可以运行了,我在两台机器上试验了一下,都是这样,是不是其它机器,都是这样,希望大家提一提!
2#
发表于 2007-7-24 23:34:19 | 只看该作者
QBWIN会默认在C盘生成4个临时文件,其实这是VGA 12H模式显存4个位面的内存镜像,QBWIN在使用下拉框还有菜单时就会用这文件来保存屏幕上的内容。。。但可以通过修改QBWIN生成的BAS文件来更改这几个临时文件的位置。。。
但还是不够方便,所以就扔了QBWIN。。。
反正DOS下的GUI库很多,WINSAIL,ALLEGO都很不错的说。。
回复

使用道具 举报

3#
 楼主| 发表于 2007-7-26 12:25:17 | 只看该作者
原帖由 zqlcchzql 于 2007-7-24 23:34 发表
QBWIN会默认在C盘生成4个临时文件,其实这是VGA 12H模式显存4个位面的内存镜像,QBWIN在使用下拉框还有菜单时就会用这文件来保存屏幕上的内容。。。但可以通过修改QBWIN生成的BAS文件来更改这几个临时文件的位置 ...

请教一下,怎样修改QBWIN生成的BAS文件来更改这几个临时文件的位置?
回复

使用道具 举报

4#
发表于 2007-7-26 12:44:51 | 只看该作者
ENEN,我回去翻翻以前做的程序,明天再和你说。
回复

使用道具 举报

5#
 楼主| 发表于 2007-7-26 12:50:47 | 只看该作者
原帖由 zqlcchzql 于 2007-7-26 12:44 发表
ENEN,我回去翻翻以前做的程序,明天再和你说。


谢谢,最好能将你以前的老古董贡献出来,让大家都跟你学习一下!
回复

使用道具 举报

6#
发表于 2007-7-27 11:38:49 | 只看该作者
新建二个过程,一个名叫SavScr12,是保存屏幕,另一个是ResScr12,是恢复屏幕,原理是写VGA端口,分别保存显存的4个位面,参数1是路径

SUB SavScr12 (SavePath AS STRING, BYVAL Index AS INTEGER)
DIM Loop1 AS LONG
DEF SEG = &HA000

Path$ = RTRIM$(LTRIM$(SavePath))
IF Path$ = "" THEN
   Path$ = "."
END IF
IF RIGHT$(Path$, 1) <> "\" THEN
   Path$ = Path$ + "\"
END IF
                  
FOR Loop1 = 0 TO 3
    OUT &H3CE, 4
    OUT &H3CF, Loop1
    IF Loop1 = 0 THEN
       BSAVE Path$ + "~~QB" + LTRIM$(RTRIM$(STR$(Index))) + ".~~1", 0, 38400
    END IF
    IF Loop1 = 1 THEN
       BSAVE Path$ + "~~QB" + LTRIM$(RTRIM$(STR$(Index))) + ".~~2", 0, 38400
    END IF
    IF Loop1 = 2 THEN
       BSAVE Path$ + "~~QB" + LTRIM$(RTRIM$(STR$(Index))) + ".~~3", 0, 38400
    END IF
    IF Loop1 = 3 THEN
       BSAVE Path$ + "~~QB" + LTRIM$(RTRIM$(STR$(Index))) + ".~~4", 0, 38400
    END IF
NEXT

END SUB

=========================================
SUB ResScr12 (SavePath AS STRING, BYVAL Index AS INTEGER)
DEF SEG = &HA000

Path$ = RTRIM$(LTRIM$(SavePath))
IF Path$ = "" THEN
   Path$ = "."
END IF
IF RIGHT$(Path$, 1) <> "\" THEN
   Path$ = Path$ + "\"
END IF

OUT &H3C4, 2
OUT &H3C5, 1
BLOAD Path$ + "~~QB" + LTRIM$(RTRIM$(STR$(Index))) + ".~~1"
KILL Path$ + "~~QB" + LTRIM$(RTRIM$(STR$(Index))) + ".~~1"

OUT &H3C5, 2
BLOAD Path$ + "~~QB" + LTRIM$(RTRIM$(STR$(Index))) + ".~~2"
KILL Path$ + "~~QB" + LTRIM$(RTRIM$(STR$(Index))) + ".~~2"

OUT &H3C5, 4
BLOAD Path$ + "~~QB" + LTRIM$(RTRIM$(STR$(Index))) + ".~~3"
KILL Path$ + "~~QB" + LTRIM$(RTRIM$(STR$(Index))) + ".~~3"

OUT &H3C5, 8
BLOAD Path$ + "~~QB" + LTRIM$(RTRIM$(STR$(Index))) + ".~~4"
KILL Path$ + "~~QB" + LTRIM$(RTRIM$(STR$(Index))) + ".~~4"

END SUB


==========================
然后查找源文件中的GetTx和PutTx,分别用SavScr12和ResScr12代替。。有VB基础的应该很好看明白

[ 本帖最后由 zqlcchzql 于 2007-7-27 11:40 AM 编辑 ]
回复

使用道具 举报

7#
 楼主| 发表于 2007-7-27 21:01:42 | 只看该作者
原帖由 zqlcchzql 于 2007-7-27 11:38 发表
新建二个过程,一个名叫SavScr12,是保存屏幕,另一个是ResScr12,是恢复屏幕,原理是写VGA端口,分别保存显存的4个位面,参数1是路径

SUB SavScr12 (SavePath AS STRING, BYVAL Index AS INTEGER)
DIM Loo ...



非常谢谢,我回去试一下!:victory::victory::victory:
回复

使用道具 举报

8#
 楼主| 发表于 2007-7-27 23:32:17 | 只看该作者
SUB SavScr12 (SavePath AS STRING, BYVAL Index AS INTEGER)
请教,最后一个参数INTEGER怎么用呢?能举一个例吗?
回复

使用道具 举报

9#
发表于 2007-7-28 11:48:07 | 只看该作者
一般情况下,qbwin中puttx和gettx是成对使用的,比如在显示comcobox在显示下拉框之前会调用gettx来保存屏幕,隐藏下拉框之后再用puttx来恢复屏幕,在这一对中你用
用scrvscr("z:\",1),resscr("z:\",1),这时index是1

那么在另一对puttx和gettxt中1最好就不要再用了。用2就可以了

依引类推
回复

使用道具 举报

10#
发表于 2007-7-28 12:14:13 | 只看该作者
保存一小块画面却用了整个屏幕,不是很理想
回复

使用道具 举报

11#
 楼主| 发表于 2007-7-28 12:22:04 | 只看该作者
原帖由 zqlcchzql 于 2007-7-28 11:48 发表
一般情况下,qbwin中puttx和gettx是成对使用的,比如在显示comcobox在显示下拉框之前会调用gettx来保存屏幕,隐藏下拉框之后再用puttx来恢复屏幕,在这一对中你用
用scrvscr("z:\",1),resscr("z:\",1),这时i ...


   假如我用了5对,就是SCRVSCR("Z:\",5)了?
回复

使用道具 举报

12#
发表于 2007-7-28 14:27:37 | 只看该作者
每一对数字要不一样就可以了。。。。随便是什么就成。
回复

使用道具 举报

13#
发表于 2007-7-28 16:11:46 | 只看该作者
原帖由 netwinxp 于 2007-7-28 12:14 PM 发表
保存一小块画面却用了整个屏幕,不是很理想


其实QBWIN自身的puttx和gettx和我写的过程原理是一样的,也是用BSAVE和BLOAD。。。只不过不能改路径罢了。。。。
效率在使用过程中根本感觉不到慢,因为QBWIN只在下拉列表和菜单中使用了这两个函数,BSAVE和BLOAD的速度是非常快的。
回复

使用道具 举报

14#
发表于 2007-7-28 20:36:20 | 只看该作者
看来qbwin也不是很好用啊!!
回复

使用道具 举报

15#
 楼主| 发表于 2007-7-28 21:28:03 | 只看该作者
我用了你的方法,编译通过了,使用时还是与原来的一样,我是在内存中划分出一个X盘,将路径指到X盘,SCRVSCR "X:\",1 仍然行失败!
回复

使用道具 举报

16#
发表于 2007-7-28 21:48:42 | 只看该作者
用TC的流文件读写方法可以直接写到程序所在的目录。
回复

使用道具 举报

17#
发表于 2007-7-29 11:37:15 | 只看该作者
ENEN,我装机虚拟机试试
回复

使用道具 举报

18#
发表于 2007-7-29 12:10:04 | 只看该作者
汗,我是老糊涂了。。。。。
对于这个问题只要用内存虚拟盘软件比如XMSDSK生成一个内存盘比如Z:
然后再用十六进制编辑器把生成的EXE文件中的c:替换成z:就可以用了。

那个savscr12和resscr12是为了解决以前一个客户抱怨说怎么C盘生成了一大堆垃圾文件想出来的代替函数。。。
抱歉抱歉
回复

使用道具 举报

19#
 楼主| 发表于 2007-7-29 15:59:14 | 只看该作者
原帖由 zqlcchzql 于 2007-7-29 12:10 发表
汗,我是老糊涂了。。。。。
对于这个问题只要用内存虚拟盘软件比如XMSDSK生成一个内存盘比如Z:
然后再用十六进制编辑器把生成的EXE文件中的c:替换成z:就可以用了。

那个savscr12和resscr12是为了解决以前 ...

没关系,没关系,学习么,不怕多的!按你的方法解决了全NTFS死机的问题了,而且不会有垃圾文件!谢谢了!:victory:
回复

使用道具 举报

20#
 楼主| 发表于 2007-7-29 17:57:04 | 只看该作者
原帖由 zqlcchzql 于 2007-7-24 23:34 发表
QBWIN会默认在C盘生成4个临时文件,其实这是VGA 12H模式显存4个位面的内存镜像,QBWIN在使用下拉框还有菜单时就会用这文件来保存屏幕上的内容。。。但可以通过修改QBWIN生成的BAS文件来更改这几个临时文件的位置 ...

  这样吧?如果你有时间的话,发一个话题,为大家讲一讲WINSAIL吧?详细的介绍下开发DOS界面程序,大家都想了解一下,但都不懂,当一下老师吧?怎么样?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-12-1 14:47

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表