无忧启动论坛

标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码) [打印本页]

作者: k011003179    时间: 2004-5-11 12:35
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
[UploadFile=34_2250.jpg][这个贴子最后由k011003179在 2004/06/11 11:52pm 第 4 次编辑]

这是我自己做的界面:

想拥有自己的一键恢复吗?自己编写程序!
网有很想改foxmao的一键恢复的信息,不过这样是对作者的不敬,大家倒不如自己写个,而且编写的过程也是一种学习呀!
下面我就介绍一下:
我从网站看过foxmao的一键恢复,从界面看是使用qbwin画出来的。大家不要觉得奇怪我会知道,因为我自己本身写程序,界面几乎都是用它。
我并没有看过foxmao的源代码,不过我可以做个构思,大家自己可以去编
界面看是使用qbwin画出来(qbwin的作者的使用说明有很详细的解说)
然后在Button.chick的事件中,用run的命令进行调用ghost.exe
至于,密码,其实很简单,可以用read、input的命令就可以。
好了只能说到这里,接下来的就要靠你们自己的哦!!
不知道foxmao是不是这样子的!
这是我自己做的一键恢复,在这个程序前面还加入了密码对话框!要输入密码才能执行的!


现在还要好多人给我发邮件,信息需要源码. 我已经好久不弄了. 具体的源码大家可以在第20页上找到:
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=25927&extra=&highlight=%D2%BB%BC%FC%BB%D6%B8%B4&page=20

[ 本帖最后由 k011003179 于 2009-5-21 22:43 编辑 ]
作者: ylpoplove    时间: 2004-5-11 14:32
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
谢谢楼主的无私帮助:)
无忧有你、有你这样的精神为荣,与你同为坛友我感到很高兴:)
作者: 有福同享    时间: 2004-5-11 14:45
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
问题是不会写啊!先生
作者: k011003179    时间: 2004-5-11 16:02
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
[这个贴子最后由k011003179在 2004/05/31 08:28pm 第 1 次编辑]

只需画好界面后在Button.chick的事件中,用shell的命令进行调用ghost.exe就行
作者: 88988    时间: 2004-5-11 16:17
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
强烈建议楼主说说qbwin的使用方法!!!!!!!!!!11
作者: pizigao    时间: 2004-5-11 16:27
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
[这个贴子最后由pizigao在 2004/05/11 04:33pm 第 1 次编辑]

:em02:
作者: alan123    时间: 2004-5-11 17:31
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
qbwin是什么样的?它的全称是什么名字.qbwin的使用?qbwin的软件在哪里有下载的?
作者: 88988    时间: 2004-5-11 20:04
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
http://qbwin.web165.com/
用好了说一声,祝大家早日做出自己的作品。
作者: k011003179    时间: 2004-5-11 21:14
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
  QBWIN 系统的基本运作原理:
    大家都知道QBWIN开发库的用途了,就是QB + WIN。用QB语言+窗体界面来开发软件程序。
从中,QBWIN开发系统的运作是如何实现的呢?在这里让我来剖析一下它的运作过程。
    首先,初始化系统,也就要包括用到的控件的数组变量,由于考虑到内存空间与实际使用
控件的多少,所以在开始就应该定义你开发的程序将最大限量使用到控件的数量。因为一般
一个窗体及控件在一个界面跳到另一窗体界面时,只有少部分的数据需要保留待处理。所以
当在一个窗体跳到另一窗体时,所有控件的变量值都归初始化状态,以便给另一窗体赋值使用
而需要保留的一些数据用户要用一个全局变量保存下来,这样控件的变量就可循环再用而无需
增加内存空间的占用。这个也是QBWIN能处理多个窗体界面都没有出现内存不足的原因。
    第2步,初始化控件等常用变量后,程序继续执行SUB SystemInit (CFont AS INTEGER)子
程序,这个子程序包括初始化屏幕与调色板的显示方式、检查中文字库文件、检查输入法码表
文件、取得临时文件位置(即在程序运行时有时需要用到临时文件保存一些如图像等数据),
一般由C盘开始,如果C不能作为临时存储的介质,那么就尝试D、E、F....。读取并初始化鼠标
图形数据及状态、读取英文字体数据(由于考虑到一般程序英文字体的显示比中文频繁,所以
系统捆绑英文字库,加快字体的显示速度。如果程序无需用到中文字,那么库就不会去检索中文字
库文件,子程序里有一个CFont参数可让用户决定程序是否用到中文字库,具体如下:
  CFont = 0 时: 不使用中文字库与输入法文件
  CFont = 1 时: 必须要中文字库文件,否则程序不能运行
  CFont =-1 时: 程序作为英文版,如果系统找到有中文字库与输入法文件可使用,否则也可以不使用
    第3步,系统都初始化完后,跟着下来就是控件变量数据的定义,这点就类似于我们在VB或
其它可视化环境里的控件属性栏的定义过程。首先系统会先让用户定义桌面:
    DrawDesktop 提示行开关,桌面颜色,提示行字体颜色,背景色,提示文字$
    提示行开关:0 到 2
    桌面颜色:0 - 15,如果是小于0的负数即跳过,不定义桌面颜色。
    这里还有一个IF ExitWin<2 then DrawDesktop .....
    当用户要关闭当前窗体或调到另一窗体时,必需将ExitWin赋<>0的值,当你关闭窗体给
ExitWin赋值时就有一个注意的地方,因为ExitWin的值会影响屏幕的效果。
    当 ExitWin = 0: 没有关闭窗体,循环执行控件及事件子程序的处理
    当 ExitWin = 1: 关闭窗体退出循环处理,当关闭时会触发C.FormUnload 处理子程序。
参数QBCancel是决定是否确定关闭的关键。如果关闭当前窗体是主窗体,而且Wins没有定义为
调用的另一窗体序号,那么就退出程序。否则调到另一窗体,而且执行桌面重画。
    当 ExitWin = 2: 同ExitWin = 1,但不再执行重画桌面,看要求会有不同的效果。
    跟着就是定义窗体控件数据:
    当Wins的序号不同时:
          RESTORE WIN00
WIN00:
    也要作相对的更改.
LoadWindow X,Y,W,H,Font,BC,Box,TC,Caption
    读入一个窗体:包括初始化所有控件变量,即归0。执行库内部子程序DrawWindow画出一个基本窗体。
继续读入各控件的属性值:
      'LoadMenu   '读入菜单   
      'LoadFrame 0   '读入框架  是否读入到变量
      'LoadLabel 0, 0    '读入标签  是否读入到变量, 背景框
      'LoadText    '读入文本框
      'LoadOption    '读入单选按钮
      'LoadCheck     '读入复选按钮
      'LoadButton 0     '读入命令按钮  背景框
      'LoadList     '读入列表框
      'LoadCombo     '读入下拉式列表框
到这里,一个用户窗体界面基本成形了,最重要的就是ProcessLoop '过程循环处理,这个子程序是
整个系统的中心。它就是实现整体窗体所有控件的事件触发处理的判断及自动化刷新的主过程。
这个子程序是一段源代码程序,方便用户需要时扩充或修改功能。
    过程是这样的:
DO   
    GetMouse Mouse      '取当前鼠标状态数据
    GetKey KeyCode      '取当前键盘状态数据(包括输入法处理)
    C.Timer RecWins, KeyCode      '每处理循环一次都执行该事件子程序
    按钮控件处理
        如果属性 Enabled <> REnabled 时控件自动刷新处理
          当某按钮被单击就会触发事件子程序 SUB C.ButtonClick (NWin, Inx)
          当鼠标在按钮范围内、离开按钮范围、被按下、弹回时触发事件 SUB C.ButtonState (NWin, Inx, State)
    菜单处理
          当菜单项目被选中时触发 SUB C.MenuClick (NWin, MInx, Inx)
    复选按钮处理
        当属性 Value <> RValue or Enabled <> REnalbed 时自动刷新处理
          当复选按钮被单击或复选值Value被刷新时触发事件 SUB C.CheckClick (NWin, Inx)
    下拉列表处理
        当属性 Enabled <> REnalbed 时自动刷新处理
          当下列表被选定后触发事件 SUB C.ComboClick (NWin, Inx)
    框架范围处理
          当框架被鼠标单击时触发事件 SUB C.FrameClick (NWin, Inx, Button)
          双击时 SUB C.FrameDblClick (NWin, Inx)
          鼠标进入框架定义的范围或走出范围时触发事件 SUB C.FrameMouseInOut (NWin, Inx, State)
          当鼠标的坐标改变或鼠标按键状态改变时触发事件 SUB C.FrameMouseState (NWin, Inx, X, Y, Button)
    列表处理
        当属性 Count <> RCount or Index <> RIndex or ScInx <> RScInx 时自动刷新处理
          列表里的项目被单击或选中时触发 SUB C.ListClick (NWin, Inx)
          项目被双击时触发 SUB C.ListDblClick (NWin, Inx)
          当列表里的项目索引Index、滚动范围ScInx、项目数量Count、滚动条等刷新时触发
          SUB C.ListChange (NWin, Inx, CType)
          当在列表里有键盘信号时触发 SUB C.ListKeyPress (NWin, Inx, KeyCode)
    单选按钮处理
        当属性 OptBValue(GInx) <> OpBRValue(GInx) 即选定项目刷新 or Enabled <> REnabled 时刷新显示处理
          当单击或OptBValue(GInx)项目值被改变时触发 SUB C.OptionClick (NWin, GInx, Inx)
    文本框输入处理
        当Enabled <> REnabled 或输入处理时自动刷新显示处理
          当目标在文本框且有键盘信号时触发 SUB C.TextKeyPress (NWin, Inx, KeyCode)
    判断ExitWin,即关闭窗体判断处理
LOOP  
整个循环处理过程大概是这样的。

作者: k011003179    时间: 2004-5-11 21:15
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
----------------- 最新QBWIN使用教程 --------------------
DECLARE SUB SystemInit (CFont AS INTEGER)      '系统初始化,程序执行前必须要调用该内部子程序
  CFont = 0 时: 不使用中文字库与输入法文件
  CFont = 1 时: 必须要中文字库文件,否则程序不能运行
  CFont =-1 时: 程序作为英文版,如果系统找到有中文字库与输入法文件可使用,否则也可以不使用
DECLARE SUB ScreenInit ()               '屏幕调色板初始化
DECLARE SUB UnLoadMe ()                 '退出系统,退出系统时必须执行的子程序,他会处理一些无用的临时文件
DECLARE SUB CheckDoWord (Loca%, S$)     '整字识别处理
  Loca: 显示字符串的偏移位置
  S$  : 操作目标$ / 返回$
  此子程序解决了中文字的乱码显示问题, 如文本框.
DECLARE SUB GetTempfile (BN AS INTEGER, TmpFileName$)          '给出临时文件子程序
  当用户需要用到临时文件来保存一些内容,这时就可用此子程序来得到最适合的临时文件名。
  由于各机器的环境不同,临时文件的位置也不同,但这个用户不用去干预,QBWIN系统搞定。
  BN:序号,与GetTx、PutTx有关,BN最好不与它们有冲突。
  TmpFileName$:系统分配出来的临时文件名。
DECLARE SUB SetMouseCursor (CursorNo)        '设置鼠标指示器图形
    CursorNo: 指针图形序号
    0:为默认 1:文本输入 2:沙漏 3:手指 4:后的为用户自定义鼠标图形,当然也可以修改0-3的图形
DECLARE SUB MouseINT (m0, m1, m2, m3)   '初始化鼠标状态\鼠标的其它功能调用
     m0,m1,m2,m3 分别是 AX,BX,CX,DX 的中断向量
DECLARE SUB MouseDef (X, Y)      '定义鼠标指示器XY坐标位置
DECLARE SUB MouseHide ()         '鼠标指示器隐藏
DECLARE SUB MouseShow ()         '鼠标指示器显示
DECLARE SUB DisplayMenu (MenuNo, X, Y)       '显示菜单
    MenuNo: 菜单序号    X: X坐标    Y: Y坐标
    当X为-1时表示在鼠标指针位置显示菜单(可做右键功能菜单)
DECLARE SUB MsgBox (KeyB$, Titl$, MSG$)      '信息对话框
    KeyB$: 按钮组合$/返回$   Titl$: 标题$    MSG$: 信息$
    "O"-确定      "Y"-是(Y)     "N"-否(N)     "C"-取消
    "A"-中断(A)   "R"-重试(R)   "I"-忽略(I)   其它可以自行扩充
    当你显示的信息要分行时, 请在想分行的字符前加上一个[`]字符,就键盘的ESC键对下的~ 键
    例如想定义一个退出确认对话框       语句如下:
    ------------------------------------------------------------------------
      KB$ = "OC"   '定义对话框按钮显示为 [确定] [取消] .
      Msgbox KB$, "退出", "是否确定要退出?"
      IF KB$="O" THEN [要退出的语句]      '当返回[确定]按钮时, 执行退出.
      [继续执行的语句]
    ------------------------------------------------------------------------
    *** 这个子程序不但是个消息对话框, 它同时也是个输入对话框.
    当KeyB$开头一个字符为"@"时变为输入对话框, 后面跟的是最多可输入的字符数.
    Titl$: 仍然为标题$, 如果为 "" 时会默认为 "输入"
    Msg$: 预设$/返回输入后的$
    例如想修改某一变量的$, 这样它就大派用场了. 如:
    ------------------------------------------------------------------------
    DefEdit$ = "开发程序"     
    KB$="@40"         '表示改为输入对话框, 并设置最多能输入40个字符.
    Msgbox KB$, "修改为", DefEdit$
    IF KB$="O" THEN
       [确定修改后编写的语句]
    ELSE
       [取消修改后编写的语句]
    ENDIF
    ------------------------------------------------------------------------
    KB$返回的按钮值是"O"[确定]  "C"[取消]
DECLARE SUB SetCombo (Inx, InxNo)            '设置下拉式列表项目
    Inx: 下拉列表序号   InxNo: 要设置的第N个列表项目
DECLARE SUB ListAdd (Inx, InsNo, Item$)      '列表添加项目
    在序号为Inx的列表中的第InsNo个项目前插入Item$项目
    当InsNo插入位置为 -1时即追加
DECLARE SUB ListRemove (Inx, RemNo)          '列表移除项目
    在序号为Inx的列表中移除第RemNo个项目
              如果删除位置RemNo为-1时, 即删除最后一项
                                 -2时, 即全部删除
DECLARE SUB GetKey (KeyCode)    '给出键盘状态信息,同时也可以控制输入法栏
    切换输入法的热键是 Ctrl + F1, 你也可以用 GetKey 内部子程序对输入法进行
切换, 使用如下:
KeyCode = 0: GetKey KeyCode     '正常的读取键盘按键值, KeyCode: 返回的键盘值
GetKey -9    '屏蔽掉输入法 (如果你写的软件不希望按 Ctrl + F1 切换输入法时可这样做)
GetKey -8    '取消屏蔽(与上面的相反)
GetKey -1     '打开输入法底栏
GetKey -2     '关闭输入法底栏
GetKey -5     '返回输入法底栏的打开状态
GetKey 350    '打开/关闭输入法切换
DECLARE SUB GetMouse (Mouse AS ANY)            '给出鼠标状态信息
    TYPE MouseState
        X AS INTEGER    当前X坐标
        Y AS INTEGER    当前Y坐标
       RX AS INTEGER    上一个X坐标
       RY AS INTEGER    上一个Y坐标
        K AS INTEGER    当前按钮状态  1:左  2:右  3:两键同时
       RK AS INTEGER    上一个按钮状态
       DC AS INTEGER    当前左键双击状态
    END TYPE
DECLARE SUB GetTX (X, Y, X2, Y2, BN)        '保存屏幕图形矩阵
    X,Y:无效  X2,Y2:无效
    BN:保存序号   
    0:被系统保留作为常用。
    1到255:即可保存255个全屏内容,需使用临时文件,无须用户干预。
DECLARE SUB PutTX (X, Y, BN)                  '显示保存图形矩阵
    X,Y:无效
    BN:保存时的序号   0:保留   1到255:即用户GetTX时的序号

DECLARE SUB FMNum (Num, Length, Repl$, Num$)   '把数字转换为字符
    Num:待转换的数值  Length:转换字符后的字符长度
    Repl$:替换空白的位置    Num$:返回串
DECLARE SUB DefChr (DChr$, Length)              '定义字符串长度
    DChr$:欲定义串/返回串      Length:定义的长度
DECLARE SUB DelChr (DChr$, Start, Num)       '删除指定位置后的若干个字符
    DChr$:定义/返回的字符串    Start:删除的位置   Num:删除字符数
DECLARE SUB InsChr (DChr$, Position, INS$)    '从指定位置插入字符串
    DChr$:定义/返回的字符串   Position:插入的位置   INS$:插入串
DECLARE SUB Get3DBox (X, Y, W, H, C1, C2, BC)    '绘立体矩阵
DECLARE SUB PrintChr (X, Y, W, H, FC, BC, TXT$) '显示字符串
    X,Y:坐标  W,H:字体宽高  FC:字符颜色  BC:字符背景色  TXT$:欲显示的字符串
DECLARE SUB Get3DCmd (X, Y, W, H, BC, Mode, Win AS ANY)   显示框架风格
    X,Y:窗体内坐标  W,H:宽高  BC:背景色0-15,为负时透明。
    Mode:风格(0-10),当负数时相对多一黑边
    Win:窗体类型(可不变)照输入"Win"
DECLARE SUB GotFocus (V, X, Y, W, H, Mouse AS ANY, Win AS ANY)
    检测鼠标位置是否在 X,Y:窗体相对坐标  W,H:矩阵宽高 内
    V:返回值(0和-1)
DECLARE SUB GotPrint (V, X, Y, W, H, Win AS ANY)
    检测鼠标图形是否在 X,Y:窗体相对坐标  W,H:矩阵宽高 上
    V:返回值(0和-1)
DECLARE SUB GetCursorBinpicData (Cursors AS STRING, BinPics AS STRING)
    返回鼠标图形Cursors数据串与点阵图形BinPic数据串
DECLARE SUB SetCursorBinpicData (Cursors AS STRING, BinPics AS STRING)
    设置鼠标图形Cursors数据串与点阵图形BinPic数据串
    使用这两个子程序可以扩充或更改鼠标图形与点阵图形.

'各控件的事件处理子程序
  NWin:当前调用的窗口序号   Inx:该控件序号   KeyCode:键盘状态值
  Button:鼠标按钮状态  MInx:主菜单序号   GInx:单选组序号
DECLARE SUB C.FormUnload (NWin, QBCancel)           '窗体关闭时触发
DECLARE SUB C.ButtonClick (NWin, Inx)               '按钮单击
DECLARE SUB C.ButtonState (NWin, Inx, State)        '按钮状态
DECLARE SUB C.CheckClick (NWin, Inx)                '复选按钮单击
DECLARE SUB C.ComboClick (NWin, Inx)                '下拉式列表单击
DECLARE SUB C.ListClick (NWin, Inx)                 '列表单击
DECLARE SUB C.ListDblClick (NWin, Inx)              '列表双击
DECLARE SUB C.ListKeyPress (NWin, Inx, KeyCode)     '列表按键
DECLARE SUB C.ListChange (NWin, Inx, CType)         '当列表的索引项目、滚动、项目数量被改变时触发
DECLARE SUB C.MenuClick (NWin, MInx, Inx)           '菜单单击
DECLARE SUB C.OptionClick (NWin, GInx, Inx)         '单选按钮单击
DECLARE SUB C.FrameClick (NWin, Inx, Button)        '框架单击
DECLARE SUB C.FrameDblClick (NWin, Inx)             '框架双击
DECLARE SUB C.FrameMouseState (NWin, Inx, X, Y, Button)      '当在框架范围内的鼠标坐标、鼠标按键改变被触发
DECLARE SUB C.FrameMouseInOut (NWin, Inx, State)             '当鼠标进入、离开框架范围时被触发
DECLARE SUB C.TextKeyPress (NWin, Inx, KeyCode)     '文本框按键
DECLARE SUB C.Timer (NWin, KeyCode)                 '过程处理事件
'读入控件子程序
DECLARE SUB LoadWindow (X, Y, W, H, Font, BC, Box, TC, T$)
    读入一个窗体
    X,Y:屏幕绝对坐标位置   X为-1时窗体水平居中  Y为-1时窗体上下居中
    W,H:窗体宽高
    Font: 标题字体 = 字体颜色(0-16)*100 + 字型(0-3)*10 + 字模(0-8)
    BC:窗体颜色 (0-15),负数时透明
    Box:关闭按钮选项  -2:不画窗体(全屏方式)  -1:显示并激活  0:显示但禁用  1:隐藏并禁用
    TC:标题栏 = 标题栏模式(0-2)*100 + 标题栏颜色(0-15)
    T$:标题
DECLARE SUB LoadButton (Cmd)
DECLARE SUB LoadCheck ()
DECLARE SUB LoadCombo ()
DECLARE SUB LoadLabel (Memo, Cmd)
DECLARE SUB LoadList ()
DECLARE SUB LoadMenu ()
DECLARE SUB LoadOption ()
DECLARE SUB LoadFrame (Memo)
DECLARE SUB LoadText ()

--------------------------- 控件说明 -----------------------------
           控件     控件名
窗口控件 Windows > WIN.属性
属性说明:  
  X: X坐标       -1: 向中间对齐
  Y: Y坐标           同上
  W: 宽度
  H: 高度
BC: 背景色      
变量: Wins: 调用窗口序号
      ExitWin: 退出当前窗口
        =0: 执行过程循环(窗口运行时)
        =1: 退出当前窗口, 若调用其它窗口时重画背景
        =2: 退出当前窗口, 若调用其它窗口时保留原来背景
菜单控件 MenuBox > Menu(菜单,项目).属性
属性说明:  
Enabled: 是否激活
   Value: 选择(-1:打勾  0:无  1:箭头), 菜单项目字体:(字型(0-3)*10 + 字模(0-8))*10
          对于主菜单项目该值无意义,
          而它的值决定的是该项主菜单项目的光带颜色(0-16).0:默认    1-16表示颜色0-15
         
变量: SumMMenu: 菜单总数
      SumMenu(菜单): 菜单项目总数
      MenuCap(菜单, 项目): 标题$   当标题$以"&"开关,后面跟的是颜色号(0-15),这样就成了颜色条
      MenuHotkey(菜单): 热键值     -1=无
标签控件 LabelBox > Label(序号).属性
属性说明:  
     X: X坐标
     Y: Y坐标
    BW: 显示区字符数  0:自动
    FC: 字体颜色
    BC: 背景色   -1:为透明
    FW: 字宽
    FH: 字高
    FM: 字型模式 = 颜色号(0-16)*100 + 字型(0-3)*10 + 字模(0-8)
Style: 显示风格      0:左对齐  1:右对齐
变量: LabelCap(序号): 标签标题$
      SumLabel: 序号总数
框架控件 FrameBox > Frame(序号).属性
属性说明:  
  X: X坐标
  Y: Y坐标
  W: 宽度
  H: 高度
变量: SumFrame: 序号总数
文本控件 TextBox > Text(序号).属性
属性说明:  
        X: X坐标
        Y: Y坐标
       BW: 可视区字符数
Password: 0:正常字符显示   -1:*号密码显示   为正数时=字型(1-3)
   MaxLen: 最多输入字符数   0:禁止输入任何字符
       FC: = 输入框背景(0-16)*100 + 字体颜色(0-15)
  Enabled: 当前激活状态
REnabled: 上次激活状态
   Hotkey: 热键值  -1=无
      G3D: 是否立体效果  -1:立体  0:平面框  1:下拉列表支缓  2:无边框
    Start: 显示的区域
   Locate: 当前光标位置
变量: TextTxt(序号): 输入的文本$
      SumText: 序号总数
全程变量:
      CutBoard: 文本框剪贴板缓冲$
编辑键说明: Ctrl+Del: 剪切   键值=403
            Ctrl+Ins: 粘贴   键值=402
            Ctrl+C  : 复制   键值=3
            Home    : 跳到最前
            End     : 跳到最后
            Tab     : 跳到下一个文本框
            Del     : 删除光标后一个字符
           Backspace: 删除光标前一个字符
单选控件 OptionBox > OptB(组号,项目号).属性
属性说明:  
        X: X坐标
        Y: Y坐标
  Enabled: 当前激活状态
REnabled: 上次激活状态
   Hotkey: 热键值    -1=无
变量: OptBValue(组号): 选择项目值
      OptBRValue(组号): 上一次选择项目值
      OptBCap(组号,项目号): 标题$
      SumOptG: 总组数
      SumOptI(组号): 总项目数
复选控件 CheckBox > Check(序号).属性
属性说明:  
        X: X坐标
        Y: Y坐标
  Enabled: 当前激活状态
REnabled: 上次激活状态
    Value: 当前选择状态
   RValue: 上次选择状态
   Hotkey: 热键值     -1=无
变量: CheckCap(序号): 标题$
      SumCheck: 序号总数
按钮控件 ButtonBox > Button(序号).属性
属性说明:  
        X: X坐标
        Y: Y坐标
        W: 宽度
        H: 高度
       FC: = 按钮模式(0-1)*100 + 字体颜色(0-15)
           按钮模式0:普通按钮     1:浮动式按钮
       FW: 字型模式 = 颜色号(0-16)*100 + 字型(0-3)*10 + 字模(0-8)
       FH: 字高
  Enabled: 当前激活状态
REnabled: 上次激活状态
   Hotkey: 热键值    -1=无
变量: ButtonCap(序号): 标题$
      SumButton: 序号总数
列表控件 ListBox > ListB(序号).属性
属性说明:  
      X: X坐标
      Y: Y坐标
     BW: 字符数     当BW=0时, 该控件会作为垂直的滚动条
    Col: 列表列数
    Loc: 项目显示偏移位置   (一般为0不偏移)
     BH: 行数
  Index: 索引值
RIndex:
  ScInx: 滚动值
RScInx:
  Count: 项目总数
RCount:
Hotkey: 热键值  -1:无   -2:隐藏列表选择光带   -3:隐藏列表内容
    G3D: 是否立体效果  -1:立体  0:平面框   1:无边框
变量: ListI(序号,项目号): 项目标题$
      当项目标题$的第一个字符为CHR$(255)时,定为颜色条项目.CHR$(255)后面跟颜色代码.如CHR$(255)+"12"
      SumList: 序号总数
配合子程序: ListAdd (序号,插入位置,项目$) 如果插入位置为-1时,即追加
            ListRemove (序号,删除位置)
              如果删除位置为-1时,即从最后删除
                            -2时,即全部删除
下拉式列表控件 ComboBox > Combo(序号).属性
属性说明:  
        X: X坐标
        Y: Y坐标
       BW: 字符数
      Col: 列表列数
  Enabled: 当前激活状态
REnabled: 上次激活状态
      G3D: 是否立体效果  -1:立体  0:平面框  1:与文本框支缓配合使用可成为可  -2:无边框
                         -3:隐藏              编辑式下拉列表
变量: ComboTxt(序号): 标题$  当标题$的第一个字符为CHR$(255)时,定为颜色条.
      SumCombo: 序号总数
配合子程序: SetCombo (序号,索引值)

------------------------ 其它重点技巧问题补充 --------------------
    该开发控件是半自动化编程环境, 它基本上已经包含了控件的一般自动化更新效
果, 无需开发者去做一些显示效果的过程, 在自动更新过程中不会破坏你的视窗, 所
有效果以动画式完成. 界面稳定, 友好. 让你很轻松地编写自己的程序.
    自动化更新是有条件的, 但当开发库无能为力帮助你自动更新控件显示时, 怎么
办呢? 很难免就会考虑到这个问题. 这个问题就是"半"自动化的原因, 当超出了开发
包的自动化"条件"时, 就需要您写一句更新命令了. 放心, 那可只是一句赋值语句而
以. 原理上是可以编写一个全自动化控件的, 但由于内存和其它等等其它限制的实
际问题,只好考虑常用的基本功能以得出最优化最简洁的开发包. 对于开发程序,本人
会考虑到开发者的需要而不断的完善. 所以希望大家在使用中如有其它意见和建议,
请与我联系.
****** 各控件的自动化条件(说明)如下 ******
以下的[自动化属性]的属性变量值一旦改变开发程序会自动更新效果
以下的[人工更新属性]的属性变量值由开发者编写赋值.

           控件名  自动化属性           人工更新属性(条件)
标签控件   Label   LabelCap(I)          LabelRCap(I)<>LabelCap(I)时
文本控件   Text    Text(I).Enabled      Text(I).REnabled<>Text(I).Enabled时
单选控件   OptB    OptB(M,I).Enabled    OptB(M,I).REnabled<>OptB(M,I).Enabled
                   OptBValue(M)         OptBRValue(M)<>OptBValue(M)时
复选控件   Check   Check(I).Enabled     Check(I).REnabled<>Check(I).Enabled
                   Check(I).Value       Check(I).Value<>Check(I).RValue时
按钮控件   Button  Button(I).Enabled    Button(I).REnabled<>Button(I).Enabled
列表控件   ListB   ListB(I).Index       ListB(I).RIndex<>ListB(I).Index时
                   ListB(I).ScInx       ListB(I).RScInx<>ListB(I).ScInx时
                   ListB(I).Count       ListB(I).RCount<>ListB(I).Count时
           注意: 当使用子程序 ListAdd 与 ListRemove 时也会自动更新
下拉式列表控件
           Combo     Combo(I).Enabled     Combo(I).REnabled<>Combo(I).Enabled
           注意: 当使用子程序 SetCombo 时自动更新
-------------------------------------------------------------------------------
    实际上的使用中, 以上的自动化属性其实都已经足够了. 但有时您想当单击列表
1的时候(假设读入了2个列表, 现在想对列表1操作), 输入框同时能编辑列表被选定的
那一项的内容. 于是您就在事件发生子程序 C.ListClick 中加入语句如下:
SUB C.ListClick (NWin, Inx)
  Sel = NWin * 100 + Inx
  SELECT CASE Sel
  CASE 101:                    '假设当前窗口序号为1
    TextTXT(0) = ListI( 1, ListB(1).Index)      '假设是第1个输入框
    [ Text(0).REnabled = -2 ]      '这里=-2是保证了不与0或-1的值相等
  END SELECT
END SUB
结果: 假如没有编写 [] 里的一条语句, 输入框是无法更新的.
技巧: 用这句更新的语句原理, 可以对想更新控件的颜色值、标题等等进行半自动化
    更新.

作者: 88988    时间: 2004-5-11 21:33
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
谢谢楼主的无私帮助,真是太好了,再问几个问题:
            1。关于 button click事件如何使用。
            2。如何把用QBWIN画好的图加入到QB程序中
           3。怎样生成EXE文件。
想信这也是许多人要问的问题。。。。。。。。。
作者: k011003179    时间: 2004-5-11 21:41
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
下面引用由889882004/05/11 09:33pm 发表的内容:
谢谢楼主的无私帮助,真是太好了,再问几个问题:
            1。关于 button click事件如何使用。
            2。如何把用QBWIN画好的图加入到QB程序中
           3。怎样生成EXE文件。
...
1.关于 button click事件,可以这样,在CASE 1中添加
   
SUB C.ButtonClick (NWin, Inx)
  Sel = NWin * 100 + Inx
  SELECT CASE Sel
    CASE 1:
      KB$ = "OC"
      MsgBox KB$, "确定", "您确定要备份C盘吗?"
      IF KB$ = "O" THEN RUN "ghost.exe"
END
2.可以用qbwin自带的软件MAKEBAS.EXE,把图片的代码加入.bas文件中
3.至于怎样生成exe文件,我想学过qb的人都知道,要用quick basic 7或vb for dos就可以了

作者: 88988    时间: 2004-5-11 22:30
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
Quick Basic 7.1哪里有下呀?找了半天没有呀!!!!!!!!!
作者: 阿文    时间: 2004-5-11 22:59
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
我还以为是C语言写的呢?
是我眼浊了!
不过Turbo C++ 也可以达到这个效果,我也写了一个,本机中可以运行,有一些机子不行,可能是显示的问题。。。
作者: k011003179    时间: 2004-5-11 23:06
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
下面引用由889882004/05/11 10:30pm 发表的内容:
Quick Basic 7.1哪里有下呀?找了半天没有呀!!!!!!!!!
多搜索一下吧,我也忘了是那下载的
作者: 88988    时间: 2004-5-11 23:48
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
为什么在QFWIN中的下拉列表我已经设定了下拉列表的列数,可就是不显示.那我如何给下拉列表填加文字加以修改呀?
不有你那张图做得不错可不可以上传源代码呀?
作者: k011003179    时间: 2004-5-12 00:22
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
关于设定了下拉列表的列数和给下拉列表填加文字加以修改,你只要运行qwshell.exe进行画图就可以了,里面可以选择下拉列表的列数和给下拉列表填加文字
作者: pizigao    时间: 2004-5-12 08:18
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
好文章!学习!
作者: 浪客游侠    时间: 2004-5-12 11:03
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
晕死我了,那么多,好麻烦的呀,有没有简单一点的啊,看的我的眼都红了啊
作者: crshen    时间: 2004-5-12 12:04
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
[这个贴子最后由crshen在 2004/05/17 03:46pm 第 1 次编辑]

我没学过Basic,不过看了下VBDos的帮助,好像Run命令不支持命令行参数,是不是要另外编批处理文件(备份和恢复各一个),再调用它。这样的话,要多出好几个文件(包括热启动程序),没有C语言的spawnl()函数简洁,但用C编windows界面实在太累了。
void restart() /*C语言内联汇编实现热启动*/
{
    asm MOV AX,0040H
    asm PUSH AX
    asm POP DS
    asm MOV AX,1234H
    asm MOV SI,0072H
    asm MOV[SI],AX
    asm MOV AX,0FFFFH
    asm PUSH AX
    asm MOV AX,0000H
    asm PUSH AX
    asm RETF
}
case '1' : /*备份*/
        result=spawnl(P_WAIT,"ghost.exe"," -clone,mode=pdump,src=1:1,dst=c:\system.gho","-fx","-sure","-rb" );
        if(result==-1)
        perror("任务没有完成,请重新启动系统");
        break ;
        
        case '2' : /*恢复*/
        result=spawnl(P_WAIT,"ghost.exe"," -clone,mode=pload,src=c:\system.gho:1,dst=1:1","-fx","-sure","-rb" );
        if(result==-1)
        perror("任务没有完成,请重新启动系统");
        break ;
下面的链接可实现多系统备份

http://bbs.wuyou.net/cgi-bin/top ... ;start=60&show=
作者: fei    时间: 2004-5-12 12:25
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
下面引用由889882004/05/11 10:30pm 发表的内容:
Quick Basic 7.1哪里有下呀?找了半天没有呀!!!!!!!!!
地址
http://bjzx.sdedu.net/Soft_Show.asp?SoftID=5
作者: crshen    时间: 2004-5-12 12:38
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
下载了一键恢复4.3版,解压出其中的setup.zip,密码为lisa1207(不要问我怎么得到的哦),将setup.exe用upx解压,查看后发现的确为QBWin编写(有'QBWIN.FNT' not found!字样),“pqmagic /cmd=2g.pqs”,“boot.exe /Ff10.bin /Mf10.scr /s”均为带参数运行,不知用QB如何实现,请熟悉Basic的人指点一下,不胜感激!
作者: 开心狗    时间: 2004-5-12 13:02
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
shell(命令行)
作者: crshen    时间: 2004-5-12 13:08
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
下面引用由开心狗2004/05/12 01:02pm 发表的内容:
shell(命令行)
谢谢指点!

作者: 88988    时间: 2004-5-12 13:29
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
谢谢"fei"兄,我下了。
作者: 88988    时间: 2004-5-12 13:48
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
下面引用由crshen2004/05/12 12:38pm 发表的内容:
下载了一键恢复4.3版,解压出其中的setup.zip,密码为lisa1207(不要问我怎么得到的哦),将setup.exe用upx解压,查看后发现的确为QBWin编写(有'QBWIN.FNT' not found!字样),“pqmagic /cmd=2g.pqs”,“boot ...
其中将setup.exe用upx解压,
不知是什么意思, SETUP文件如何解压,UPX又是做什么用的。请说明。

作者: crshen    时间: 2004-5-12 14:08
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
话音未落,那边4.33版就出来了,体积大到超过一个优盘上的WIN98。
还是自己做一个合用!
作者: 张三丰    时间: 2004-5-12 16:48
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
DEFINT A-Z
''-------------------------------------------------------------------
''定义各控件最多可用的数目:
''** 依控件使用的数目进行相对的修改, 节省内存容量
CONST MaxButton = 10, MaxCheck = 5, MaxOptG = 2, MaxOptI = 5
'' 按钮 复选按钮 单选按钮(组数),(每组项目数)
CONST MaxFrame = 5, MaxList = 1, MaxListItem = 20, MaxText = 5
'' 框架 列表框 , 每一列表项目数 文本框
CONST MaxCombo = 5, MaxLabel = 5, MaxMainMenu = 5, MaxMenuItem = 10
'' 下拉式列表 标签 菜单 菜单项目
CONST MaxPercent = 0
''** 依你所需要的列表滚动速度进行设置(-1到10)
CONST ListScrollSpeed = 1 ''列表屏幕滚动速度(-1最快)
''$INCLUDE: ''..\qbwin\qbwin.BI''
''$INCLUDE: ''..\qbwin\Qbwin.DAT''
SystemInit 1 ''系统初始化
''0:不使用中文字库与输入法文件
''1:必须要中文字库文件(QBWIN.FNT),否则程序不能运行
''-1:如果程序找到有中文字库与输入法文件时可以使用,可以不使用

''定义及初始化用户变量区域 ----------------------------

''-----------------------------------------------------

DO
''桌面定义
''格式: DrawDesktop 提示行开关,桌面颜色,提示行字体颜色,背景色,提示文字$
IF ExitWin < 2 THEN DrawDesktop 2, 3, 0, 7, "按 Ctrl+F1 键打开/关闭输入法"
''各表单控件读入区域, 读入各种控件之间用 [=] 表示该种控件读完
SELECT CASE Wins
CASE 0:
''读入窗口
''格式: LoadWindow X,Y,W,H,Font,BC,Box,TC,Caption
LoadWindow -1, -1, 530, 380, 1125, 7, -1, 1, "实例源程序"
''说明:
'' X: X坐标 -1: 向中间对齐
'' Y: Y坐标 同上
'' W: 宽度
'' H: 高度
''Font: 字型 (0-5)
'' BC: 背景色(0-15)
'' Box: 0:禁止关闭按钮 -1:可用关闭按钮 1:屏蔽关闭按钮
'' TC: 标题栏颜色
''Caption: 窗口标题
''变量: Wins: 调用窗口序号
'' ExitWin: 退出当前窗口
'' =0: 执行过程循环(窗口运行时)
'' =1: 退出当前窗口, 若调用其它窗口时重画背景
'' =2: 退出当前窗口, 若调用其它窗口时保留原来背景
RESTORE WIN00
WIN00:
''热键值: Alt+ F1=360 1=376 Q=272 A=286 Z=300
LoadMenu ''读入菜单
''格式: DATA [-,Hotkey,] Enabled,Value,Caption []里的参数为分组用
DATA -,289,4,0,文件(F)
''主菜单, 热键为Alt+F, 键值为289
DATA 1,100,"显示(1)"
DATA 1,0,激活/禁用<实例>菜单(2)
DATA 1,0,
''标题为空时, 为阻隔线
DATA 1,0,退出(X)
DATA -,290,0,5,G.实例
''主菜单, 热键为Alt+G, 键值为290
DATA 1,-1,"1.激活文本输入框"
''复选式
DATA 1,0,
DATA 1,1,A.激活下拉列表
DATA 1,0,B.禁用下拉列表
''单选式
DATA -,-1,1,1,
DATA 1,0,"&1 "
DATA 1,0,&2
DATA 1,0,&3
DATA 1,0,&4
DATA 1,0,&5
DATA 1,0,&6
DATA =
SumMMenu = SumMMenu - 1 ''隐藏鼠标右键菜单
''表示菜单控件读入完毕
''说明:
'' Hotkey: 热键值
'' Enabled: 是否激活
'' Value: 是否选择(-1到1), 0:普通 -1:打钩 1:三角箭头
'' 对于主菜单项目该值无意义, 而它的值决定的是该项主菜单项目的光
'' 带颜色(0-15).
''菜单单击事件子程序: C.MenuClick
''----框架被读入到变量中
LoadFrame 1 ''读入框架 是否读入到变量
''格式: DATA X,Y,W,H,FC,FM,BC,Mode,Caption
DATA 220,180,120,90,1,0,15,6,""
DATA =
''----普通的显示式框架
LoadFrame 0 ''读入框架 是否读入到变量
''格式: DATA X,Y,W,H,FC,FM,BC,Mode,Caption
DATA 5,30,350,300,1,2,-1,7,框架
DATA =
'' X: X坐标
'' Y: Y坐标
'' W: 宽度
'' H: 高度
'' FC: 标题字体颜色
'' BC: 背景色
''Mode: 框架风格(0-7)
''以下两个事件子程序只有在框架被读入到变量后才能发生
''框架按钮事件子程序: C.FrameClick
''框架双击事件子程序: C.FrameDblClick
LoadLabel 0, 0 ''读入标签 是否读入到变量, 背景框
''格式: DATA X,Y,BW,FW,FH,FC,BC,FM,Style,Caption
DATA 380,30,0,14,32,0,-1,6,0,"Ctrl+F1`切换输入法"
DATA 230,160,0,16,12,0,-1,8,0,请按鼠标右键
DATA 10,337,0,14,12,0,-1,25,0,"进度条:"
DATA =
''说明:
'' X: X坐标
'' Y: Y坐标
'' BW: 显示区字符数 0:自动
'' FW: 字宽
'' FH: 字高
'' FC: 字体颜色
'' BC: 背景色 -1:透明
'' FM: 字型模式 0:正常 1:凹陷 2:突出 3:粗体
'' Style: 显示风格 0:左对齐 1:右对齐
LoadText ''读入文本框
''格式: DATA X,Y,BW,Enabled,FC,PassWord,MaxLen,Hotkey,3D
DATA 20,50,30,0,0,0,100,-1,-1
DATA =
''说明:
'' X: X坐标
'' Y: Y坐标
'' BW: 可示字符数
'' Enabled: 当前激活状态
'' FC: 字体颜色
'' MaxLen: 最多输入字符数
'' Hotkey: 热键值
'' G3D: 是否立体效果
''编辑键说明: Ctrl+Del: 剪切 403
'' Ctrl+Ins: 粘贴 402
'' Ctrl+C : 复制 3
''
''文本框键盘事件子程序: C.TextKeyPress
LoadOption ''读入单选按钮
''格式: DATA [-,Value,] X,Y,Enabled,Hotkey,Caption []里的参数为分组用
DATA -,0,20,90,1,-1,组1(0)
DATA 20,110,1,-1,组1(1)
DATA -,1,120,90,1,-2,组2(0)
DATA 120,110,0,-2,组2(1)
DATA 120,130,1,-2,组2(2)
DATA =
''说明:
'' Value: 被选择的项目序号 *对应的变量是OptBValue(组序号)
'' X: X坐标
'' Y: Y坐标
'' Enabled: 当前激活状态
'' Hotkey: 热键值
''单选按钮单击事件子程序: C.OptionClick
LoadCheck ''读入复选按钮
''格式: DATA X,Y,Enabled,Value,Hotkey,Caption
DATA 220,90,1,1,-1,Check1
DATA 220,110,0,0,-2,复选按扭2
DATA =
''说明:
'' X: X坐标
'' Y: Y坐标
'' Enabled: 当前激活状态
'' Value: 当前选择状态
'' Hotkey: 热键值
''复选按钮单击事件子程序: C.CheckClick
LoadButton 0 ''读入命令按钮 背景框
''格式: DATA X,Y,W,H,Enabled,FC,FW,FH,Hotkey,Caption
DATA 380,100,120,35,1,105,22,12,-1,按钮1
DATA 380,150,80,25,1,101,30,12,-1,按钮2
DATA 380,210,80,40,1,213,5,12,-1,"打开`输入法"
DATA 380,270,80,40,1,1,25,12,-1,"关闭`输入法"
DATA 210,305,20,17,1,1,0,12,-1,"-"
DATA 260,305,20,17,1,1,0,12,-1,"+"
DATA =
''说明:
'' X: X坐标
'' Y: Y坐标
'' W: 宽度
'' H: 高度
'' Enabled: 当前激活状态
'' FC: 字体颜色
'' FW: 字宽
'' FH: 字高
'' Hotkey: 热键值
''按钮单击事件子程序: C.ButtonClick
LoadList ''读入列表框
''格式: DATA X,Y,BW,Col,BH,Hotkey,3D
DATA 20,160,20,1,8,-1,-1
DATA =
ListAdd 0, -1, "列表项目0"
ListAdd 0, -1, "列表项目1"
ListAdd 0, -1, "列表项目2"
ListAdd 0, -1, "列表项目3"
ListAdd 0, -1, "列表项目4"
ListAdd 0, -1, "列表项目5"
ListAdd 0, -1, "列表项目6"
ListAdd 0, -1, "列表项目7"
ListAdd 0, -1, "列表项目8"
ListAdd 0, -1, CHR$(255) + "5"
ListB(0).Index = 2 ''定义列表索引值为2, 若不定义值为-1即没有选定项目
''说明:
'' X: X坐标
'' Y: Y坐标
'' BW: 字符数
'' BH: 行数
'' Hotkey: 热键值
'' G3D: 是否立体效果
''变量: ListI(序号,项目号): 项目标题$
''配合子程序: ListAdd (序号,插入位置,项目$) 如果插入位置为-1时,即追加
'' ListRemove (序号,删除位置)
'' 如果删除位置为-1时,即从最后删除
'' -2时,即全部删除
''列表单击事件子程序: C.ListClick
''列表双击事件子程序: C.ListDblClick
''列表键盘事件子程序: C.ListKeyPress
LoadCombo ''读入下拉式列表框
''格式: DATA X,Y,BW,Col,Enabled,Hotkey,3D
DATA 20,290,20,2,1,-1,-1
DATA =
ListAdd 1, -1, "下拉列表项目0"
ListAdd 1, -1, "下拉列表项目1"
ListAdd 1, -1, "下拉列表项目2"
ListAdd 1, -1, "下拉列表项目3"
ListAdd 1, -1, "下拉列表项目4"
ListAdd 1, -1, CHR$(255) + "3"
ListAdd 1, -1, CHR$(255) + "13"
ListAdd 1, -1, CHR$(255) + "15"
ListAdd 1, -1, CHR$(255) + "5"
SetCombo 0, 3 ''设置下拉列表的索引值为3 相对ListB(1).Index=3
''说明:
'' X: X坐标
'' Y: Y坐标
'' BW: 字符数
'' Enabled: 当前激活状态
'' G3D: 是否立体效果
''变量: ComboTxt(序号): 标题$
''配合子程序: SetCombo (序号,索引值)
''下拉列表单击事件子程序: C.ComboClick
''---------------------------------
''过程循环处理事件子程序: C.Timer
''不妨到各个事件子程序看看.
LoadPercentBar ''读入进度条
''格式: DATA X,Y,W,H,FC,BC,Style
DATA 70,335,440,15,1,7,11
DATA =
''显示进度条子程序 ShowPercentBar 序号,百分值,PercentBar(),Win
END SELECT
ProcessLoop ''过程循环处理
LOOP
SUB C.ButtonClick (NWin, Inx)
Sel = NWin * 100 + Inx
SELECT CASE Sel
CASE 0:
CASE 1: Button(2).Enabled = NOT Button(2).Enabled
CASE 2: Check(1).Enabled = NOT Check(1).Enabled
CASE 3:
''PutTX 0, 0, 1
GetKey -1 ''打开输入法
CASE 4:
GetKey -2 ''关闭输入法
SHARED KeyCode
KeyCode = -5
END SELECT
END SUB
SUB C.ButtonState (NWin, Inx, State)
Sel = NWin * 100 + Inx
SELECT CASE Sel
CASE 3:
''PRINT State;
CASE 5, 6:
SHARED PassKey
PassKey = 0
IF State = 2 THEN PassKey = Inx
END SELECT
END SUB
SUB C.CheckClick (NWin, Inx)
Sel = NWin * 100 + Inx
SELECT CASE Sel
CASE 0:
END SELECT
END SUB
SUB C.ComboClick (NWin, Inx)
Sel = NWin * 100 + Inx
SELECT CASE Sel
CASE 0:
END SELECT
END SUB
SUB C.FormUnload (NWin, QBCancel)
SELECT CASE NWin
CASE 0:
K$ = "OC": MsgBox K$, "退出", " 确定想离开吗?"
QBCancel = (K$ = "C")
END SELECT
END SUB
SUB C.FrameClick (NWin, Inx, Button)
Sel = NWin * 100 + Inx
SELECT CASE Sel
CASE 0:
END SELECT
END SUB
SUB C.FrameDblClick (NWin, Inx)
Sel = NWin * 100 + Inx
SELECT CASE Sel
CASE 0:
END SELECT
END SUB
SUB C.FrameMouseInOut (NWin, Inx, State)
Sel = NWin * 100 + Inx
SELECT CASE Sel
CASE 0, 1:
SetMouseCursor State * 3
END SELECT
END SUB
SUB C.FrameMouseState (NWin, Inx, X, Y, Button)
Sel = NWin * 100 + Inx
SELECT CASE Sel
CASE 0:
IF Button = 2 THEN DisplayMenu 2, -1, 0: Frame(0).GF = 0
END SELECT
END SUB
SUB C.ListChange (NWin, Inx, CType)
Sel = NWin * 100 + Inx
SELECT CASE Sel
CASE 0, 1:
END SELECT
END SUB
SUB C.ListClick (NWin, Inx)
Sel = NWin * 100 + Inx
SELECT CASE Sel
CASE 0:
END SELECT
END SUB
SUB C.ListDblClick (NWin, Inx)
Sel = NWin * 100 + Inx
SELECT CASE Sel
CASE 0:
END SELECT
END SUB
SUB C.ListKeyPress (NWin, Inx, KeyCode)
Sel = NWin * 100 + Inx
SELECT CASE Sel
CASE 0:
IF KeyCode = 45 THEN ListB(0).Loc = ListB(0).Loc - 1: ListB(0).RScInx = -2
IF KeyCode = 61 THEN ListB(0).Loc = ListB(0).Loc + 1: ListB(0).RScInx = -2
END SELECT
END SUB
SUB C.MenuClick (NWin, MInx, Inx)
Sel = NWin * 10000 + MInx * 100 + Inx
SELECT CASE Sel
CASE 1: PRINT "Welcome for you!": Menu(0, 1).Enabled = 0
CASE 2: Menu(1, 0).Enabled = NOT Menu(1, 0).Enabled
CASE 4:
ExitWin = 2
CASE 101: Menu(MInx, Inx).Value = NOT Menu(MInx, Inx).Value
CASE 103, 104: Menu(MInx, 3).Value = 0: Menu(MInx, 4).Value = 0
Menu(MInx, Inx).Value = 1
CASE 201 TO 210:
MouseHide
LINE (Win.X + Frame(0).X + 2, Win.Y + Frame(0).Y + 2)-STEP(Frame(0).W - 4, Frame(0).H - 4), Inx, BF
MouseShow
END SELECT
END SUB
SUB C.OptionClick (NWin, GInx, Inx)
Sel = NWin * 100 + GInx
SELECT CASE Sel
CASE 1:
ListB(0).Index = OptBValue(1)
END SELECT
END SUB
SUB C.TextKeyPress (NWin, Inx, KeyCode)
Sel = NWin * 100 + Inx
SELECT CASE Sel
CASE 0:
END SELECT
END SUB
SUB C.Timer (NWin, KeyCode)
SELECT CASE NWin
CASE 0:
SHARED PercentV AS SINGLE, PassKey
IF PassKey = 6 THEN
PercentV = PercentV + .0001
ELSEIF PassKey = 5 THEN
PercentV = PercentV - .0001
END IF
IF PercentV < .0001 OR PercentV >= 1 THEN PassKey = 0
ShowPercentbar 0, PercentV, PercentBar(), Win
OptB(1, 1).Enabled = Check(1).Value
Text(0).Enabled = Menu(1, 1).Value
Combo(0).Enabled = Menu(1, 3).Value = 1
END SELECT
''LOCATE 1, 1: PRINT Mouse.X - Win.X; Mouse.Y - Win.Y
''LOCATE 1, 1: PRINT FRE(-1)
END SUB
SUB DisplayMenu (MenuNo, X, Y)
SHARED XMenu, ContObj
XMenu = MenuN ContObj = -1
IF X >= 0 THEN Mouse.X = X: Mouse.Y = Y
END SUB
SUB ListAdd (Inx, InsNo, Item$)
XListAdd Inx, InsNo, Item$, ListB(), ListI(), MaxListItem
END SUB
SUB ListRemove (Inx, RemNo)
XListRemove Inx, RemNo, ListB(), ListI(), MaxListItem
END SUB
SUB LoadButton (Cmd)
DO
READ T$: IF T$ = "=" THEN EXIT DO
SumButton = SumButton + 1
B = SumButton
Button(B).X = VAL(T$)
READ Button(B).Y, Button(B).W, Button(B).H, Button(B).Enabled
READ Button(B).FC, Button(B).FW, Button(B).FH, Button(B).Hotkey, ButtonCap(B)
IF Cmd THEN Get3DCmd Win.X + Button(B).X - 2, Win.Y + Button(B).Y - 2, Button(B).W + 4, Button(B).H + 4, -1, Cmd, Win
LOOP
END SUB
SUB LoadCheck
DO
READ T$: IF T$ = "=" THEN EXIT DO
SumCheck = SumCheck + 1
B = SumCheck
Check(B).X = VAL(T$)
READ Check(B).Y, Check(B).Enabled
READ Check(B).Value, Check(B).Hotkey, CheckCap(B)
LOOP
END SUB
SUB LoadCombo
DO
READ T$: IF T$ = "=" THEN EXIT DO
SumCombo = SumCombo + 1
B = SumCombo
Combo(B).X = VAL(T$)
L = B + SumList + 1
READ Combo(B).Y, Combo(B).BW, Combo(B).Col, Combo(B).Enabled, HK, Combo(B).G3D
ListB(L).Hotkey = HK
ListB(L).Count = -1: ListB(L).Index = -1
LOOP
END SUB
SUB LoadFrame (Memo)
DO
READ T$: IF T$ = "=" THEN EXIT DO
X = VAL(T$)
READ Y, W, H, FC, FM, BC, Mode, C$
IF Memo THEN
SumFrame = SumFrame + 1
B = SumFrame
Frame(B).X = X: Frame(B).Y = Y
Frame(B).W = W: Frame(B).H = H
END IF
PrintFrame X, Y, W, H, FC, FM, BC, Mode, C$, Win
LOOP
END SUB
SUB LoadLabel (Memo, Cmd)
DO
READ T$: IF T$ = "=" THEN EXIT DO
X = VAL(T$)
READ Y, BW, FW, FH, FC, BC, FM, ST, MSG$
Get3DCmd Win.X + X - 3, Win.Y + Y - 3, BW * 6 + 6 + (FW - 12) * BW, FH + 5, BC, Cmd, Win
IF Memo > 0 THEN
SumLabel = SumLabel + 1
B = SumLabel
Label(B).X = X: Label(B).Y = Y
Label(B).FW = FW: Label(B).FH = FH
Label(B).BW = BW: Label(B).FC = FC
Label(B).BC = BC: Label(B).FM = FM
Label(B).Style = ST: LabelCap(B) = MSG$
ELSE
S = 1: MN = -1
DO
E = INSTR(S, MSG$, "`")
EE = E
IF E = 0 THEN EE = LEN(MSG$) + 1
MN = MN + 1
PrintFont X, Y + MN * FH, FW, FH, FC, BC, FM, MID$(MSG$, S, EE - S), Win
S = E + 1
LOOP WHILE E > 0
END IF
LOOP
END SUB



作者: 张三丰    时间: 2004-5-12 16:49
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
SUB LoadList
DO
READ T$: IF T$ = "=" THEN EXIT DO
SumList = SumList + 1
B = SumList
ListB(B).X = VAL(T$)
READ ListB(B).Y, ListB(B).BW, ListB(B).Col, ListB(B).BH, ListB(B).Hotkey, ListB(B).G3D
ListB(B).Count = -1: ListB(B).Index = -1
LOOP
END SUB
SUB LoadMenu
DO
READ T$
IF T$ = "=" THEN EXIT DO
IF T$ = "-" THEN
SumMMenu = SumMMenu + 1: B = SumMMenu: A = 0
READ MenuHotkey(B), Menu(B, A).Enabled
ELSE
Menu(B, A).Enabled = VAL(T$)
END IF
READ Menu(B, A).Value, MenuCap(B, A)
SumMenu(B) = A: A = A + 1
LOOP
END SUB
SUB LoadOption
DO
READ T$
IF T$ = "=" THEN EXIT DO
IF T$ = "-" THEN
SumOptG = SumOptG + 1: B = SumOptG: A = 0
READ OptBValue(B), OptB(B, A).X
ELSE
OptB(B, A).X = VAL(T$)
END IF
READ OptB(B, A).Y, OptB(B, A).Enabled
READ OptB(B, A).Hotkey, OptBCap(B, A)
SumOptI(B) = A: A = A + 1
LOOP
END SUB
SUB LoadPercentBar
DO
READ T$: IF T$ = "=" THEN EXIT DO
SumPercent = SumPercent + 1
B = SumPercent
PercentBar(B).X = VAL(T$)
READ PercentBar(B).Y, PercentBar(B).W, PercentBar(B).H
READ PercentBar(B).FC, PercentBar(B).BC, PercentBar(B).Style
ShowPercentbar B, 0, PercentBar(), Win
LOOP
END SUB
SUB LoadText
DO
READ T$: IF T$ = "=" THEN EXIT DO
SumText = SumText + 1
B = SumText
Text(B).X = VAL(T$)
READ Text(B).Y, Text(B).BW, Text(B).Enabled, Text(B).FC
READ Text(B).Password, Text(B).MaxLen, Text(B).Hotkey, Text(B).G3D
LOOP
END SUB
SUB LoadWindow (XX, YY, W, H, Font, BC, Box, TC, T$)
ERASE Button, OptB, SumOptI, Check, Frame, ListB, ListI, TextTXT, Text
ERASE ButtonCap, OptBCap, OptBRValue, OptBValue, CheckCap, Combo, ComboTXT
ERASE Label, LabelCap, LabelRCap
ERASE Menu, MenuCap, SumMenu, PercentBar
SumPercent = -1
SumButton = -1
SumCheck = -1
SumOptG = -1
SumFrame = -1
SumList = -1
SumText = -1
SumCombo = -1
SumLabel = -1
SumMMenu = -1
DrawWindow XX, YY, W, H, Font, BC, Box, TC, T$, Button(), ButtonCap(), Win, SumButton
RW = ASC(MID$(Win.RetWins, 1, 1))
RW = RW + 1
MID$(Win.RetWins, 1, 1) = CHR$(RW)
MID$(Win.RetWins, RW + 1, 1) = CHR$(Wins)
ExitWin = 0
END SUB
SUB MsgBox (KeyB$, Titl$, MSG$)
ON ERROR RESUME NEXT
SHARED MsgKey, ContObj
RW = Wins
IF LEFT$(KeyB$, 1) = "@" THEN
TWW = 39: H = 110
Wins = -2
SumText = SumText + 1
TextTXT(SumText) = MSG$: Text(SumText).Hotkey = 9
Text(SumText).Enabled = -1: Text(SumText).FC = 0
Text(SumText).MaxLen = VAL(MID$(KeyB$, 2)): Text(SumText).G3D = -1
Text(SumText).Locate = LEN(MSG$)
KeyB$ = "OC"
MSG$ = Titl$
Titl$ = ""
ELSE
IF Titl$ = "" THEN Titl$ = "信息"
Wins = -1
H = 90
END IF
S = 1: MN = -1
MS$ = ""
DO
E = INSTR(S, MSG$, "`")
EE = E
IF E = 0 THEN EE = LEN(MSG$) + 1'': IF EE - S = 0 THEN MN = -2
IF MN < 0 AND Wins = -2 AND Titl$ = "" THEN
Titl$ = MID$(MSG$, S, EE - S)
IF Titl$ = "" THEN Titl$ = "输入"
ELSE
MN = MN + 1
MS$ = MS$ + MKI$(S) + MKI$(EE - S)
END IF
IF EE - S > TWW THEN TWW = EE - S
S = E + 1
LOOP WHILE E > 0
TW = TWW * 6 + 30
KK = LEN(KeyB$)
H = H + 14 * MN: W = 90 + (KK - 1) * 70: IF TW > W THEN W = TW
RRXX = Win.X: RRYY = Win.Y: RRWW = Win.W: RRHH = Win.H: RRBC = Win.BC
X = -1: Y = -1
''X = Mouse.X: Y = Mouse.Y
''IF X + W > 639 THEN X = 639 - W
''IF Y + H > 450 THEN Y = 450 - H
RSButton = SumButton + 1
MouseHide
GetTX X, Y, W, H, 0
DrawWindow X, Y, W, H, 3, 7, 0, 1, CHR$(1) + Titl$, Button(), ButtonCap(), Win, SumButton
K = SumButton
FOR KA = 0 TO KK - 1
K$ = MID$(KeyB$, KA + 1, 1)
SELECT CASE UCASE$(K$)
CASE "O": C$ = "确定": HK = 13
CASE "Y": C$ = "是(Y)": HK = 277
CASE "N": C$ = "否(N)": HK = 305
CASE "A": C$ = "中断(A)": HK = 286
CASE "R": C$ = "重试(R)": HK = 275
CASE "I": C$ = "忽略(I)": HK = 279
CASE ELSE: C$ = "取消": HK = 27
END SELECT
K = K + 1: ButtonCap(K) = C$: Button(K).Hotkey = HK
Button(K).X = (W - KK * 68) \ 2 + 68 * KA
Button(K).Y = H - 52
Button(K).W = 60: Button(K).H = 17
Button(K).Enabled = 1: Button(K).FC = 0
Button(K).FW = 0: Button(K).FH = 12
NEXT
SumButton = K
FOR A = 0 TO MN
S = CVI(MID$(MS$, A * 4 + 1, 2))
E = CVI(MID$(MS$, A * 4 + 3, 2))
PrintChr Win.X + 10, Win.Y + 10 + 14 * A, 12, 12, 0, -1, MID$(MSG$, S, E)
NEXT
IF Wins = -2 THEN
Text(SumText).BW = TWW - 1
Text(SumText).X = 8
Text(SumText).Y = H - 83
MSG$ = TextTXT(SumText)
END IF
ExitWin = 0
MsgKey = RSButton
ProcessLoop
PutTX X, Y, 0
SumButton = RSButton - 1
Win.X = RRXX: Win.Y = RRYY: Win.W = RRWW: Win.H = RRHH: Win.BC = RRBC
KeyB$ = MID$(KeyB$, MsgKey, 1)
IF Wins = -2 THEN
SumText = SumText - 1: IF SumText > -1 THEN PrintText 0, 5, 0, Text(), TextTXT(), Win, CutBoard, 0
IF MsgKey = 1 THEN MSG$ = TextTXT(SumText + 1)
END IF
MouseShow
MsgKey = 0: ContObj = 0
Wins = RW: ExitWin = 0
END SUB
SUB ProcessLoop
DIM PicTime AS SINGLE, InitTime AS SINGLE, RTimeClick AS SINGLE
SHARED XMenu, ContObj, MsgKey, RXInpT, KeyCode
RecWins = Wins
IF SumText > -1 AND RecWins <> -1 THEN ContObj = 3 ELSE ContObj = 0
LST = 0: LEND = SumList: XLLCMD = -1: InitControl = -1
IF RecWins = -2 THEN
XInpText = SumText
ELSE
XInpText = 0
END IF
RXInpT = XInpText
MouseShow
DO
IF ContObj <> -1 THEN GetMouse Mouse
KeyCode = 0
IF NOT InitControl THEN
GetKey KeyCode
C.Timer RecWins, KeyCode
END IF
RTextI = 0
IF ContObj <> 4 AND ContObj < 10 THEN
XRKCL = XKCL
XRLCMD = XXLCMD: A = 0
FOR XLCMD = MsgKey TO SumButton
IF Button(XLCMD).Enabled <> Button(XLCMD).REnabled OR InitControl AND XLCMD > RSButton THEN PrintButton XLCMD, InitControl - 2, Button(), ButtonCap(), Win: C.ButtonState RecWins, (XLCMD), 1
GotFocus xicmd, (Button(XLCMD).X), (Button(XLCMD).Y), (Button(XLCMD).W), (Button(XLCMD).H), Mouse, Win
HK = KeyCode = Button(XLCMD).Hotkey
IF (xicmd OR HK) AND Button(XLCMD).Enabled THEN
IF Mouse.K = 1 AND Mouse.RK = 0 OR Mouse.K = 1 AND XLLCMD = XLCMD OR HK THEN
IF A <> 2 THEN XLLCMD = XLCMD: IF HK THEN A = 2 ELSE XKCL = 2
ContObj = 7
ELSE
XKCL = -1
IF Mouse.K = 0 AND Mouse.RK = 1 THEN XKCL = 1
END IF
XXLCMD = XLCMD
IF A = 0 THEN A = 1
END IF
NEXT
IF XRLCMD <> XXLCMD OR A = 0 THEN
XKCL = 0
IF XRKCL = 2 THEN XKCL = 1
IF Mouse.K = 0 AND Mouse.RK = 1 THEN XLLCMD = -1
END IF
IF XKCL <> XRKCL THEN
PrintButton XRLCMD, XKCL, Button(), ButtonCap(), Win
C.ButtonState RecWins, (XRLCMD), (XKCL)
END IF
IF Mouse.K = 0 AND XLLCMD = XXLCMD AND Mouse.RK = 1 OR A = 2 THEN
IF RecWins < 0 THEN
Mouse.K = -99: RXInpT = 0: MsgKey = XLLCMD - MsgKey: ExitWin = 2
ELSE
C.ButtonClick RecWins, (XLLCMD)
IF MsgKey = XLLCMD THEN ExitWin = 2
END IF
END IF
''IF Mouse.K = 1 AND Mouse.RK = 0 THEN
'' GotFocus I, -5, -30, (Win.W), (Win.H), Mouse, Win
'' IF I = 0 THEN BEEP
''END IF
IF RecWins <> -1 THEN
IF RecWins = -2 THEN
RSText = SumText
IF RContObj = 3 AND ContObj <> 3 THEN PrintText XInpText, 3, 0, Text(), TextTXT(), Win, CutBoard, XPutII
RContObj = ContObj
ELSE
RSText = 0
END IF
FOR L = RSText TO SumText
IF InitControl THEN
PrintText L, 5, 0, Text(), TextTXT(), Win, CutBoard, 0
IF L = SumText THEN PrintText XInpText, 5, 0, Text(), TextTXT(), Win, CutBoard, 0
ELSE
X = Text(L).X: Y = Text(L).Y: W = (Text(L).BW) * 6 + 8
GotFocus I, X, Y + 1, W, 17, Mouse, Win
IF I THEN RTextI = 1
A = (KeyCode = Text(L).Hotkey)
IF I AND Mouse.K <> 0 AND Mouse.RK = 0 OR A THEN
PrintText RXInpT, 3, 0, Text(), TextTXT(), Win, CutBoard, 1
IF A = 0 THEN Text(L).Locate = (Mouse.X - (Win.X + X) + 1) \ 6
XInpText = L: ContObj = 3
PrintText L, 4, 0, Text(), TextTXT(), Win, CutBoard, 0: RXInpT = XInpText
END IF
IF Text(L).Enabled <> Text(L).REnabled THEN
PrintText RXInpT, 3, 0, Text(), TextTXT(), Win, CutBoard, 1
PrintText L, 5, 0, Text(), TextTXT(), Win, CutBoard, 0
RXInpT = L
END IF
END IF
NEXT
IF ContObj = 3 THEN
IF KeyCode <> 0 THEN
''IF KeyCode = 328 THEN XInpText = XInpText - 1: IF XInpText < RSText THEN XInpText = SumText
''IF KeyCode = 336 OR
IF KeyCode = 9 THEN XInpText = XInpText + 1: IF XInpText > SumText THEN XInpText = RSText
ELSE
IF TIMER - PicTime > .4 THEN XPutII = 0
IF TIMER - PicTime > .9 THEN XPutII = 1: PicTime = TIMER
END IF
IF RXInpT <> XInpText THEN
PrintText RXInpT, 3, 0, Text(), TextTXT(), Win, CutBoard, 1
PrintText XInpText, 4, 0, Text(), TextTXT(), Win, CutBoard, 0
RXInpT = XInpText
ELSE
IF XPutII <> RXPutII OR KeyCode > 0 THEN
RXPutII = XPutII
PrintText XInpText, 2, KeyCode, Text(), TextTXT(), Win, CutBoard, XPutII
IF KeyCode <> 0 THEN C.TextKeyPress RecWins, XInpText, KeyCode
END IF
END IF
END IF
END IF
END IF
IF RRTextI <> RTextI THEN RRTextI = RTextI: SetMouseCursor RTextI

作者: 张三丰    时间: 2004-5-12 16:50
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
IF RecWins > -1 THEN
IF ContObj <> 4 THEN
II = 0
IF ContObj = 11 THEN
''IF Menu(XMenu, 0).Enabled THEN
XMenuHI = Menu(XMenu, 0).Enabled
IF XMenuHI > SumMenu(XMenu) THEN XMenuHI = SumMenu(XMenu)
MW = (SumMenu(XMenu) - 1) \ XMenuHI + 1
GotFocus II, RKMenuX + 2, RKMenuY - 3, MenuWidth * MW - 4, XMenuHI * 14 + 4, Mouse, Win
IF II AND (Mouse.Y <> XRMouseY OR Mouse.X <> XRMouseX) AND Mouse.Y > Win.Y + RKMenuY THEN
XMINX = ((Mouse.X - Win.X - RKMenuX - 1) \ MenuWidth) * XMenuHI + (Mouse.Y - Win.Y - RKMenuY - 1) \ 14 + 1
IF XMINX > SumMenu(XMenu) THEN XMINX = XRMINX
XRMouseY = Mouse.Y: XRMouseX = Mouse.X
END IF
IF II = 0 THEN IF Mouse.K = 1 THEN XMINX = 0
FOR A = 0 TO SumMenu(XMenu)
IF KeyCode = 336 THEN XMINX = XMINX + 1: IF XMINX > SumMenu(XMenu) THEN XMINX = 1
IF KeyCode = 328 THEN XMINX = XMINX - 1: IF XMINX < 1 THEN XMINX = SumMenu(XMenu)
IF MenuCap(XMenu, XMINX) <> "" THEN EXIT FOR
NEXT
IF KeyCode < 256 THEN
FOR A = 1 TO SumMenu(XMenu)
Cap$ = MenuCap(XMenu, A): L = INSTR(Cap$, "(")
Cap$ = UCASE$(MID$(Cap$, L + 1, 1))
IF Cap$ = UCASE$(CHR$(KeyCode)) THEN Mouse.K = 0: Mouse.RK = 1: XMINX = A: II = -1: EXIT FOR
NEXT
END IF
IF KeyCode = 13 THEN Mouse.K = 0: Mouse.RK = 1: II = -1
IF XMINX <> XRMINX THEN PrintMenu XMenu, XRMINX, XMINX, 4, Menu(), MenuCap(), SumMenu(), Win, RKSMenuX, RKSMenuY, RKMenuX, RKMenuY, MenuWidth: XRMINX = XMINX
IF Mouse.K = 0 AND Mouse.RK = 1 AND Menu(XMenu, XMINX).Enabled AND MenuCap(XMenu, XMINX) <> "" THEN IF XMINX > 0 THEN XPUT = 2 ELSE XPUT = 1
''END IF
IF (Mouse.K = 0 AND Mouse.RK > 0 OR RKSMenuX = -1 AND Mouse.K = 2 AND Mouse.RK = 0) AND II = 0 THEN XPUT = 1
PR = 0
IF KeyCode = 27 THEN XPUT = 1
IF RKSMenuX <> -1 THEN
IF KeyCode = 333 THEN XMenu = XMenu + 1: PR = -1: IF XMenu > SumMMenu THEN XMenu = 0
IF KeyCode = 331 THEN XMenu = XMenu - 1: PR = -1: IF XMenu < 0 THEN XMenu = SumMMenu
END IF
IF PR THEN XPUT = 2: XMINX = 0: ContObj = 10: XRMouseX = Mouse.X: XRMouseY = Mouse.Y
END IF
RKSMX = 0: RKSMY = -1
FOR M = 0 TO SumMMenu
IF M > 0 THEN
RKSMX = RKSMX + (LEN(MenuCap(M - 1, 0)) + 2) * 6 + 2
IF RKSMX + (LEN(MenuCap(M, 0)) + 2) * 6 + 2 > Win.W - 7 THEN RKSMX = 0: RKSMY = RKSMY + 14
END IF
GotFocus I, RKSMX - 1, RKSMY - 1, 6 * (LEN(MenuCap(M, 0)) + 2) + 2, 14, Mouse, Win
IF I AND II = 0 OR KeyCode = MenuHotkey(M) THEN
IF Mouse.K = 1 AND Mouse.RK = 0 OR KeyCode = MenuHotkey(M) OR XMenu <> M AND ContObj = 11 AND (Mouse.X <> XRMouseX OR Mouse.Y <> XRMouseY) THEN
IF ContObj = 11 THEN XPUT = 1
ContObj = 10: XMenu = M: XRMouseX = Mouse.X: XRMouseY = Mouse.Y
END IF
END IF
IF InitControl THEN
PrintMenu M, -1, -1, 0, Menu(), MenuCap(), SumMenu(), Win, RKSMX, RKSMY, RKMenuX, RKMenuY, MenuWidth
IF M = SumMMenu THEN MouseHide: Get3DBox (Win.X), (Win.Y) + RKSMY + 14, (Win.W) - 8, 1, 8, 15, -1: MouseShow
END IF
IF M = XMenu AND ContObj = 10 THEN RKSMenuX = RKSMX: RKSMenuY = RKSMY: RKMenuX = RKSMenuX - 1: RKMenuY = RKSMenuY + 16
NEXT
IF XPUT THEN
PrintMenu XRMenu, -1, -1, 3, Menu(), MenuCap(), SumMenu(), Win, RRKSMX, RRKSMY, RRKMX, RRKMY, RMW
IF XRMenu = XMenu THEN ContObj = 0
XRMenu = XMenu
IF XPUT = 2 THEN
C.MenuClick RecWins, XMenu, XMINX
ELSE
C.MenuClick -RecWins, -XMenu, 0
END IF
XPUT = 0: Mouse.K = -100: Mouse.RK = -100
RRTextI = 0: KeyCode = 0
END IF
IF ContObj = -1 THEN
SetMouseCursor 0: ContObj = 10
RKMenuY = Mouse.Y - Win.Y + 3
RKMenuX = Mouse.X - Win.X
RKSMenuX = -1
END IF
END IF
IF RContObj = 3 AND ContObj <> 3 THEN PrintText XInpText, 3, 0, Text(), TextTXT(), Win, CutBoard, XPutII
IF RContObj = 5 AND ContObj <> 5 THEN PrintCombo XCombo, 3, 0, Combo(), ComboTXT(), Win
RContObj = ContObj
IF ContObj = 10 THEN
C.MenuClick RecWins, XMenu, 0
PrintMenu XMenu, -1, 0, 1, Menu(), MenuCap(), SumMenu(), Win, RKSMenuX, RKSMenuY, RKMenuX, RKMenuY, MenuWidth
XRMenu = XMenu: XRMINX = 0: XMINX = 0
ContObj = 12
RRKSMX = RKSMenuX: RRKSMY = RKSMenuY
RRKMX = RKMenuX: RRKMY = RKMenuY: RMW = MenuWidth
END IF
IF ContObj = 12 AND Mouse.K = 0 AND Mouse.RK = 0 THEN ContObj = 11
IF ContObj < 10 THEN
IF (ContObj = 2 OR ContObj = 4) AND KeyCode > 0 THEN
I = ListB(XList).Index: S = ListB(XList).ScInx
B = S + ListB(XList).BH * ListB(XList).Col
IF KeyCode = 331 AND I > ListB(XList).BH - 1 THEN I = I - ListB(XList).BH: IF I < S THEN S = S - ListB(XList).BH
IF KeyCode = 333 AND I < ListB(XList).Count - ListB(XList).BH + 1 THEN I = I + ListB(XList).BH: IF I > B - 1 THEN S = S + ListB(XList).BH
IF KeyCode = 328 AND I > 0 THEN I = I - 1: IF I < S OR ListB(XList).BW <= 0 THEN IF ListB(XList).Col > 1 THEN S = S - ListB(XList).BH ELSE S = S - 1: I = S
IF KeyCode = 336 AND I < ListB(XList).Count THEN
I = I + 1
IF I > B - 1 OR ListB(XList).BW <= 0 THEN IF ListB(XList).Col > 1 THEN S = S + ListB(XList).BH ELSE S = S + 1: I = B
END IF
IF ContObj = 4 THEN
IF KeyCode = 13 THEN XComExit = 2: KeyCode = 0
IF KeyCode = 27 THEN XComExit = 1: KeyCode = 0
END IF
ListB(XList).Index = I: ListB(XList).ScInx = S
IF I > -1 THEN C.ListKeyPress RecWins, XList, KeyCode
END IF
RXL = XXL: XXX = 0
FOR XL = LST TO LEND
IF InitControl OR ContObj = -9 THEN
PrintList XL, -1, 1, 0, -2, ListB(), ListI(), Win: IF ContObj = -9 THEN ContObj = 4
ELSE
X = ListB(XL).X + 2: Y = ListB(XL).Y + 2: W = (ListB(XL).BW * ListB(XL).Col) * 6 + ListB(XL).Col * 3: H = ListB(XL).BH * 14 + 1
GotFocus XILIT, X, Y, W + 18, H, Mouse, Win
IF RXL <> XL AND PK AND XILIT THEN ListB(XXL).RCount = -2
IF (XILIT OR KeyCode = ListB(XL).Hotkey) AND ListB(XL).Count >= 0 AND XXX = 0 THEN
IF (Mouse.K = 1 AND Mouse.RK = 0 OR KeyCode = ListB(XL).Hotkey) AND ContObj <> 4 THEN ContObj = 2: XList = XL
GotFocus XLIL, X + W, Y, 18, H, Mouse, Win
MY = Mouse.Y - (Win.Y + Y)
MX = Mouse.X - (Win.X + X)
IF XLIL THEN
XSYY = -1
XMS = ListB(XL).Count - ListB(XL).BH * ListB(XL).Col + 1
IF XMS > 0 THEN
IF Mouse.K <> 1 AND Mouse.RK <> Mouse.K THEN PK = 0: MCNT = 0: NK = RNK: PR = 1: EXIT FOR
IF Mouse.K = 1 AND Mouse.RK = 0 THEN
NK = 5: PK = 1
IF MY < 16 THEN NK = 2 ELSE IF MY > H - 14 THEN NK = 3
PR = 1: RTimeClick = TIMER: InitTime = .4
RNK = NK
END IF
END IF
ELSE
IF RNK <> 0 AND Mouse.K <> 1 THEN RXL = XL: PK = 0: MCNT = 0: NK = 4: PR = 1: XSYY = -1: RNK = 0
IF Mouse.K <> 0 AND Mouse.RK = 0 OR ContObj = 4 AND (XRMouseY <> Mouse.Y OR XRMouseX <> Mouse.X) THEN
IL = (MY - 1) \ 14: JL = (MX - 1) \ (ListB(XL).BW * 6 + 3)
IL = ListB(XL).ScInx + JL * ListB(XL).BH + IL
IF IL > ListB(XL).Count THEN IL = -1
ListB(XL).Index = IL: XRMouseY = Mouse.Y: XRMouseX = Mouse.X
END IF
IF Mouse.K = 1 AND Mouse.RK = 0 THEN
IF ContObj = 4 THEN
XComExit = 2
ELSE
IF Mouse.DC AND IL > -1 THEN C.ListDblClick RecWins, XL
END IF
END IF
END IF
MCNT = 0
IF Mouse.K = 1 AND (TIMER - RTimeClick > InitTime AND (RNK = 2 OR RNK = 3) OR RNK = 5) THEN MCNT = 1: RTimeClick = TIMER: InitTime = ListScrollSpeed / 10
IF Mouse.K = 1 AND Mouse.RK = 0 OR MCNT THEN
S = ListB(XL).ScInx
IF RNK = 2 AND S > 0 THEN S = S - 1
IF RNK = 5 THEN
XSYY = MY - 15
IF XSYY < 0 THEN XSYY = 0
IF XSYY <> XRY THEN PR = 1: XRY = XSYY
END IF
IF RNK = 3 AND S < XMS + -(ListB(XL).Col > 1) * (ListB(XL).BH - ListB(XL).Count MOD ListB(XL).BH - 1) THEN S = S + 1
ListB(XL).ScInx = S
END IF
XXL = XL: XXX = 1
ELSE
IF RNK <> 0 THEN PK = 1
END IF
XPR = -1: XI = -1
B = ListB(XL).Index <> ListB(XL).RIndex
IF ListB(XL).Count <> ListB(XL).RCount THEN
XPR = 4
ELSEIF ListB(XL).ScInx <> ListB(XL).RScInx THEN
XPR = 5
ELSEIF B THEN
XI = ListB(XL).RIndex
XPR = 0
END IF
IF XPR > -1 THEN PrintList XL, XI, XPR, 0, -1, ListB(), ListI(), Win: A = ListB(XL).RIndex: ListB(XL).RIndex = XI: C.ListChange RecWins, XL, XPR: ListB(XL).RIndex = A
IF B AND ListB(XL).Index > -1 THEN C.ListClick RecWins, XL
END IF
NEXT
IF XXX = 0 AND PK THEN PR = 1: PK = 0: NK = RNK: XRY = -1: MCNT = 0: RNK = 0
IF PR AND RXL <= LEND THEN
RScInx = ListB(RXL).ScInx
PrintList RXL, -2, NK, PK, XSYY, ListB(), ListI(), Win: PR = 0
IF RScInx <> ListB(RXL).ScInx THEN C.ListChange RecWins, RXL, 9
END IF
IF XXX = 0 AND ContObj = 4 AND Mouse.K = 1 AND Mouse.RK = 0 THEN XComExit = 1
IF XComExit AND Mouse.K = 0 THEN
IF XComExit = 1 OR ListB(LEND).Index < 0 THEN ListB(LEND).Index = XComIndex: XComExit = 0
IF XComExit = 2 THEN SetCombo XCombo, (ListB(LEND).Index)
ContObj = 5: Mouse.RK = 0
MouseHide
PutTX Win.X + Combo(XCombo).X, XCOMY, 0
MouseShow
PrintCombo XCombo, 4, 0, Combo(), ComboTXT(), Win
IF XComExit = 2 THEN C.ComboClick RecWins, XCombo
XComExit = 0
LST = 0: LEND = SumList
END IF
IF ContObj <> 4 THEN
FOR T = 0 TO SumLabel
IF LabelCap(T) <> LabelRCap(T) OR InitControl THEN PrintLabel T, Label(), LabelCap(), LabelRCap(), Win
NEXT
FOR T = 0 TO SumOptG
FOR L = 0 TO SumOptI(T)
IF OptB(T, L).Enabled <> OptB(T, L).REnabled OR InitControl THEN PrintOption T, L, 11, OptB(), OptBRValue(), OptBValue(), OptBCap(), Win, SumOptI()
GotFocus I, (OptB(T, L).X), (OptB(T, L).Y), LEN(OptBCap(T, L)) * 6 + 16, 12, Mouse, Win
IF (I AND Mouse.K = 1 AND Mouse.RK = 0 OR KeyCode = OptB(T, L).Hotkey) AND OptB(T, L).Enabled THEN
OptBValue(T) = L
ContObj = 1
END IF
NEXT
IF OptBValue(T) <> OptBRValue(T) THEN
PrintOption T, -1, 0, OptB(), OptBRValue(), OptBValue(), OptBCap(), Win, SumOptI()
C.OptionClick RecWins, T, (OptBValue(T))
END IF
NEXT
FOR L = 0 TO SumCheck
IF Check(L).Enabled <> Check(L).REnabled OR InitControl THEN PrintCheck L, 11, Check(), CheckCap(), Win
GotFocus I, (Check(L).X), (Check(L).Y), LEN(CheckCap(L)) * 6 + 16, 12, Mouse, Win
IF (I AND Mouse.RK = 1 AND Mouse.K = 0 OR KeyCode = Check(L).Hotkey) AND Check(L).Enabled THEN
Check(L).Value = NOT Check(L).Value
ContObj = 6
END IF
IF Check(L).Value <> Check(L).RValue THEN
PrintCheck L, 0, Check(), CheckCap(), Win
C.CheckClick RecWins, L
END IF
NEXT
FOR A = 0 TO SumFrame
GotFocus I, (Frame(A).X), (Frame(A).Y), (Frame(A).W), (Frame(A).H), Mouse, Win
IF I THEN
IF Frame(A).GF = 0 THEN Frame(A).GF = -1: C.FrameMouseInOut RecWins, A, 1
IF Mouse.X <> Mouse.RX OR Mouse.Y <> Mouse.RY OR Mouse.K <> 0 OR Mouse.RK <> Mouse.K THEN C.FrameMouseState RecWins, A, (Mouse.X - Win.X - Frame(A).X), (Mouse.Y - Win.Y - Frame(A).Y), (Mouse.K)
IF Mouse.DC THEN
C.FrameDblClick RecWins, A
ELSEIF Mouse.K = 0 AND Mouse.RK <> 0 THEN
C.FrameClick RecWins, A, (Mouse.RK)
END IF
''EXIT FOR
ELSE
IF Frame(A).GF THEN Frame(A).GF = 0: C.FrameMouseInOut RecWins, A, 0
END IF
NEXT
FOR XLCOM = 0 TO SumCombo
IF Combo(XLCOM).Enabled <> Combo(XLCOM).REnabled OR InitControl THEN PrintCombo XLCOM, 1, 0, Combo(), ComboTXT(), Win
X = Combo(XLCOM).X: Y = Combo(XLCOM).Y: W = (Combo(XLCOM).BW) * 6
IF Combo(XLCOM).G3D > 0 THEN A = 1 ELSE A = 0
GotFocus I, X + A * (W + 7), Y + 1, (1 - A) * W + 23 - A * 5, 21, Mouse, Win
IF (I AND Mouse.K = 1 AND Mouse.RK = 0 OR KeyCode = ListB(SumList + XLCOM + 1).Hotkey) AND Combo(XLCOM).Enabled THEN
PrintCombo XCombo, 3, 0, Combo(), ComboTXT(), Win
MouseHide
GetTX Win.X + X, XCOMY, W + 25, H - 22, 0
MouseShow
PrintCombo XLCOM, 2, 1, Combo(), ComboTXT(), Win
ContObj = -9: XCombo = XLCOM
A = SumList + XLCOM + 1: XList = A
ListB(A).BH = ListB(A).Count + 1: IF ListB(A).BH > 8 THEN ListB(A).BH = 8
IF ListB(A).BH < 2 THEN ListB(A).BH = 1
LST = A: LEND = A: XComIndex = ListB(A).Index
H = ListB(A).BH * 14 + 2
B = Combo(XLCOM).G3D <> 0
XCOMY = Win.Y + Y + 18 - B
IF XCOMY + H > 455 THEN XCOMY = XCOMY - H - 20 + B * 2
ListB(A).BW = Combo(XCombo).BW
ListB(A).Col = (ListB(A).Count \ ListB(A).BH) + 1
IF ListB(A).Col > Combo(XLCOM).Col THEN ListB(A).Col = Combo(XLCOM).Col
B = ListB(A).BW * ListB(A).Col * 6 + 20 + (ListB(A).Col - 1) * 3
ListB(A).X = Combo(XCombo).X
IF ListB(A).X + B + Win.X + 3 > 640 THEN ListB(A).X = 640 - B - Win.X - 3
ListB(A).Y = XCOMY - Win.Y
IF RContObj = 3 THEN PrintText XInpText, 3, 0, Text(), TextTXT(), Win, CutBoard, 1
MouseHide
DrawBackBlock Win.X + ListB(A).X, Win.Y + ListB(A).Y, B, H, 5
MouseShow
C.ComboClick RecWins, -XCombo - 1
END IF
NEXT
END IF
END IF
END IF
InitControl = 0
IF ExitWin THEN
IF RecWins < 0 THEN EXIT DO
A = 0
C.FormUnload RecWins, A
IF A = 0 THEN
IF Wins = RecWins THEN
B = ASC(MID$(Win.RetWins, 1, 1))
IF B <= 1 THEN UnLoadMe
Wins = ASC(MID$(Win.RetWins, B, 1))
B = B - 2
IF B < 0 THEN B = 0
MID$(Win.RetWins, 1, 1) = CHR$(B)
END IF
EXIT DO
ELSE
ExitWin = 0: Wins = RecWins
END IF
END IF
LOOP
MouseHide
END SUB
SUB SetCombo (Inx, InxNo)
A = Inx + SumList + 1
ListB(A).Index = InxNo
IF InxNo < 0 THEN ComboTXT(Inx) = "" ELSE ComboTXT(Inx) = ListI(A, InxNo)
Combo(Inx).REnabled = 2
END SUB
超级经典的示例!!
大家可以分析分析此示例程序,
抛砖引玉
呵呵~

作者: k011003179    时间: 2004-5-12 17:25
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
回张三丰 ,你把qbwin自带的示例程序贴出来干吗,不是一下载就有了吗?
作者: k011003179    时间: 2004-5-12 17:26
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
下面引用由crshen2004/05/12 12:38pm 发表的内容:
下载了一键恢复4.3版,解压出其中的setup.zip,密码为lisa1207(不要问我怎么得到的哦),将setup.exe用upx解压,查看后发现的确为QBWin编写(有'QBWIN.FNT' not found!字样),“pqmagic /cmd=2g.pqs”,“boot ...
其实可以用shell调用dos命令的
作者: 88988    时间: 2004-5-12 19:57
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
我的QBWIN中的下拉列表还是没反应呀,郁闷。。。。。。。。。。。。。。。
作者: crshen    时间: 2004-5-12 21:17
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
脚本文件
因为脚本是在没有用户干预的情况下执行所以在开发脚本文件时要格外小心例
如如果遇到DELETE ALL 命令则当前所选驱动器上的所有分区都将被删除
而不提示任何警告或要求确认信息这些信息通常允许用户取消删除操作
重要由于Drive Image Pro 是在DOS 提示符处运行因此命令行上最多只
能输入128 个字符
脚本参数操作
SELECT DRIVE {< 编号>} 选择指定编号的驱动器例如SELECT DRIVE 1 将选择系统中的第一个硬盘在此命令之后的所有其它命令都是指驱动器1 直到使用其它的SELECT DRIVE 命令为止
SELECT PARTITION < 编号> 选择当前所选的驱动器上按编号指定的分区分区是按它们在磁盘上开始扇区号的顺序进行编号的不包括任何扩展分区或可用空间
SELECT PARTITION < 驱动器字母>选择由DOS 分配了驱动器字母的分区因为DOS 仅为可见的FAT 分区分配驱动器字母所以使用此命令只能选择这些类型的分区
SELECT PARTITION < 卷标> 选择带有指定卷标的第一个分区例如SELECT PARTITION DATA 选择标记为DATA 的第一个分区如果不止一个分区有此标签包括FAT32 NTFS 和HPFS 分区则只选择第一个分区
SELECT PARTITION FIRST 选择第一个分区
SELECT PARTITION NEXT 不管选择分区时使用的是何种语法总是选择紧跟在最后所选分区后的那个分区
SELECT PARTITION ALL 选择当前所选驱动器上的所有分区
SELECT FREESPACE {first |last | next | largest}
选择当前所选驱动器上指定的可用空间在选择最大的可用空间时无论可用空间是在扩展分区内还是在扩展分区外都没关系
SELECT IMAGE {< 编号> |all}选择映象文件中指定的映象例如SELECTIMAGE 3 或SELECT IMAGE ALL
PROTECT PARTITION FIRST 保护第一个分区免被删除
PROTECT PARTITION LAST 保护最后一个分区免被删除
PROTECT PARTITION DIAGNOSTIC保护未知类型的第一个有效分区免被删除
DELETE 使用任何SELECT PARTITION 命令删除所选的最后一个分区
DELETE ALL 删除当前所选驱动器上的所有分区而不必进行选择
DELETE EXTENDED 删除扩展分区只有将扩展分区内的所有逻辑分区都删除完后才可将其删除
SECTOR CHECK ON 对此命令后的所有恢复操作都启用坏扇区检查如果需要对某些分区禁用坏扇区检查而对另一些分区启用坏扇区检查则也可以使用/CBS 来替代它
SECTOR CHECK OFF 对此命令后的所有恢复操作禁用坏扇区检查如果需要对某些分区启用坏扇区检查而对另一些分区禁用坏扇区检查则也可以使用/NBS 来替代它
SET ACTIVE 将所选的最后一个分区设置为活动分区表示它将成为引导分区
STORE 使用无压缩方式存储所选分区
STORE WITH COMPRESSION OFF使用无压缩方式存储所选的分区
STORE WITH COMPRESSION LOW使用低比率压缩方式存储所选分区
STORE WITH COMPRESSION HIGH使用高比率压缩方式存储所选分区
RESIZE IMAGE NO 导致最后一个所选映象在遇到RESTORE 命令时不调整大小
RESIZE IMAGE PROPORTIONAL在遇到RESTORE 命令时按比例调整最后一个所选映象的大小
RESIZE IMAGE < 数值> 在遇到RESTORE 命令时将最后一个所选映象的大小调整为指定的数值用MB 表示
RESIZE IMAGE MAX 将最后一个所选映象的大小调整到可能的最大值在分区可占用驱动器剩余空间的情况下使用
此命令时该分区会填满整个驱动器
RESIZE IMAGE MOST SPACE调整含有最多可用空间的分区的大小1) 忽略Resize Image Proportional 并将其处理为Resize Image No 2) 忽略Resize ImageMax 并将其处理为Resize Image No 且3)认定Resize Image < 数值> 有效因此在计算MOST SPACE 时不考虑该分区
RESTORE 将选择的所有映象下载到可用空间并按RESIZE命令对其大小进行调整如有可能的话
REBOOT 重新引导计算机此命令之后的任何命令都不会执行
作者: crshen    时间: 2004-5-12 21:18
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
加1G的脚本
Dim NeedSize
NeedSize=1024
// 允许用户在操作后手工重新启动计算机,否则将自动重新启动计算机
  Allow Manual Reboot
//默认情况下不检测坏扇区,提高操作速度
  Set Default Bad Sector Test State OFF
// 选择第一块硬盘
  Select Disk 1
//选择RXC分区并检测大小
  Select Partition "RXC_SERVICE"
//选择前一个分区
  Select Partition Previous
//检测错误
  Check
// 检测该分区未使用空间是否满足要求
    Dim bQuit
    bQuit = 0
    IF GetUnusedAmount >= NeedSize Then
         //改变分区的大小,在其后面空出需要大小的空间(即前面NeedSize变量保存的值)
         Resize Space After NeedSize
    Else
         bQuit = 1
    End If
//选择最后一个分区,并将其扩大到占用后面所有的未分配空间(把刚才删除分区的空间合并给前一分区)
    If bQuit = 0 Then
Select Partition "RXC_SERVICE"
Resize Larger Max
    End If
作者: k011003179    时间: 2004-5-12 23:37
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
不错不错!!
作者: zhuying88    时间: 2004-5-13 00:21
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
thanks
作者: 88988    时间: 2004-5-13 22:51
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
下面引用由889882004/05/12 07:57pm 发表的内容:
我的QBWIN中的下拉列表还是没反应呀,郁闷。。。。。。。。。。。。。。。
再问详细使用方法。。。。

作者: 88988    时间: 2004-5-14 03:19
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
k011003179  兄。把你发的那张图的源代码给我,行不行?
我以前没接触过QB, 想好好研究一下。。。。。。。。

作者: 88988    时间: 2004-5-14 13:15
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
老兄你在哪儿呀?
作者: k011003179    时间: 2004-5-14 18:54
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
我由于上课没有上网,你的信箱是,我发过去
作者: crshen    时间: 2004-5-14 19:36
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
下面引用由k0110031792004/05/14 06:54pm 发表的内容:
我由于上课没有上网,你的信箱是,我发过去
顺便给我一份吧,我没学过Basic,最好有注释:)
crshen@tom.com
多谢!

作者: 小罗    时间: 2004-5-14 19:39
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
有空的话也给我一份吧 谢谢了  ilovelbh@yeah.net
作者: 88988    时间: 2004-5-14 22:33
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
我的信箱是  yhxx.01143@yh188.com    期待中。。。。。。。。。。。。。。。。
作者: jyssysz    时间: 2004-5-15 13:43
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
来一个:jyssysz@tom.com
作者: crshen    时间: 2004-5-15 13:44
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)

谢谢k011003179,源程序已收到并阅读。
附:Dos下QBasic大全的链接,有需要者请点击
作者: alan123    时间: 2004-5-15 14:52
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
下面引用由crshen2004/05/15 01:44pm 发表的内容:
谢谢k011003179,源程序已收到并阅读。
附:Dos下QBasic大全的链接,有需要者请点击
源程序已收到并阅读。请贴出k011003179的源程序来.如果大的话请用附件上传到论坛.
作者: sblinux    时间: 2004-5-15 18:13
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
你写得太好了,也给我一个吧
我的信箱是: sblinux@sohu.com
作者: k011003179    时间: 2004-5-15 20:48
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
以上邮箱源程序已经都发出去了
作者: jyssysz    时间: 2004-5-15 20:56
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
k011003179:
您好,没有收到您的源程序,请再发一次!!
jyssysz@tom.com
jyssysz@eyou.com
作者: k011003179    时间: 2004-5-15 21:31
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
下面引用由jyssysz2004/05/15 08:56pm 发表的内容:
k011003179:
您好,没有收到您的源程序,请再发一次!!
jyssysz@tom.com
jyssysz@eyou.com
已发
作者: 哟呵    时间: 2004-5-15 22:02
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
哇!我也学习学习吧。请也发一份给我吧!
zktong@163.com
谢谢
作者: meteor    时间: 2004-5-16 03:13
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
k011003179 您好:
如果可以的話,请也发一份给我吧!
i_meteor@yahoo.com
谢谢!
作者: jyssysz    时间: 2004-5-16 09:55
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
[这个贴子最后由jyssysz在 2004/05/16 12:39pm 第 1 次编辑]

能否作为附件发到论坛上??????????
多谢!!
作者: 66886    时间: 2004-5-16 10:49
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
你写得太好了,也给我一个吧
我的信箱是: 22232133@163.com
作者: 开心狗    时间: 2004-5-16 11:14
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
搞什么那?/
那些图形界面的代码 QWSHELL回自动生成的  
关键是按钮和菜单的代码  要那些做什么那
作者: wawa    时间: 2004-5-16 14:17
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
下面引用由crshen2004/05/12 09:17pm 发表的内容:
脚本文件
因为脚本是在没有用户干预的情况下执行所以在开发脚本文件时要格外小心例
如如果遇到DELETE ALL 命令则当前所选驱动器上的所有分区都将被删除
而不提示任何警告或要求确认信息这些信息通常允许用户取消 ...
请问这是PQ的脚本吗?如果是的话请问PQ7支不支持,怎样调用?
作者: crshen    时间: 2004-5-16 15:45
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
不是PQ的,是Drive Image Pro 脚本,4.3版一键恢复中的DI可用。
作者: crshen    时间: 2004-5-16 16:16
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
[UploadFile=34_2250_59.rar]如果习惯用PQmagic,就研究一下附件中的pmscript吧。
作者: 88988    时间: 2004-5-16 21:09
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
弱弱的问: *BAS和*.EXE在QB中有什么区别呀?
作者: pcloth    时间: 2004-5-16 22:51
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
已经搞定,谢谢提醒,我终于可以有自己的一键恢复了
作者: 88988    时间: 2004-5-17 00:39
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
下面引用由pcloth2004/05/16 10:51pm 发表的内容:
已经搞定,谢谢提醒,我终于可以有自己的一键恢复了
说说过程,让我们也学一学吧~~~~~~

作者: 双清居    时间: 2004-5-17 04:20
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
“88988”能把你下的Quick Basic 7.1 传给我吗?谢谢!
bbsfans@163.com

作者: kicker    时间: 2004-5-17 09:22
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
可以给我来一份吗?
puq@crhj.com.cn
有说明程序或原代码的可以发一个给我看看吗?谢谢了
作者: pcloth    时间: 2004-5-17 11:08
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
[UploadFile=34_2250_65.jpg][这个贴子最后由pcloth在 2004/05/17 11:29am 第 1 次编辑]

这是我给公司制作的一键恢复界面。
其实过程真的没什么好说的,因为太简单了。
只要你稍微懂一点BASIC语言就OK了。
QBWIN和quick basic 7.1 相信大家都有了?
制作步骤:
1、用QBWIN画出界面(这一步不用介绍了吧?)
2、生成BAS文件
3、在quick basic 7.1中打开这个BAS文件,修改后编译一下就OK(在运行QB的时候要带参数调用QBWIN,命令行为: QBX /L QBWIN)
作者: 88988    时间: 2004-5-17 12:19
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
“ pcloth  ”, QB中如何让它执行指定的程序比如说GHOST。还有怎样才能生成.exe
文件,而不是.BAS文件?
作者: 88988    时间: 2004-5-17 12:37
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
puq@crhj.com.cn
bbsfans@163.com
已发给你们。。。。。。

作者: jyssysz    时间: 2004-5-17 13:23
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
pcloth :
说一下是怎样修改的?
1、怎样调用下一个窗口;
2、怎样执行一个文件命令;
最好能有一个详细的教程。
我们都在看着你。
作者: alan123    时间: 2004-5-17 15:34
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
pcloth :
有没有一个详细的教程.或把源代码发一份到emtalan@163.com.先感谢在此.
作者: crshen    时间: 2004-5-17 15:36
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
[UploadFile=34_2250_70.jpg][这个贴子最后由crshen在 2004/05/17 04:37pm 第 2 次编辑]

在QB的shell中运行ghost将大大影响克隆速度,直接用批处理更好,快速稳定。
config.sys中不能显示中文,但简洁明了,免去一大堆垃圾文件。
为了兼容4.33版一键恢复,本程序中,1、2 选项备份/恢复C盘,均使用system.gho文件,而在3、4选项高级备份/恢复时,同样备份/恢复C盘,生成的文件是disk1p1.gho。
将程序安装完毕,测试可行后,利用PQDI制作F10.PQI,并加密码“lisa1207”保护,替换4.33中同名文件,即可实现用4.33安装程序安装,享受扩充磁盘容量、反安装等功能。

作者: crshen    时间: 2004-5-17 15:38
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
[UploadFile=34_2250_71.jpg][这个贴子最后由crshen在 2004/05/17 03:42pm 第 1 次编辑]

高级备份/恢复模式,能自动识别ntfs分区,选择要操作的分区,不再受安装多系统限制。
注:由于只有2个分区,其中之一为隐藏分区,故可选择的分区为2-1=1个。
作者: crshen    时间: 2004-5-17 15:41
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
[UploadFile=34_2250_72.jpg]
第一硬盘第一分区对应disk1p1.gho,第二分区对应disk1p2.gho,只要隐藏分区足够大,可备份多个系统。
作者: crshen    时间: 2004-5-17 15:54
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
[UploadFile=34_2250_73.jpg]制作原理,有gdisk 1 >patint.tmp 得到分区信息,如图:
编程读取Partitions对应项,即为总分区数
作者: crshen    时间: 2004-5-17 16:00
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
[UploadFile=34_2250_74.jpg]注意:以上是在虚拟机中,实际运用时,大多存在EXTENDED扩展分区,应去除,只要统计LOGICAL逻辑分区即可。如图中所示,总分区为5,但ghost操作时可见4个分区。
作者: crshen    时间: 2004-5-17 16:12
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
[UploadFile=34_2250_75.jpg][这个贴子最后由crshen在 2004/05/17 04:21pm 第 2 次编辑]

我的一键恢复:gdisk显示5个分区,提示操作显示四分区,实际备份可选择3分区,输入循环直到正确为止。
大家都习惯QB,制作图形界面方便。
我用的是C,黑乎乎的,太简陋了,哪位C语言高手能帮忙写一下图形界面,我实在没时间,水平也不够。
作者: crshen    时间: 2004-5-17 16:23
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
[UploadFile=34_2250_76.jpg][这个贴子最后由crshen在 2004/05/17 06:28pm 第 1 次编辑]


作者: pcloth    时间: 2004-5-17 16:43
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
[UploadFile=34_2250_77.zip]
下面引用由889882004/05/17 12:19pm 发表的内容:
“ pcloth  ”, QB中如何让它执行指定的程序比如说GHOST。还有怎样才能生成.exe
文件,而不是.BAS文件?
回答:
1、在QB中使用run指令,具体方法如下
    run "ghost.exe"
2、BAS文件生成EXE需要使用QB,不是指QBWIN这个东西,是指quick basic 7.1
下面引用由jyssysz2004/05/17 01:23pm 发表的内容:
pcloth :
说一下是怎样修改的?
1、怎样调用下一个窗口;
2、怎样执行一个文件命令;
...
回答:
1、我也没彻底弄清楚QBWIN,这个问题我也正在攻克
2、上面已经回答了。
代码见附件!祝大家早日成功。

作者: crshen    时间: 2004-5-17 17:41
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
[UploadFile=34_2250_78.jpg][这个贴子最后由crshen在 2004/05/17 06:00pm 第 2 次编辑]

目前网上流传的ghost恢复3.0版,判断分区时采用光盘盘符判断,对备份C盘基本没有错误(因为大部分人,第一分区为fat32,如果全为ntfs,当然光盘变成C盘了,你就没地方放ghost映像文件了,会提示出错)
具体代码如下:
LH %ramd%:\MSCDEX.EXE /D:mscd001 /L:%CDROM%
if "%RAMD%"=="L" goto back_c_h
if "%RAMD%"=="K" goto back_c_h
if "%RAMD%"=="J" goto back_c_h
if "%RAMD%"=="I" goto back_c_h
if "%RAMD%"=="H" goto back_c_g
if "%RAMD%"=="G" goto back_c_f
if "%RAMD%"=="F" goto back_c_e
if "%RAMD%"=="E" goto back_c_d
if "%RAMD%"=="D" goto register
if "%RAMD%"=="C" goto register
back_c_h的内容:
         经过备份程序的检测,你有下列几个备份选项可用:
         xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
                     [1]备份系统到D盘,请按1,回车
                     [2]备份系统到E盘,请按2,回车
                     [3]备份系统到F盘,请按3,回车
                     [4]备份系统到G盘,请按4,回车
                     [5]备份系统到H盘,请按5,回车
         xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
执行的程序5.exe(实际为5.bat经bat2exe编译而来)中备份命令:
%RAMD%:\ghost -rb -z1 -sure -clone,mode=pdump,src=1:1,dst=h:\ghostbak\system.gho -split=640
附图为5.exe内容。

作者: crshen    时间: 2004-5-17 17:54
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
[UploadFile=34_2250_79.jpg]而在备份D盘到F盘时:
  
                      备份D盘子菜单
         经过备份程序的检测,你有下列几个备份选项可用:
         xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
                     [2]备份系统到E盘,请按2,回车
                     [3]备份系统到F盘,请按3,回车
                     [4]备份系统到G盘,请按4,回车
         xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
     按字母键R并回车重新启动电脑
执行3.exe中的备份命令:
%RAMD%:\ghost -rb -z1 -sure -clone,mode=pdump,src=1:2,dst=f:\ghostnt\winnt.gho -split=640
附图显示3.exe内容。
如果硬盘所有分区均为fat32格式,以上命令正确,但如果在D盘前有ntfs分区呢?
显然,此时的src=1:2第一硬盘第二分区指的是winxp下可见的D盘,而win98下根本看不到。

作者: crshen    时间: 2004-5-17 18:23
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
[UploadFile=34_2250_80.rar]
   现上传主要文件,试用时需手工安装,其他需要的驱动程序参见config.sys、autoexe.bat,如有C语言爱好者,可提供源程序,共同探讨。
作者: surfting    时间: 2004-5-17 18:47
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
如何制成一开机按热键就进入软件价面?????????
作者: pcloth    时间: 2004-5-17 19:54
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
可惜我对C真的不熟悉,不然可以和crshen 好好切磋一下
因为我是做出来给普通用户使用的,所以,QBWIN的界面还是很有吸引力的。

作者: k011003179    时间: 2004-5-17 19:54
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
用Ibm的技术
作者: crshen    时间: 2004-5-17 21:34
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
[UploadFile=34_2250_84.jpg]
    对不起,告诉大家一个很不好的消息,由于以前的帖子都是虚拟测试,没出现问题,今天正式分区安装后测试,才发现一个超大BUG,如图:正常启动后分区应该是5个,其中扩展分区下包括1个逻辑分区,但用IBM的F11启动后,gdisk 1 查看分区,由于扩展分区变为隐藏(Status H),其下无论几个逻辑分区均不能显示。Ghost查看同上(毕竟是同一个公司的产品嘛)。因此,一键恢复只能恢复主分区及整个扩展分区,由于盘符和分区数已变化,普通用户无法判断到底该备份哪个分区,基于这个原因,选择分区备份/恢复豪无意义(除非自己重新编写主引导扇区程序)。现停止该项目的开发!
    但该程序可进行修改作为启动光盘恢复/备份程序,如有时间我将重新编写。
作者: hkent    时间: 2004-5-17 21:37
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
按钮里面的东西怎么写
作者: 88988    时间: 2004-5-17 21:39
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
下面引用由pcloth2004/05/17 07:54pm 发表的内容:
可惜我对C真的不熟悉,不然可以和crshen 好好切磋一下
因为我是做出来给普通用户使用的,所以,QBWIN的界面还是很有吸引力的。
(bbs.wuyou.net/non-cgi/usr/34/34_2250_65.jpg)
你的那张两只手的背景是如何做的?在QBWIN中做背景图是哪个命令?还有我想大家对于BUTTON CLICK指令都不是很熟,也就是按下键后就会调运某个命令。能否详细举例说明一下
谢谢。。。。
作者: 双清居    时间: 2004-5-17 22:37
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
[这个贴子最后由双清居在 2004/05/17 10:47pm 第 1 次编辑]

TO: 88988
你给发的Quick Basic 7.1我没有收到,麻烦你再发一次,谢谢!
bbsfans@163.com
作者: jyssysz    时间: 2004-5-17 23:01
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
给大家两个好地方(学习QB、QBWIN的论坛):
http://www.hoker.org/BBS/
http://www.programfan.net/club/bbs.asp?key=qbasic
QBWIN的老家:
http://qbwin.web165.com/
由于工作太忙,加上没有找到QB的有关资料,剩下的工作就大家多作了。
每天我都会上来看进展的。
多谢!!!
作者: 88988    时间: 2004-5-17 23:26
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
pcloth:  下了你的源程序然后在DOS下输入:C>\:QBX /L QBWIN,然后打开一个新程序,调入你的.bas文件可是却出现乱码呀,。。。。。。。。。
不知哪里有错。闷。。。。
作者: kernel    时间: 2004-5-17 23:52
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
谢谢:
kernel@126.com
作者: hkent    时间: 2004-5-18 08:23
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
TO: 88988
乱码显示应该是中文的缘故。
作者: pcloth    时间: 2004-5-18 09:24
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
下面引用由889882004/05/17 11:26pm 发表的内容:
pcloth:  下了你的源程序然后在DOS下输入:C>\:QBX /L QBWIN,然后打开一个新程序,调入你的.bas文件可是却出现乱码呀,。。。。。。。。。
不知哪里有错。闷。。。。
没有错,就是乱码,因为你没有挂DOS下的中文支持,比如UCDOS
不过没关系,你只改程序部分,中文部分用WINDOWS记事本改

作者: pcloth    时间: 2004-5-18 09:28
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
下面引用由889882004/05/17 09:39pm 发表的内容:
你的那张两只手的背景是如何做的?在QBWIN中做背景图是哪个命令?还有我想大家对于BUTTON CLICK指令都不是很熟,也就是按下键后就会调运某个命令。能否详细举例说明一下
谢谢。。。。
不知道你看了我发上来的原代码没有?
其中有一行
      LoadGetData 0, 0, "back.grp", 0, 0, 0
而back.grp就是图片文件
这个文件是用一张640*480*16色的BMP文件通过QBWIN里的QBPICC.EXE程序转换而成的
作者: pcloth    时间: 2004-5-18 09:38
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
[这个贴子最后由pcloth在 2004/05/18 09:40am 第 1 次编辑]

k011003179和crshen
   能否告知QQ号码?
   我的是:1830898
   有些东西可以探讨一下
作者: crshen    时间: 2004-5-18 12:10
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
[这个贴子最后由crshen在 2004/05/18 12:12pm 第 1 次编辑]
下面引用由pcloth2004/05/18 09:38am 发表的内容:
k011003179和crshen
   能否告知QQ号码?
   我的是:1830898
   有些东西可以探讨一下
67154440
别放马,我有防火墙的。
“我是两条交凡线上的交叉点。”你的个人说明打错了字吧!

作者: pcloth    时间: 2004-5-18 13:26
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
下面引用由crshen2004/05/18 12:10pm 发表的内容:
67154440
别放马,我有防火墙的。
“我是两条交凡线上的交叉点。”你的个人说明打错了字吧!
没写错,就是这样的.

作者: 夏日倾情    时间: 2004-5-18 14:03
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
下面引用由hkent2004/05/17 09:37pm 发表的内容:
按钮里面的东西怎么写
是呀,这是难点对于我们菜鸟儿们来说。。。。。。。。。。
PCLOTH,详细说说吧,自己的一键恢复就指望你了。。。。。。

作者: xiecyc    时间: 2004-5-19 11:14
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
谢谢
XIECYC@163.COM
作者: 88988    时间: 2004-5-19 12:51
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
楼主:
   如何写按钮呀。。。。。。。。。
作者: 88988    时间: 2004-5-19 19:46
标题: 想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)
QB 7.1不太会用呀,有没有能说得详细点。。。。。




欢迎光临 无忧启动论坛 (http://wuyou.net./) Powered by Discuz! X3.3