无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 3618|回复: 6

BIOS20B

[复制链接]
发表于 2010-10-7 17:47:05 | 显示全部楼层 |阅读模式
使用QBWIN GUI Library 开发的仿WINDOW程序

学习怎么调用多窗口,怎么编写子程序用的


DECLARE SUB save ()
DECLARE SUB unsave ()
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.FormUnload (NWin%, QBCancel%)
DECLARE SUB C.FrameClick (NWin%, Inx%, Button%)
DECLARE SUB C.FrameDblClick (NWin%, Inx%)
DECLARE SUB C.FrameMouseInOut (NWin%, Inx%, State%)
DECLARE SUB C.FrameMouseState (NWin%, Inx%, X%, Y%, Button%)
DECLARE SUB C.ListChange (NWin%, Inx%, CType%)
DECLARE SUB C.ListClick (NWin%, Inx%)
DECLARE SUB C.ListDblClick (NWin%, Inx%)
DECLARE SUB C.ListKeyPress (NWin%, Inx%, KeyCode%)
DECLARE SUB C.MenuClick (NWin%, MInx%, Inx%)
DECLARE SUB C.OptionClick (NWin%, GInx%, Inx%)
DECLARE SUB C.TextKeyPress (NWin%, Inx%, KeyCode%)
DECLARE SUB C.Timer (NWin%, KeyCode%)
DECLARE FUNCTION ListGet$ (Inx%, ListNo%)
DECLARE SUB LoadWindow (XX%, YY%, W%, H%, Font%, BC%, Box%, TC%, T$)
DECLARE SUB LoadButton (Cmd%)
DECLARE SUB LoadFrame (Memo%)
DECLARE SUB LoadLabel (Memo%, Cmd%)
DECLARE SUB LoadOption ()
DECLARE SUB ProcessLoop ()
DECLARE SUB SetCombo (Inx%, InxNo%)
REM bios2.0b
DEFINT A-Z
'-------------------------------------------------------------------
'定义各控件最多可用的数目:
CONST MaxButton = 9, MaxCheck = 0, MaxOptG = 0, MaxOptI = 1
'        按钮           复选按钮    单选按钮(组数),(每组项目数)
CONST MaxFrame = 0, MaxList = 0, MaxListItem = 100, MaxText = 1
'        框架         列表框   ,  每一列表项目数     文本框
CONST MaxCombo = 0, MaxLabel = 2, MaxMainMenu = 0, MaxMenuItem = 5
'      下拉式列表      标签            菜单           菜单项目
CONST MaxPercent = 0, ListItemBuffer = 64
'        进度条        列表项目大小
CONST ListScrollSpeed = 1       '列表屏幕滚动速度(-1最快)
'$INCLUDE: 'c:\qbwin\QBWIN\QBWIN.BI'
'$INCLUDE: 'c:\qbwin\QBWIN\QBWIN.DAT'
SystemInit 1      '系统初始化
'0:不使用中文字库与输入法文件
'1:必须要中文字库文件(QBWIN.FNT),否则程序不能运行
'-1:如果程序找到有中文字库与输入法文件时可以使用,可以不使用
'定义及初始化用户变量区域 ----------------------------
'-----------------------------------------------------

DO
  '桌面定义
  '格式: DrawDesktop 提示行开关,桌面颜色,提示行字体颜色,背景色,提示文字$
  IF exitwin < 2 THEN DrawDesktop 2, 3, 0, 7, "Ctrl+X:关闭窗口    Ctrl+F1:输入法"
  '各表单控件读入区域, 读入各种控件之间用 [=] 表示该种控件读完
  SELECT CASE wins
    'FORM1.QWF
    CASE 0:
      '格式: LoadWindow X,Y,W,H,Font,BC,Box,TC,Caption
      LoadWindow 179, 81, 302, 304, 810, 8, -1, 1, "BIOS Ver2.0b"
      RESTORE WIN00
WIN00:
      '热键值:  Alt+  F1=360 1=376 Q=272 A=286 Z=300
      'LoadMenu   '读入菜单
      '格式: DATA [-,Hotkey,] Enabled,Value,Caption    []里的参数为分组用
      'DATA -,289,1,0,文件(F)
      'DATA 1,0,Menu(1)
      'DATA =
      '格式: DATA X,Y,BW,FW,FH,FC,BC,FM,Style,Caption
      LoadLabel 0, 0   '读入标签  是否读入到变量, 背景框
      DATA 50,15,0,15,15,2,-1,18,0,"BIOS备份程序  版本V 2.0b"
      DATA 40,225,0,20,20,1,-1,37,0,"玉松工作室开发"
      DATA 160,255,0,20,20,1,-1,37,0,"谢谢使用"
      DATA =
      '格式: DATA X,Y,W,H,Enabled,FC,FW,FH,Hotkey,Caption
      LoadButton 0   '读入命令按钮  背景框
      DATA 90,45,120,19,-1,0,0,12,-1,"保存BIOS到文件"
      DATA 90,80,120,19,-1,0,0,12,-1,"将文件写入BIOS"
      DATA 90,115,120,19,-1,0,0,12,-1,"清除BIOS密码"
      DATA 90,150,120,19,-1,0,0,12,-1,"清空BIOS"
      DATA 90,185,120,19,-1,0,0,12,-1,"返回操作系统"
      DATA =
    'A.QWF
    CASE 1:
      '格式: LoadWindow X,Y,W,H,Font,BC,Box,TC,Caption
      LoadWindow 226, 120, 216, 174, 810, 7, -1, 8, "保存BIOS"
      RESTORE WIN01
WIN01:
      '热键值:  Alt+  F1=360 1=376 Q=272 A=286 Z=300
      'LoadMenu   '读入菜单
      '格式: DATA [-,Hotkey,] Enabled,Value,Caption    []里的参数为分组用
      'DATA -,289,1,0,文件(F)
      'DATA 1,0,Menu(1)
      'DATA =
      '格式: DATA X,Y,W,H,FC,FM,BC,Mode,Caption
      LoadFrame 0   '读入框架  是否读入到变量
      DATA 20,15,170,75,0,0,-1,7,"文件类型"
      DATA =
      '格式: DATA [-,Value,] X,Y,Enabled,Hotkey,Caption    []里的参数为分组用
      LoadOption   '读入单选按钮
      DATA -,0,35,30,-1,-1,"将BIOS保存为*.BIO文件"
      DATA 35,60,-1,-1,"将BIOS保存为*.TXT文件"
      DATA =
      '格式: DATA X,Y,W,H,Enabled,FC,FW,FH,Hotkey,Caption
      LoadButton 0   '读入命令按钮  背景框
      DATA 20,110,60,19,-1,0,0,12,-1,"确定(O)"
      DATA 125,110,60,19,-1,0,0,12,-1,"取消(C)"
      DATA =
    'b.QWF
    CASE 2:
      '格式: LoadWindow X,Y,W,H,Font,BC,Box,TC,Caption
      LoadWindow 244, 134, 216, 174, 10, 7, -1, 8, "写入BIOS"
      RESTORE WIN02
WIN02:
      '热键值:  Alt+  F1=360 1=376 Q=272 A=286 Z=300
      'LoadMenu   '读入菜单
      '格式: DATA [-,Hotkey,] Enabled,Value,Caption    []里的参数为分组用
      'DATA -,289,1,0,文件(F)
      'DATA 1,0,Menu(1)
      'DATA =
      '格式: DATA X,Y,W,H,FC,FM,BC,Mode,Caption
      LoadFrame 0   '读入框架  是否读入到变量
      DATA 20,15,170,75,0,0,-1,7,"文件类型"
      DATA =
      '格式: DATA [-,Value,] X,Y,Enabled,Hotkey,Caption    []里的参数为分组用
      LoadOption   '读入单选按钮
      DATA -,0,35,30,-1,-1,"从*.BIO文件写入数据"
      DATA 35,60,-1,-1,"从*.TXT文件写入数据"
      DATA =
      '格式: DATA X,Y,W,H,Enabled,FC,FW,FH,Hotkey,Caption
      LoadButton 0   '读入命令按钮  背景框
      DATA 20,110,60,19,-1,0,0,12,-1,"确定(O)"
      DATA 125,110,60,19,-1,0,0,12,-1,"取消(C)"
      DATA =

  END SELECT
  IF exitwin = 0 THEN ProcessLoop     '过程循环处理
LOOP
SUB C.ButtonClick (NWin, Inx)
  Sel = NWin * 100 + Inx
  SELECT CASE Sel
    CASE 1:
      exitwin = 2
      wins = 1
    CASE 2
      exitwin = 2
      wins = 2
    CASE 3
      KB$ = "YN"
      CALL MsgBox(KB$, "BIOS", "你确定清除BIOS密码吗?")
      IF KB$ = "N" THEN EXIT SUB
      SHELL "c:\delpw.com"
      CALL MsgBox("O", "BIOS", "密码已经清除")
    CASE 4
      KB$ = "YN"
      CALL MsgBox(KB$, "BIOS", "你确定清空BIOS吗?")
      IF KB$ = "N" THEN EXIT SUB
      SHELL "c:\delete.com"
      CALL MsgBox("O", "BIOS", "BIOS已经清空")
    CASE 5
      UnLoadMe
      END
    CASE 101
      CALL save
    CASE 102
      exitwin = 1
    CASE 201
      CALL unsave
    CASE 202
      exitwin = 1
    END SELECT
END SUB

SUB C.ButtonState (NWin, Inx, State)
  Sel = NWin * 100 + Inx
  SELECT CASE Sel
    CASE 0:
      
  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:
  END SELECT
  
END SUB
SUB C.FrameMouseState (NWin, Inx, X, Y, Button)
  Sel = NWin * 100 + Inx
  SELECT CASE Sel
    CASE 0:
  END SELECT
  
END SUB
SUB C.ListChange (NWin, Inx, CType)
  Sel = NWin * 100 + Inx
  SELECT CASE Sel
    CASE 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:
  END SELECT
END SUB
SUB C.MenuClick (NWin, MInx, Inx)
  DIM Sel AS LONG
  Sel = NWin
  Sel = Sel * 10000 + MInx * 100 + Inx
  SELECT CASE Sel
    CASE 1:
      
  END SELECT
END SUB
SUB C.OptionClick (NWin, GInx, Inx)
  Sel = NWin * 100 + GInx
  SELECT CASE Sel
    CASE 0:
  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:
  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 = MenuNo: 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, ListItemBuffer
END SUB
FUNCTION ListGet$ (Inx, ListNo)
  ListGet$ = XGetListItem$(Inx, ListNo, ListB(), ListI())
END FUNCTION
SUB ListRemove (Inx, RemNo)
  XListRemove Inx, RemNo, ListB(), ListI(), MaxListItem
END SUB
SUB ListSet (Inx, ListNo, Item$)
  XSetListItem Inx, ListNo, Item$, ListB(), ListI()
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
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$)
  ON ERROR RESUME NEXT
  FOR a = 0 TO SumList
    CLOSE ListB(a).FileNo
  NEXT
  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
  MS$ = LEFT$(KeyB$, 1)
  IF MS$ = "@" OR MS$ = "*" 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$): Text(SumText).Password = MS$ = "*"
    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
  RSButton = SumButton + 1
  MouseHide
  GetTX X, Y, W, H, 0
  DrawWindow X, Y, W, H, 10, 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
    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 AND ListB(XL).Index = ListB(XL).RIndex 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
              RrInx = ListB(XL).RIndex
              PrintList XL, XI, XPR, 0, -1, ListB(), ListI(), Win
              ListB(XL).RIndex = RrInx
              C.ListChange RecWins, XL, XPR
              ListB(XL).RIndex = ListB(XL).Index
            END IF
            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 save
   IF optbvalue(0) = 0 THEN
      KB$ = "@50"
      filename$ = "bios.bio"
      CALL MsgBox(KB$, "文件名", filename$)
      IF KB$ = "C" THEN EXIT SUB
      IF filename$ = "" THEN EXIT SUB
      IF RIGHT$(filename$, 4) = ".bio" THEN
         truefilename$ = filename$
         GOTO B:
      END IF
      truefilename$ = filename$ + ".bio"
B:    KB$ = "YN"
      CALL MsgBox(KB$, "保存", "你确定将BIOS保存到 " + truefilename$)
      IF KB$ = "N" THEN EXIT SUB
      free = FREEFILE
      OPEN truefilename$ FOR RANDOM AS free LEN = 2
      FIELD free, 2 AS a$
      FOR i = 1 TO 512
         OUT &H70, i - 1
         V = INP(&H71)
         LSET a$ = MKI$(V)
         PUT free, i
      NEXT i
      CLOSE free
      CALL MsgBox("O", "保存", "BIOS已经保存到" + truefilename$ + "512字节已经保存完毕")
   ELSEIF optbvalue(0) = 1 THEN
      KB$ = "@50"
      filename$ = "bios.txt"
      CALL MsgBox(KB$, "保存", filename$)
      IF KB$ = "C" THEN EXIT SUB
      IF filename$ = "" THEN EXIT SUB
      IF RIGHT$(filename$, 4) = ".txt" THEN
         truefilename$ = filename$
         GOTO d:
      END IF
      truefilename$ = filename$ + ".txt"
d:    KB$ = "YN"
      CALL MsgBox(KB$, "保存", "你确定将BIOS保存到 " + truefilename$)
      IF KB$ = "N" THEN EXIT SUB
      free = FREEFILE
      OPEN truefilename$ FOR OUTPUT AS free
      FOR i = 0 TO 511
         OUT &H70, i
         V = INP(&H71)
         PRINT #free, V
      NEXT i
      CLOSE free
      CALL MsgBox("O", "保存", "BIOS已经保存到" + truefilename$ + "    512字节保存完毕")
   END IF
   exitwin = 1

END SUB
SUB SetCombo (Inx, InxNo)
  a = Inx + SumList + 1
  ListB(a).Index = InxNo
  IF InxNo < 0 THEN ComboTXT(Inx) = "" ELSE ComboTXT(Inx) = ListGet$(a, InxNo)
  PrintCombo Inx, 2, 0, Combo(), ComboTXT(), Win
  'Combo(Inx).REnabled = 2
END SUB
SUB unsave
g: ON ERROR RESUME NEXT
   filename$ = ""
   truefilename$ = ""
   IF optbvalue(1) = 0 THEN
      KB$ = "@50"
      filename$ = "bios.bio"
      CALL MsgBox(KB$, "文件名", filename$)
      IF KB$ = "C" THEN EXIT SUB
      IF filename$ = "" THEN EXIT SUB
      IF RIGHT$(filename$, 4) = ".bio" THEN
         truefilename$ = filename$
         GOTO a:
      END IF
      truefilename$ = filename$ + ".bio"
a:    KB$ = "YN"
      CALL MsgBox(KB$, "写BIOS", "你确定要从" + truefilename$ + "向BIOS写入数据吗")
      IF KB$ = "N" THEN EXIT SUB
      free = FREEFILE
      OPEN truefilename$ FOR RANDOM AS free LEN = 2
      IF ERR = 53 THEN GOTO z:
      IF LOF(free) < 1000 THEN GOTO z:
      FIELD free, 2 AS a$
      FOR i = 1 TO 512
         GET free, i
         OUT &H70, i - 1
         V = CVI(a$)
         OUT &H71, V
      NEXT i
      CLOSE free
      CALL MsgBox("O", "写BIOS", "数据从" + truefilename$ + "写入BIOS 512 字节,完成")
   ELSEIF optbvalue(1) = 1 THEN
      KB$ = "@50"
      filename$ = "bios.txt"
      CALL MsgBox(KB$, "文件名", filename$)
      IF KB$ = "C" THEN EXIT SUB
      IF filename$ = "" THEN EXIT SUB
      IF RIGHT$(filename$, 4) = ".txt" THEN
         truefilename$ = filename$
         GOTO F:
      END IF
      truefilename$ = filename$ + ".txt"
F:    KB$ = "YN"
      CALL MsgBox(KB$, "写BIOS", "你确定要从" + truefilename$ + "向BIOS写入数据吗")
      IF KB$ = "N" THEN EXIT SUB
      free = FREEFILE
      OPEN truefilename$ FOR INPUT AS free
      IF ERR = 53 THEN GOTO z:
      FOR i = 0 TO 511
         INPUT #free, V
         OUT &H70, i
         OUT &H71, V
      NEXT i
      CLOSE free
      CALL MsgBox("O", "写BIOS", "数据从" + truefilename$ + "写入BIOS   512 字节完成")
   END IF
   exitwin = 1
   EXIT SUB
z: CALL MsgBox("O", "错误", "文件未找到")
   CLOSE free
   KILL truefilename$
   exitwin = 1
END SUB


[ 本帖最后由 jszforms 于 2010-10-8 06:59 编辑 ]
s.JPG

bios20.rar

9.27 KB, 下载次数: 51, 下载积分: 无忧币 -2

发表于 2010-10-7 18:06:51 | 显示全部楼层
这个bios20怎么用呀?
谢谢!
回复

使用道具 举报

发表于 2010-10-7 19:46:32 | 显示全部楼层
很疑惑?不管BIOS有没有空间,就硬生生往里写东西?程序里居然还有清空BIOS的操作项目?还有清除BIOS密码的操作项目?BIOS里能够存放密码?搞错了吧?BIOS密码是放在CMOS里的,这里连BIOS和CMOS都没分清,我怀疑这个程序的可靠性。

      DATA 90,45,120,19,-1,0,0,12,-1,"保存BIOS到文件"
      DATA 90,80,120,19,-1,0,0,12,-1,"将文件写入BIOS"
      DATA 90,115,120,19,-1,0,0,12,-1,"清除BIOS密码"
      DATA 90,150,120,19,-1,0,0,12,-1,"清空BIOS"
      DATA 90,185,120,19,-1,0,0,12,-1,"返回操作系统"

[ 本帖最后由 lvyanan 于 2010-10-7 19:48 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2010-10-8 06:54:21 | 显示全部楼层
学习怎么调用多窗口,怎么编写子程序用的(见蓝色加粗部分,这两个子程序qwshell不会自动生成)
不是考虑怎么用这个程序,而是考虑怎么写这个程序

操作BIOS比较危险,当年的cih病毒就是对BIOS操作的,对BIOS的操作还有两个外部程序
delpw.com
delete.com
没找到,即使执行“清空BIOS“也不会启作用

[ 本帖最后由 jszforms 于 2010-10-8 07:05 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2010-10-8 08:44:58 | 显示全部楼层
清除BIOS密码吗的delpw.com制作方法:
copy con delpw.com命令建立一個delpw的可執行文件,然后输入相应的十个字符:
第一、二、三个字符是ALT+176、ALT+17、ALT+230;第四个字符是p;第五、六、七个字符是ALT+176、ATL+20、ATL+230;第八个字符是q;第九个字符是ALT+205;第十字符是空格。
按上述方法将十个字符输入后,按F6存盘,即生成一个十字节的小文件delpw.com,执行它即可。以上方法成功率在95%之上。



清空BIOS的delete.com就难制作了,让主板放电吧

[ 本帖最后由 jszforms 于 2010-10-10 07:42 编辑 ]

DELPW.rar

78 Bytes, 下载次数: 33, 下载积分: 无忧币 -2

回复

使用道具 举报

发表于 2010-10-8 09:04:01 | 显示全部楼层
这个太深奥了吧,看不懂得。
回复

使用道具 举报

 楼主| 发表于 2010-10-10 07:46:30 | 显示全部楼层
另有用debug制作程序,将cmos信息恢复到初始状态
a 100                 从地址100汇编
mov al,10            将10传递到al
out 70,al             将al传递到70端口
mov al,11            将11传递到al
out 71,al              将al传递到71端口
int 3                    端口3  ???

rcx                      ???
9                         ???
n cmosdel.com       以cmosdel.com为文件名
w                         写盘
q                          退出


生成cmosdel.com,运行cmosdel.com即可将cmos信息恢复到初始状态 ,这一方法编程过程清楚,但运行cmosdel.com后死机(期待高人修改成运行cmosdel.com不死机.......),按主机上reset重启,重新设置cmos参数

5楼的delpw.com运行后不死机,返回dos,编程过程不清楚,也不明白

[ 本帖最后由 jszforms 于 2010-10-10 07:50 编辑 ]

cmosdel.rar

799 Bytes, 下载次数: 34, 下载积分: 无忧币 -2

回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-3-29 03:40

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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