Dos下怎么做
有没有QB的例子

解决方案 »

  1.   

    我曾经在ASM区问过
    他们说没有这个Dos中断功能
    要我去查硬盘中断
    靠!我要是有硬盘中断的资料,还会去问吗
      

  2.   

    to:zyl910(910:分儿,我来了!) 呵呵,你也用过QB么?我用了5年多DOS下面如果要获取分区是否存取,我以前是用使用Out来获取的
      

  3.   

    to:zyl910(910:分儿,我来了!) 呵呵,你也用过QB么?我用了5年多DOS下面如果要获取分区是否存取,我以前是用使用Out来获取的
      

  4.   

    to: zyl910(910:分儿,我来了!)几年前的事情,真的忘记了,我的确实现过类似的效果。不过代码因为硬盘毁坏,没有了,几年的东西全部丢失,所以干脆跑来windows阵地。为了这件事情,悲痛了好几个月,到现在仍然耿耿于怀啊!
      

  5.   

    to:zyl910(910:分儿,我来了!) 呵呵,真的忘记了如果不认为我说的话是废话的话:http://www.google.com/search?q=quickbasic&hl=zh-CN&lr=
      

  6.   

    to: zyl910(910:分儿,我来了!) ^_^
      

  7.   

    Zy910: enmity 兄代码中的TypeOfDrive函数即可判断某个盘符是什么驱动器(无、软盘、硬盘、光驱……),是否能够读取(比如光驱力是否有盘)可用以下代码Public Function DriveReady(ByVal strDrive As String) As Boolean    Dim strNullFile As String
        On Error Resume Next
        
        strDrive = Left(strDrive, 1)
        strNullFile = Dir(strDrive & ":\NUL")
        If strNullFile = "NUL" Then
            DriveReady = True
        Else
            DriveReady = False
        End IfEnd Function调用代码
    Private Sub Form_Click()    Dim strDrive As String
        
        strDrive = "A"  ' 测试软驱是否有效
        If DriveReady(strDrive) Then
            MsgBox "Drive " & strDrive & " is ready!"
        Else
            MsgBox "Drive " & strDrive & " is not ready!"
        End IfEnd Sub
      

  8.   

    to:billj(小金) 不错的方法!懂得利用“NUL”的特性。我会额外加20分给你,呵呵。
      

  9.   

    enmity(灵感之源) :  小弟先谢了!
      

  10.   

    To billj(小金):
    QB有Dir函数吗?!
    有GetDriveType这个API吗?!
      

  11.   

    to:zyl910(910:分儿,我来了!) QB有Dir这个函数,看来你对QB的认识还不深啊。
      

  12.   

    刚才查QB的帮助文件才发现:
    QBasic、QB4.5都没有Dir$函数
    QB7.1中才有DIR$[(filespec$)]   filespec$   A string expression that specifies a filename or path.   The path and filename can include a drive and DOS wildcard characters.Returns
       A filename that matches the specified pattern.
    这个Dir的功能太弱了
    不可以指定属性(比如需要得到文件夹列表)
    我曾经通过调用Dos中断的方法写了一个Dir函数
      

  13.   

    'FileList'如果是 Quick BASIC ,请用带库方式打开
    '如: Qb /l Qb.qlb FileList.bas   'QB4.5
    '或: Qbx /l Qbx.qlb FileList.bas 'QB7.1' Writer  = ZYL910
    'HomePage = http://zyl910.yeah.net
    ' E-Mail  = [email protected]'#############################################################################
    '-- 调用终端 (R&W Int) -------------------------------------------------------
    TYPE Regs386
        AX    AS INTEGER
        BX    AS INTEGER
        CX    AS INTEGER
        DX    AS INTEGER
        SI    AS INTEGER
        DI    AS INTEGER
        DS    AS INTEGER
        ES    AS INTEGER
        Flags AS INTEGER
        BP    AS INTEGER
        ' standard ^
        FS    AS INTEGER
        GS    AS INTEGER
        EAX   AS LONG
        EBX   AS LONG
        ECX   AS LONG
        EDX   AS LONG
        ESI   AS LONG
        EDI   AS LONG
        EBP   AS LONG
        ' extended ^
    END TYPE
    DECLARE SUB Int386 (intNum AS INTEGER, RegIn AS Regs386, RegOut AS Regs386)
    DECLARE SUB FIXREGS (r AS Regs386)'== R&W Mem ==================================================================
    DECLARE FUNCTION GetGoodSeg% (SrcSeg AS INTEGER, SrcPtr AS INTEGER)
    DECLARE FUNCTION ReadCStr$ (ReadSeg AS INTEGER, ReadPtr AS INTEGER)
    DECLARE FUNCTION ReadMem$ (ReadSeg AS INTEGER, ReadPtr AS INTEGER, ReadLen AS INTEGER)'== (File) or (System) =======================================================
    TYPE DateType
        Y AS INTEGER 'Year
        M AS INTEGER 'Month
        D AS INTEGER 'Day
    END TYPETYPE TimeType
        H AS INTEGER 'Hour
        M AS INTEGER 'Minute
        S AS INTEGER 'Second
    END TYPETYPE FileInfo
        FileName AS STRING * 12
        Attrib AS INTEGER
        FileLen AS LONG
        FileDate AS DateType
        FileTime AS TimeType
    END TYPEDECLARE FUNCTION GetCurDrive$ ()
    DECLARE FUNCTION GetDrvPath$ (DriveName AS STRING, AddDriveName AS INTEGER)
    DECLARE FUNCTION GetCurPath$ ()
    DECLARE FUNCTION ZDir% (FindStr AS STRING, FindAttrib AS INTEGER, OutFileInfo AS FileInfo)
    DECLARE FUNCTION GetDrvSize& (DriveName AS STRING)
    DECLARE FUNCTION GetDrvFree& (DriveName AS STRING)CONST MaxFindStrLen = 256 '文件查找字符串的最大长度
    CONST MaxPathStrLen = 256 '文件路径字符串的最大长度CONST vbNormal = 0
    CONST vbReadOnly = 1
    CONST vbHidden = 2
    CONST vbSystem = 4
    CONST vbVolume = 8
    CONST vbDirectory = &H10 '16
    CONST vbArchive = &H20 '32
    CONST vbAlias = &H40 '64TYPE DOSVerInfo
        MainVer AS INTEGER
        SubVer AS INTEGER
        VerFlags AS INTEGER
        SerNum AS LONG
    END TYPEDECLARE FUNCTION GetPSP% ()
    DECLARE FUNCTION GetExeFile$ ()
    DECLARE FUNCTION GetFilePath$ (FileStr AS STRING)
    DECLARE FUNCTION GetFileName$ (FileStr AS STRING)
    DECLARE SUB GetDOSVer (OutDOSVer AS DOSVerInfo)'== (Num Type) or (String) ===================================================
    DECLARE FUNCTION Lng2Int% (LngNum AS LONG)
    DECLARE FUNCTION Int2Lng& (intNum AS INTEGER)
    DECLARE FUNCTION DQFS$ (FSNum AS INTEGER, DQStr AS STRING, StrLen AS INTEGER)
    DECLARE FUNCTION DQFSEx$ (FSNum AS INTEGER, DQStr AS STRING, StrLen AS INTEGER, FillStr AS STRING)
    DECLARE FUNCTION RightFindStr% (StrSrc AS STRING, StrFind AS STRING)DIM SHARED ReChar AS STRING * 1 '填充字符'#############################################################################'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    DIM GetFI AS FileInfo
    DIM DOSVer AS DOSVerInfo
    DIM I AS INTEGER, J AS INTEGER
    DIM TempLng AS LONG
    DIM TempStr AS STRINGPRINTPRINT STRING$(2, "#"); " Info "; STRING$(72, "#");
    PRINT STRING$(2, "="); " DOS "; STRING$(73, "=");
    GetDOSVer DOSVer
    PRINT "DOS Ver = "; LTRIM$(RTRIM$(STR$(DOSVer.MainVer))); "."; LTRIM$(RTRIM$(STR$(DOSVer.SubVer)))
    PRINT "  Flags = "; DOSVer.VerFlags
    PRINT "Ser Num = "; DOSVer.SerNumPRINT STRING$(2, "="); " Exe "; STRING$(73, "=");
    TempStr = GetExeFile$
    PRINT "ExePath = "; GetFilePath$(TempStr)
    PRINT "ExeName = "; GetFileName$(TempStr)
    PRINT STRING$(2, "="); " Drive "; STRING$(71, "=");
    TempStr = GetCurDrive$ + ":"
    PRINT " Drive  = "; TempStr
    I = ZDir(TempStr + "\*.*", vbVolume, GetFI)
    PRINT " Volume = "; RTRIM$(GetFI.FileName)
    PRINT "DrvSize = "; GetDrvSize(GetCurDrive)
    PRINT "CurPath = "; GetCurPath$
    PRINT STRING$(80, "-")
    IF COMMAND$ <> "" THEN WHILE INKEY$ = "": WENDI = ZDir("*.*", vbDirectory OR vbReadOnly OR vbArchive OR vbHidden OR vbSystem, GetFI)
    IF I THEN
        I = 0: J = 0: TempLng = 0
        GOSUB EchoFileInfo
        DO WHILE ZDir("", 0, GetFI)
            IF COMMAND$ = "" THEN WHILE INKEY$ = "": WEND
            GOSUB EchoFileInfo
        LOOP
    END IFPRINT STRING$(80, "-")
    PRINT DQFSEx$(-1, LTRIM$(RTRIM$(STR$(I))), 5, " "); " File(s) ";
    PRINT DQFSEx$(-1, LTRIM$(RTRIM$(STR$(TempLng))), 10, " "); " Byte(s)"
    PRINT DQFSEx$(-1, LTRIM$(RTRIM$(STR$(J))), 5, " "); " Dir(s)  ";
    PRINT DQFSEx$(-1, LTRIM$(RTRIM$(STR$(GetDrvFree(GetCurDrive)))), 10, " "); " Byte(s) Free"
    PRINTENDEchoFileInfo:
    'IF GetFI.Attrib AND vbDirectory THEN
        PRINT GetFI.FileName; "| ";
        IF GetFI.Attrib AND vbDirectory THEN
            TempStr = DQFSEx$(1, "<Dir>", 10, " ")
            J = J + 1
        ELSE
            TempStr = DQFSEx$(-1, LTRIM$(RTRIM$(STR$(GetFI.FileLen))), 10, " ")
            I = I + 1
            TempLng = TempLng + GetFI.FileLen
        END IF
        PRINT TempStr;    'TempStr = HEX$(GetFI.Attrib)
        TempStr = ""
        'IF GetFI.Attrib AND vbDirectory THEN TempStr = TempStr + "D" ELSE TempStr = TempStr + "-"
        IF GetFI.Attrib AND vbReadOnly THEN TempStr = TempStr + "R" ELSE TempStr = TempStr + "-"
        IF GetFI.Attrib AND vbArchive THEN TempStr = TempStr + "A" ELSE TempStr = TempStr + "-"
        IF GetFI.Attrib AND vbHidden THEN TempStr = TempStr + "H" ELSE TempStr = TempStr + "-"
        IF GetFI.Attrib AND vbSystem THEN TempStr = TempStr + "S" ELSE TempStr = TempStr + "-"
        PRINT " | "; TempStr; " | ";    TempStr = DQFSEx$(-1, LTRIM$(RTRIM$(STR$(GetFI.FileDate.Y))), 4, "0")
        TempStr = TempStr + "-" + DQFSEx$(-1, LTRIM$(RTRIM$(STR$(GetFI.FileDate.M))), 2, "0")
        TempStr = TempStr + "-" + DQFSEx$(-1, LTRIM$(RTRIM$(STR$(GetFI.FileDate.D))), 2, "0")
        'TempStr = TempStr + (SPACE$(10 - LEN(TempStr)))
        PRINT TempStr; " | ";    TempStr = DQFSEx$(-1, LTRIM$(RTRIM$(STR$(GetFI.FileTime.H))), 2, "0")
        TempStr = TempStr + ":" + DQFSEx$(-1, LTRIM$(RTRIM$(STR$(GetFI.FileTime.M))), 2, "0")
        TempStr = TempStr + ":" + DQFSEx$(-1, LTRIM$(RTRIM$(STR$(GetFI.FileTime.S))), 2, "0")
        TempStr = TempStr + (SPACE$(8 - LEN(TempStr)))
        PRINT TempStr; " | ";    PRINT'END IF
    RETURN
      

  14.   


    FUNCTION DQFS$ (FSNum AS INTEGER, DQStr AS STRING, StrLen AS INTEGER)
        '字符串对齐
        'FSNum : 对齐方式
        'DQStr : 源字符串
        'StrLen: 长度    DIM TempNum AS INTEGER
        DIM TempStr AS STRING    TempNum = LEN(DQStr)
        IF TempNum = StrLen THEN DQFS$ = DQStr: EXIT FUNCTION
        IF FSNum > 0 THEN 'Left
            IF TempNum > StrLen THEN
                DQFS$ = LEFT$(DQStr, StrLen)
            ELSE
                DQFS$ = DQStr + STRING$(StrLen - TempNum, ReChar)
            END IF
        ELSEIF FSNum = 0 THEN 'Center
            DIM LeftNum AS INTEGER
            LeftNum = ABS(StrLen - TempNum) \ 2
            IF TempNum > StrLen THEN
                DQFS$ = MID$(DQStr, LeftNum, StrLen)
            ELSE
                DQFS$ = STRING$(LeftNum, ReChar) + DQStr + STRING$(StrLen - LeftNum, ReChar)
            END IF
        ELSE 'Right
            IF TempNum > StrLen THEN
                DQFS$ = RIGHT$(DQStr, StrLen)
            ELSE
                DQFS$ = STRING$(StrLen - TempNum, ReChar) + DQStr
            END IF
        END IFEND FUNCTIONFUNCTION DQFSEx$ (FSNum AS INTEGER, DQStr AS STRING, StrLen AS INTEGER, FillStr AS STRING)
        '字符串对齐加强版
        'FSNum  : 对齐方式
        'DQStr  : 源字符串
        'StrLen : 长度
        'FillStr: 填充字符    DIM OldReChar AS STRING * 1    OldReChar = ReChar
        ReChar = FillStr
        DQFSEx$ = DQFS$(FSNum, DQStr, StrLen)
        ReChar = OldReCharEND FUNCTIONSUB FIXREGS (r AS Regs386)
        '把32位寄存体转为16位寄存体    IF (r.AX = 0) AND (r.EAX <> 0) THEN r.AX = Lng2Int(r.EAX AND &HFFFF)
        IF (r.BX = 0) AND (r.EBX <> 0) THEN r.BX = Lng2Int(r.EBX AND &HFFFF)
        IF (r.CX = 0) AND (r.ECX <> 0) THEN r.CX = Lng2Int(r.ECX AND &HFFFF)
        IF (r.DX = 0) AND (r.EDX <> 0) THEN r.DX = Lng2Int(r.EDX AND &HFFFF)
        IF (r.SI = 0) AND (r.ESI <> 0) THEN r.SI = Lng2Int(r.ESI AND &HFFFF)
        IF (r.DI = 0) AND (r.EDI <> 0) THEN r.DI = Lng2Int(r.EDI AND &HFFFF)
        IF (r.BP = 0) AND (r.EBP <> 0) THEN r.BP = Lng2Int(r.EBP AND &HFFFF)
    END SUBFUNCTION GetCurDrive$
        '取得当前盘符    DIM Regs AS Regs386    Regs.AX = &H1900
        CALL Int386(&H21, Regs, Regs)
        GetCurDrive$ = CHR$((Regs.AX AND &HFF) + ASC("A"))END FUNCTIONFUNCTION GetCurPath$
        '取得当前路径    GetCurPath$ = GetDrvPath$(GetCurDrive$, -1)END FUNCTIONSUB GetDOSVer (OutDOSVer AS DOSVerInfo)
        DIM Regs AS Regs386    Regs.AX = &H3000
        CALL Int386(&H21, Regs, Regs)
        OutDOSVer.MainVer = Regs.AX AND &HFF
        OutDOSVer.SubVer = (Int2Lng(Regs.AX) AND &HFF00&) \ &H100
        OutDOSVer.VerFlags = (Int2Lng(Regs.BX) AND &HFF00&) \ &H100
        OutDOSVer.SerNum = Int2Lng(Regs.CX)
        OutDOSVer.SerNum = OutDOSVer.SerNum OR (Regs.BX AND &HFF) * &H10000END SUBFUNCTION GetDrvFree& (DriveName AS STRING)
        '取得剩余磁盘空间
        'DriveName : 盘符    DIM Regs AS Regs386
        DIM TempStr AS STRING
        DIM TempDBL AS DOUBLE    Regs.AX = &H3600
        TempStr = UCASE$(MID$(DriveName, 1, 1))
        'PRINT TempStr
        IF ASC(TempStr) < ASC("A") OR ASC(TempStr) > ASC("Z") THEN EXIT FUNCTION
        Regs.DX = ASC(TempStr) - ASC("A") + 1
        CALL Int386(&H21, Regs, Regs)    TempDBL = 1
        TempDBL = TempDBL * Regs.ECX
        TempDBL = TempDBL * Regs.EAX
        TempDBL = TempDBL * Regs.EBX
        GetDrvFree& = TempDBLEND FUNCTION
      

  15.   


    FUNCTION GetDrvPath$ (DriveName AS STRING, AddDriveName AS INTEGER)
        '取得指定盘符的路径
        'DriveName    : 盘符
        'AddDriveName : 输出时是否加上盘符    DIM Regs AS Regs386
        DIM DataStr AS STRING * MaxPathStrLen
        DIM TempStr AS STRING
        DIM I AS INTEGER    Regs.AX = &H4700
        TempStr = UCASE$(MID$(DriveName, 1, 1))
        'PRINT TempStr
        IF ASC(TempStr) < ASC("A") OR ASC(TempStr) > ASC("Z") THEN EXIT FUNCTION
        Regs.DX = ASC(TempStr) - ASC("A") + 1
        Regs.SI = VARPTR(DataStr)
        Regs.DS = VARSEG(DataStr)
        CALL Int386(&H21, Regs, Regs)    TempStr = DataStr
        I = INSTR(TempStr, CHR$(0))
        IF I > 0 THEN TempStr = LEFT$(TempStr, I - 1)    IF AddDriveName THEN TempStr = DriveName + ":\" + TempStr
        GetDrvPath$ = TempStrEND FUNCTIONFUNCTION GetDrvSize& (DriveName AS STRING)
        '取得磁盘大小
        'DriveName : 盘符    DIM Regs AS Regs386
        DIM TempStr AS STRING
        DIM TempDBL AS DOUBLE    Regs.AX = &H3600
        TempStr = UCASE$(MID$(DriveName, 1, 1))
        'PRINT TempStr
        IF ASC(TempStr) < ASC("A") OR ASC(TempStr) > ASC("Z") THEN EXIT FUNCTION
        Regs.DX = ASC(TempStr) - ASC("A") + 1
        CALL Int386(&H21, Regs, Regs)    TempDBL = 1
        TempDBL = TempDBL * Regs.ECX
        TempDBL = TempDBL * Regs.EAX
        TempDBL = TempDBL * Regs.EDX
        GetDrvSize& = TempDBLEND FUNCTIONFUNCTION GetExeFile$
        '取得程序所在目录与文件名    DIM TempSeg AS INTEGER
        DIM I AS INTEGER    TempSeg = GetPSP
        TempSeg = CVI(ReadMem(TempSeg, &H2C, 2))
        
        DEF SEG = TempSeg
        DO
            IF PEEK(I) + PEEK(I + 1) = 0 THEN EXIT DO
            IF I = &H7FFE THEN EXIT FUNCTION
            I = I + 1    LOOP
        DEF SEG
        'PRINT I + 4;hex$(I + 4)
        'STOP
        GetExeFile$ = ReadCStr(TempSeg, I + 4)END FUNCTIONFUNCTION GetFileName$ (FileStr AS STRING)
        '取得“目录与文件名”字符串中的文件名
        'FileStr : “目录与文件名”字符串    DIM TempNum AS INTEGER    TempNum = RightFindStr(FileStr, "\")
        IF TempNum THEN GetFileName$ = MID$(FileStr, TempNum + 1)END FUNCTIONFUNCTION GetFilePath$ (FileStr AS STRING)
        '取得“目录与文件名”字符串中的目录
        'FileStr : “目录与文件名”字符串    DIM TempNum AS INTEGER    TempNum = RightFindStr(FileStr, "\")
        IF TempNum THEN GetFilePath$ = LEFT$(FileStr, TempNum - 1)END FUNCTIONFUNCTION GetGoodSeg% (SrcSeg AS INTEGER, SrcPtr AS INTEGER)
        '计算最好的段地址
        'SrcSeg : 段地址
        'SrcPtr : 偏移地址    DIM OutSeg AS LONG    OutSeg = Int2Lng(SrcSeg)
        OutSeg = OutSeg + Int2Lng(SrcPtr AND &HFFF0) \ &H10
        OutSeg = Lng2Int(OutSeg)    GetGoodSeg% = OutSegEND FUNCTIONFUNCTION GetPSP%
        '取得程序的 PSP 段地址    DIM Regs AS Regs386    Regs.AX = &H5100
        CALL Int386(&H21, Regs, Regs)
        GetPSP% = Regs.BXEND FUNCTION
      

  16.   

    FUNCTION Int2Lng& (intNum AS INTEGER)
        '整型 转 长整形
        'intNum : 整型数据    DIM TempLng AS LONG    TempLng = intNum AND &H7FFF
        IF intNum AND &H8000 THEN TempLng = TempLng + &H8000&
        Int2Lng& = TempLngEND FUNCTIONSUB Int386 (intNum AS INTEGER, RegIn AS Regs386, RegOut AS Regs386)
        '386中断调用
        'intNum : 中断号
        'RegIn  : 输入寄存体
        'RegOut : 输出寄存体    DIM ASM.Int386 AS STRING * 129
        DIM ASMStr AS STRING    FIXREGS RegIn    '#########################################################################
        '<insert code here>
        ASMStr = ASMStr + CHR$(&H55)                  '0000  PUSH BP        55
        ASMStr = ASMStr + CHR$(&H8B) + CHR$(&HEC)     '0001  MOV BP, SP     8BEC
        ASMStr = ASMStr + CHR$(&H1E)                  '0003  PUSH DS        1E
                                                      '0004  ADD BP, 06   81C50600
        ASMStr = ASMStr + CHR$(&H81) + CHR$(&HC5) + CHR$(&H6) + CHR$(&H0)
        '** Change Segment ***************************
                                                      '0008  MOV SI, ----   BE----
        ASMStr = ASMStr + CHR$(&HBE) + MKI$(VARPTR(RegIn.AX))
        '=============================================
                                                      '000B  MOV CX, 0C     B90C00
        ASMStr = ASMStr + CHR$(&HB9) + CHR$(&HC) + CHR$(&H0)
                                                      '000E  MOV DX, 02     BA0200
        ASMStr = ASMStr + CHR$(&HBA) + CHR$(&H2) + CHR$(&H0)
        'next2push:
        ASMStr = ASMStr + CHR$(&HFF) + CHR$(&H34)     '0011  PUSH [SI]      FF35
        ASMStr = ASMStr + CHR$(&H3) + CHR$(&HF2)      '0013  ADD SI, DX     03FA
        ASMStr = ASMStr + CHR$(&HE2) + CHR$(&HFA)     '0015  LOOP next2push E2FA
        '=============================================
                                                      '0017  MOV CX, 07     B90700
        ASMStr = ASMStr + CHR$(&HB9) + CHR$(&H7) + CHR$(&H0)
                                                      '001A  MOV DX, 04     BA0400
        ASMStr = ASMStr + CHR$(&HBA) + CHR$(&H4) + CHR$(&H0)
        'next4push:
        ASMStr = ASMStr + CHR$(&H66)                  '001D  NOP            66
        ASMStr = ASMStr + CHR$(&HFF) + CHR$(&H34)     '001E  PUSH [SI]      FF35
        ASMStr = ASMStr + CHR$(&H3) + CHR$(&HF2)      '0020  ADD SI, DX     03FA
        ASMStr = ASMStr + CHR$(&HE2) + CHR$(&HF9)     '0022  LOOP next4push E2F9
        '=============================================
        ASMStr = ASMStr + CHR$(&H66)                  '0024  NOP            66
        ASMStr = ASMStr + CHR$(&H5D)                  '0025  POP BP         5D
        ASMStr = ASMStr + CHR$(&H66)                  '0026  NOP            66
        ASMStr = ASMStr + CHR$(&H5F)                  '0027  POP DI         5F
        ASMStr = ASMStr + CHR$(&H66)                  '0028  NOP            66
        ASMStr = ASMStr + CHR$(&H5E)                  '0029  POP SI         5E
        ASMStr = ASMStr + CHR$(&H66)                  '002A  NOP            66
        ASMStr = ASMStr + CHR$(&H5A)                  '002B  POP DX         5A
        ASMStr = ASMStr + CHR$(&H66)                  '002C  NOP            66
        ASMStr = ASMStr + CHR$(&H59)                  '002D  POP CX         59
        ASMStr = ASMStr + CHR$(&H66)                  '002E  NOP            66
        ASMStr = ASMStr + CHR$(&H5B)                  '002F  POP BX         5B
        ASMStr = ASMStr + CHR$(&H66)                  '0030  NOP            66
        ASMStr = ASMStr + CHR$(&H58)                  '0031  POP AX         58
        '=============================================
        ASMStr = ASMStr + CHR$(&HF)                   '0049  NOP            0F
        ASMStr = ASMStr + CHR$(&HA9)                  '004A  POP GS         A9
        ASMStr = ASMStr + CHR$(&HF)                   '004B  NOP            0F
        ASMStr = ASMStr + CHR$(&HA1)                  '004C  POP FS         A1
        '=============================================
        ASMStr = ASMStr + CHR$(&H5D)                  '0036  POP BP         5D
        ASMStr = ASMStr + CHR$(&H9D)                  '0037  POPF           9D
        ASMStr = ASMStr + CHR$(&H7)                   '0038  POP ES         07
        ASMStr = ASMStr + CHR$(&H1F)                  '0039  POP DS         1F
        ASMStr = ASMStr + CHR$(&H5F)                  '003A  POP DI         5F
        ASMStr = ASMStr + CHR$(&H5E)                  '003B  POP SI         5E
        ASMStr = ASMStr + CHR$(&H5A)                  '003C  POP DX         5A
        ASMStr = ASMStr + CHR$(&H59)                  '003D  POP CX         59
        ASMStr = ASMStr + CHR$(&H5B)                  '003E  POP BX         5B
        ASMStr = ASMStr + CHR$(&H58)                  '003F  POP AX         58
      

  17.   


        '** Int **************************************
        ASMStr = ASMStr + CHR$(&HCD) + CHR$(intNum)   '0039  INT --         CD--
        '=============================================
        ASMStr = ASMStr + CHR$(&H66)                  '0042  NOP            66
        ASMStr = ASMStr + CHR$(&H55)                  '0043  PUSH BP        55
        ASMStr = ASMStr + CHR$(&H66)                  '0044  NOP            66
        ASMStr = ASMStr + CHR$(&H57)                  '0045  PUSH DI        57
        ASMStr = ASMStr + CHR$(&H66)                  '0046  NOP            66
        ASMStr = ASMStr + CHR$(&H56)                  '0047  PUSH SI        56
        ASMStr = ASMStr + CHR$(&H66)                  '0048  NOP            66
        ASMStr = ASMStr + CHR$(&H52)                  '0049  PUSH DX        52
        ASMStr = ASMStr + CHR$(&H66)                  '004A  NOP            66
        ASMStr = ASMStr + CHR$(&H51)                  '004B  PUSH CX        51
        ASMStr = ASMStr + CHR$(&H66)                  '004C  NOP            66
        ASMStr = ASMStr + CHR$(&H53)                  '004D  PUSH BX        53
        ASMStr = ASMStr + CHR$(&H66)                  '004E  NOP            66
        ASMStr = ASMStr + CHR$(&H50)                  '004F  PUSH AX        50
        '=============================================
        ASMStr = ASMStr + CHR$(&HF)                   '0049  NOP            0F
        ASMStr = ASMStr + CHR$(&HA8)                  '004A  PUSH GS        A1
        ASMStr = ASMStr + CHR$(&HF)                   '004B  NOP            0F
        ASMStr = ASMStr + CHR$(&HA0)                  '004C  PUSH FS        A0
        '=============================================
        ASMStr = ASMStr + CHR$(&H55)                  '0054  PUSH BP        55
        ASMStr = ASMStr + CHR$(&H9C)                  '0055  PUSHF          9C
        ASMStr = ASMStr + CHR$(&H6)                   '0056  PUSH ES        06
        ASMStr = ASMStr + CHR$(&H1E)                  '0057  PUSH DS        1E
        ASMStr = ASMStr + CHR$(&H57)                  '0058  PUSH DI        57
        ASMStr = ASMStr + CHR$(&H56)                  '0059  PUSH SI        56
        ASMStr = ASMStr + CHR$(&H52)                  '005A  PUSH DX        52
        ASMStr = ASMStr + CHR$(&H51)                  '005B  PUSH CX        51
        ASMStr = ASMStr + CHR$(&H53)                  '005C  PUSH BX        53
        ASMStr = ASMStr + CHR$(&H50)                  '005D  PUSH AX        50
        ASMStr = ASMStr + CHR$(&H8C) + CHR$(&HD0)     '005E  MOV AX, SS     8CD0
        ASMStr = ASMStr + CHR$(&H8E) + CHR$(&HD8)     '0060  MOV DS, AX     8ED8
        '*********************************************
                                                      '0062  MOV DI, ----   BF----
        ASMStr = ASMStr + CHR$(&HBF) + MKI$(VARPTR(RegOut.AX))
        '=============================================
                                                      '0065  MOV CX, 0C     B90C00
        ASMStr = ASMStr + CHR$(&HB9) + CHR$(&HC) + CHR$(&H0)
                                                      '0068  MOV DX, 02     BA0200
        ASMStr = ASMStr + CHR$(&HBA) + CHR$(&H2) + CHR$(&H0)
        'next2pop:
        ASMStr = ASMStr + CHR$(&H8F) + CHR$(&H5)      '006B  POP [DI]       8F05
        ASMStr = ASMStr + CHR$(&H3) + CHR$(&HFA)      '006D  ADD DI, DX     03FA
        ASMStr = ASMStr + CHR$(&HE2) + CHR$(&HFA)     '006F  LOOP next2pop  E2FA
        '=============================================
                                                      '0071  MOV CX, 07     B90700
        ASMStr = ASMStr + CHR$(&HB9) + CHR$(&H7) + CHR$(&H0)
                                                      '0074  MOV DX, 04     BA0400
        ASMStr = ASMStr + CHR$(&HBA) + CHR$(&H4) + CHR$(&H0)
        'next4pop:
        ASMStr = ASMStr + CHR$(&H66)                  '0077  NOP            66
        ASMStr = ASMStr + CHR$(&H8F) + CHR$(&H5)      '0078  POP [DI]       8F05
        ASMStr = ASMStr + CHR$(&H3) + CHR$(&HFA)      '007A  ADD DI, DX     03FA
        ASMStr = ASMStr + CHR$(&HE2) + CHR$(&HF9)     '007C  LOOP next4pop  E2F9
        '=============================================
        ASMStr = ASMStr + CHR$(&H1F)                  '007E  POP DS         1F
        ASMStr = ASMStr + CHR$(&H5D)                  '007F  POP BP         5D
        ASMStr = ASMStr + CHR$(&HCB)                  '0080  RETF           CB
        '#########################################################################    'PRINT LEN(ASMStr); HEX$(LEN(ASMStr))
        'END
        ASM.Int386 = ASMStr    DEF SEG = VARSEG(ASM.Int386)
        CALL ABSOLUTE(VARPTR(RegIn), VARPTR(RegOut), VARPTR(ASM.Int386))
        DEF SEGEND SUB
      

  18.   

    FUNCTION Lng2Int% (LngNum AS LONG)
        '长整型 转 整形
        'LngNum : 长整型数据  DIM TempLng AS LONG  TempLng = LngNum AND &H7FFF
      IF LngNum AND &H8000& THEN TempLng = TempNum - &H8000&  Lng2Int = TempLng
    END FUNCTIONFUNCTION ReadCStr$ (ReadSeg AS INTEGER, ReadPtr AS INTEGER)
        '在内存中读取一个 C语言字符串(以0结尾的字符串)
        'ReadSeg : 读取的段地址
        'ReadPtr : 读取的偏移地址    DIM I AS INTEGER ', SetSeg AS INTEGER
        DIM TempNum AS INTEGER
        DIM OutStr AS STRING    'PRINT HEX$(ReadSeg); ":"; HEX$(ReadPtr)
        I = ReadPtr AND &HF
        'SetSeg = GetGoodSeg(ReadSeg, ReadPtr)
        'PRINT HEX$(SetSeg); ":"; HEX$(I)
        DEF SEG = GetGoodSeg(ReadSeg, ReadPtr) 'SetSeg
        DO
            TempNum = PEEK(I)
            IF TempNum = 0 THEN EXIT DO
            OutStr = OutStr + CHR$(TempNum)
            IF I = &H7FFF THEN EXIT DO
            I = I + 1
        LOOP
        DEF SEG
        ReadCStr$ = OutStrEND FUNCTIONFUNCTION ReadMem$ (ReadSeg AS INTEGER, ReadPtr AS INTEGER, ReadLen AS INTEGER)
        '从内存中读取一串数据
        'ReadSeg : 读取的段地址
        'ReadPtr : 读取的偏移地址
        'ReadLen : 读取的长度    DIM I AS INTEGER
        DIM TempNum AS INTEGER
        DIM OutStr AS STRING    IF ReadLen < 1 THEN EXIT FUNCTION
        I = ReadPtr AND &HF
        DEF SEG = GetGoodSeg(ReadSeg, ReadPtr) 'SetSeg
        FOR I = 1 TO ReadLen
            TempNum = PEEK(I + (ReadPtr AND &HF) - 1)
            OutStr = OutStr + CHR$(TempNum)
            IF I = &H7FFF THEN EXIT FOR
        NEXT I
        DEF SEG
        ReadMem$ = OutStrEND FUNCTIONFUNCTION RightFindStr% (StrSrc AS STRING, StrFind AS STRING)
        '从右侧开始查找字符串
        'StrSrc  : 源字符串
        'StrFind : 查找字符串    DIM I AS INTEGER, J AS INTEGER
        DIM TempNum AS INTEGER    TempNum = LEN(StrFind)
        DO
            IF J THEN
                I = INSTR(J, StrSrc, StrFind)
            ELSE
                I = INSTR(StrSrc, StrFind)
            END IF
            'PRINT I
            'WHILE INKEY$ = "": WEND
            IF I THEN J = I + TempNum ELSE EXIT DO
        LOOP    IF J THEN RightFindStr = J - TempNumEND FUNCTIONFUNCTION ZDir% (FindStr AS STRING, FindAttrib AS INTEGER, OutFileInfo AS FileInfo)
        '相当于 VB 的 Dir 函数
        'FindStr     : 查找字符串。为 空串 时,是继续查找
        'FindAttrib  : 查找的属性
        'OutFileInfo : 输出 文件信息    DIM Regs AS Regs386
        STATIC DataStr AS STRING * 44
        DIM FStr AS STRING * MaxFindStrLen
        DIM TempStr AS STRING
        DIM I AS INTEGER    IF FindStr <> "" THEN
            Regs.AX = &H1A00
            Regs.DX = VARPTR(DataStr)
            Regs.DS = VARSEG(DataStr)
            CALL Int386(&H21, Regs, Regs)        'FStr = STRING$(MaxFindStrLen, 0)
            FStr = LEFT$(FindStr, MaxFindStrLen - 1) + CHR$(0)
            'PRINT ReadCStr$(VARSEG(FStr), VARPTR(FStr)); "|"        Regs.AX = &H4E00
            Regs.CX = FindAttrib
            Regs.DX = VARPTR(FStr)
            Regs.DS = VARSEG(FStr)
            CALL Int386(&H21, Regs, Regs)    ELSE
            Regs.AX = &H4F00
            CALL Int386(&H21, Regs, Regs)    END IF    'PRINT DataStr; "|";
        'PRINT Regs.ax
        IF Regs.AX THEN
            ZDir = 0
            EXIT FUNCTION
        ELSE
            ZDir = -1
        END IF    I = ASC(MID$(DataStr, &H15 + 1, 1))
        OutFileInfo.Attrib = I
        I = CVI(MID$(DataStr, &H16 + 1, 2))
        OutFileInfo.FileTime.S = (I AND &H1F) * 2
        OutFileInfo.FileTime.M = (I AND &H7E0) \ &H20
        OutFileInfo.FileTime.H = (I AND &H7100) \ &H800
        IF I AND &H8000 THEN OutFileInfo.FileTime.H = OutFileInfo.FileTime.H + &H10
        I = CVI(MID$(DataStr, &H18 + 1, 2))
        OutFileInfo.FileDate.D = (I AND &H1F)
        OutFileInfo.FileDate.M = (I AND &H1E0) \ &H20
        OutFileInfo.FileDate.Y = (I AND &H7E00) \ &H200
        IF I AND &H8000 THEN OutFileInfo.FileDate.Y = OutFileInfo.FileDate.Y + &H40
        OutFileInfo.FileDate.Y = OutFileInfo.FileDate.Y + 1980
        OutFileInfo.FileLen = CVL(MID$(DataStr, &H1A + 1, 4))    TempStr = MID$(DataStr, &H1E + 1, 12)
        I = INSTR(TempStr, CHR$(0))
        IF I > 0 THEN TempStr = LEFT$(TempStr, I - 1)
        OutFileInfo.FileName = TempStrEND FUNCTION
      

  19.   

    ZDir就是我编的DirGetExeFile可以取得程序所在目录与文件名
    相当于VB的App.Path+"\"+App.ExeName
      

  20.   

    关于“取得程序所在目录与文件名”的方法
    我是从一个汇编资料上得到的
    http://asm.hyedu.com/program/x86-exec-dir.htm
      

  21.   

    觉得简单的判断文件或文件夹是否存在还是用fso方便。
    不过希望自己的程序“绿色”(不带或尽量少带控件)的话,这个应该是不错的选择。另外问一句,大家都是怎么了解到那些API的用法呀?从微软?