⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flash.bas

📁 OpenPlayer代码
💻 BAS
📖 第 1 页 / 共 2 页
字号:
            '取电影的长度,在文件的第5个字节,长为4个字节
            Get #lFileNumber, 5, lMSize
            '如果文件长度<电影长度,说明这个电影文件不是一个完整的文件(但这个文件还可以播放),可能是从Internet下载不完全或被破坏
            '说明这个文件没有注OpenPlayer写入的附加内容
            If lMSize >= lFSize Then
                 Close #lFileNumber
                 Exit Function
            End If
                      
            '读取OpenPlayer符加信息的ID,在电影长度(lMSize)+1的地方
            Get #lFileNumber, lMSize + 1, MyNote
             
            '如果不是OpenPlayer自定义的格式,就把后面的内容读出,作为注释的内容
            '并把作者、公司、版本置为未知
            '再把文件后面的的内容作为strNote信息(也许有可用的)
            If MyNote <> "SP" Then
UnKnow:
                ReDim b(lFSize - lMSize - 1)
                Get #lFileNumber, lMSize + 1, b()
                getNote.strAuthor = "未知"
                getNote.strCompany = "未知"
                getNote.strVer = "0"
                For i = 0 To UBound(b())
                   If b(i) = 0 Then
                      b(i) = 32                   '对于 0 StrConv无法转为vbUnicode格式,且整个字串都不能转换!因此要将它转为空格(32)
                   End If
                Next
                '转为Unicode并返回该值
                getNote.strNote = StrConv(b(), vbUnicode)
                
            Else
                
                '循环5次,分别读出ID --"V","A","C","M","N"和各字的长度,内容
                For i = 0 To 4
                  '读出ID 和ID 的长度
                  Get #lFileNumber, , bMyNote
                  Get #lFileNumber, , lTagLen
                  
                  '如果lTagLen+当前文件指针位置大于文件的长度,那么注释的内容格式出现错误
                  If lFSize < Seek(lFileNumber) + lTagLen Then
                      GoTo UnKnow:
                  End If
                  
                  '作者
                  Select Case bMyNote
                       Case Asc("A")
                            If lTagLen > 0 Then
                                   ReDim bAuthor(lTagLen - 1)
                                   Get #lFileNumber, , bAuthor()
                                   For j = 0 To UBound(bAuthor())
                                      If bAuthor(j) = 0 Then
                                        bAuthor(j) = 32
                                      End If
                                   Next
                                    '转为Unicode并返回该值
                                    getNote.strAuthor = StrConv(bAuthor(), vbUnicode)
                            End If
                                   
                             
                       '公司
                       Case Asc("C")
                            If lTagLen > 0 Then
                                 ReDim bCompany(lTagLen - 1)
                                 Get #lFileNumber, , bCompany()
                                 For j = 0 To UBound(bCompany())
                                    If bCompany(j) = 0 Then
                                      bCompany(j) = 32
                                    End If
                                 Next
                                 '转为Unicode并返回该值
                                  getNote.strCompany = StrConv(bCompany(), vbUnicode)
                             End If
        
                             
                        '附加注释内容
                        Case Asc("N")
                              If lTagLen > 0 Then
                                  If lTagLen = 0 Then
                                     ReDim bNote(0)
                                     bNote(0) = 32
                                  Else
                                      ReDim bNote(lTagLen - 1)
                                      Get #lFileNumber, , bNote()
                                  End If
                                  For j = 0 To UBound(bNote())
                                     If bNote(j) = 0 Then
                                       bNote(j) = 32
                                     End If
                                  Next
                                   '转为Unicode并返回该值
                                   getNote.strNote = StrConv(bNote(), vbUnicode)
                              End If
        
                        'OpenPlayer版本
                        Case Asc("V")
                            If lTagLen > 0 Then
                                ReDim bVer(lTagLen - 1)
                                Get #lFileNumber, , bVer()
                                For j = 0 To UBound(bVer())
                                    If bVer(j) = 0 Then
                                        bVer(j) = 32
                                    End If
                                Next
                                '转为Unicode并返回该值
                                getNote.strVer = StrConv(bVer(), vbUnicode)
                             End If
                       ' 作品名
                        Case Asc("M")
                            '如果大于0则读出来作为Movie Name
                            '如果等于0,因在前面有预设Movie Name ,所以在这里不用再设了。
                            If lTagLen > 0 Then
                                ReDim bMovieName(lTagLen - 1)
                                Get #lFileNumber, , bMovieName()
                                For j = 0 To UBound(bMovieName())
                                    If bMovieName(j) = 0 Then
                                        bMovieName(j) = 32
                                    End If
                                Next
                               '转为Unicode并返回该值
                                getNote.strMovieName = StrConv(bMovieName(), vbUnicode)
                             End If
                    End Select
                Next
            End If
        Close #lFileNumber
    Exit Function
Err:
    Close #lFileNumber
    getNote.strNote = "抱歉,发生错误!"
    CreateErrorReport ("getNote()")
    'Set oFSO = Nothing
End Function

'======================================
'写入注释内容
'注意:将重写原来的注释内容
'成功返回True
'失败返回False
'参数:
'strFileName     As String   '动画文件名
'strAuthor       As String   '动画的作者名
'strCompany      As String   '发布的公司
'strNote         As String   '其它的说明内容
'strVer          As String   '软件的版本
'strMovieName    As String   '作品名
'======================================
Public Function writeNote(strFileName As String, strAuthor As String, strCompany As String, strNote As String, strVer As String, strMovieName As String) As Boolean
    'Dim oFSO As New FileSystemObject             '创建文件对象
    Dim lMSize As Long                           '电影的长度
    Dim lFSize As Long                           '文件的长度
    Dim lFileNumber As Long                      '文件号,在打开文件时用
    Dim strSWFSignature As String * 3            'SWF的签名
    Dim lAuthorLen As Long                       '作者字段的长度
    Dim lCompanyLen As Long                      '公司字段的长度
    Dim lNoteLen As Long                         '注释字段的长度
    Dim lVerLen As Long                          '版本字段的长度
    Dim lMovieNameLen As Long                    '作品名字段的长度
    Dim bMovie() As Byte                         '用来存储电影文件内容的字节数组,在得到到电影长度(lMSize)之后,将Redim其元素个数

On Error GoTo Err:

   'If Not oFSO.FileExists(strFileName) Then
    If Dir(strFileName) = "" Then
         writeNote = False                          '文件找不到
         'Set oFSO = Nothing
         Exit Function
    End If
   
    If Len(strMovieName) < 1 Then
        strMovieName = "《" & Left(getBaseName(strFileName), InStrRev(getBaseName(strFileName), ".") - 1) & "》"
    End If
  
    '取字段的"字节长度",并赋给相应的“字段长度”
    lAuthorLen = LenB(StrConv(strAuthor, vbFromUnicode))
    lCompanyLen = LenB(StrConv(strCompany, vbFromUnicode))
    lNoteLen = LenB(StrConv(strNote, vbFromUnicode))
    lVerLen = LenB(StrConv(strVer, vbFromUnicode))
    lMovieNameLen = LenB(StrConv(strMovieName, vbFromUnicode))
  
    If GetAttr(strFileName) = 33 Then
        If MsgBox("文件:" & strFileName & vbCrLf & "是只读文件,是否要保存更改?", vbYesNo + vbInformation, "OpenPlayer") = vbYes Then
            SetAttr strFileName, 32
        Else
            GoTo Err:
        End If
    End If
  
    lFileNumber = FreeFile
    'lFSize = oFSO.GetFile(strFileName).Size              '取文件的长度
    lFSize = FileLen(strFileName)                         '取文件的长度
    Open strFileName For Binary As #lFileNumber
        Get #lFileNumber, , strSWFSignature
        If strSWFSignature <> "FWS" Then
            Close #lFileNumber
            'Set oFSO = Nothing
            writeNote = False                            '不是Flash Movie格式的文件
            Exit Function                                '退出程序
        End If
        
        '取电影的长度,在文件的第5个字节,长为4个字节
        Get #lFileNumber, 5, lMSize
        
        '如果文件长度<电影长度,说明这个电影文件不是一个完整的文件(但这个文件还可以播放),可能是从Internet下载不完全或被破坏
        '则在文件写入文件长度作为电影的长度,在文件的第5个字节,长度为4个字节
        '注:文件长度指现有文件的Size,电景长度指该动画完整时具有的Size
        If lFSize < lMSize Then
            lMSize = lFSize + 2
            Put #lFileNumber, 5, lMSize
        End If
        '重定义字节数组,用来存放电影的内容
        '读出电影内容,并存放在bMovie()数组
        ReDim bMovie(lMSize - 1)
        Get #lFileNumber, 1, bMovie
  Close #lFileNumber
  
    '清空文件
    Kill strFileName
    
    '重建文件
    lFileNumber = FreeFile
    Open strFileName For Binary As #lFileNumber
          Put #lFileNumber, , bMovie                  '写入电影内容
          Put #lFileNumber, , "SPV"                   '写入附加信息ID "SP" 和OpenPlayer版本信息ID "V"
          Put #lFileNumber, , lVerLen                 '写入OpenPlayer版本信息字段长度
          Put #lFileNumber, , strVer                  '写入OpenPlayer版本信息字段内容
          Put #lFileNumber, , "A"                     '写入作者ID "A"
          Put #lFileNumber, , lAuthorLen              '写入作者字段长度
          Put #lFileNumber, , strAuthor               '写入作者字段内容
          Put #lFileNumber, , "C"                     '写入作者公司字段ID "C"
          Put #lFileNumber, , lCompanyLen             '写入作者公司字段长度
          Put #lFileNumber, , strCompany              '写入作者公司字段内容
          Put #lFileNumber, , "N"                     '写入附加信息字段ID "N"
          Put #lFileNumber, , lNoteLen                '写入附加信息字段长度
          Put #lFileNumber, , strNote                 '写入附加信息字段内容
          Put #lFileNumber, , "M"                     '写入作品名字段ID "M"
          Put #lFileNumber, , lMovieNameLen           '写入作品名字段长度
          Put #lFileNumber, , strMovieName            '写入作品名字段内容
          Put #lFileNumber, , CInt(0)                 '例行定入结束符 "00 00"
    Close #lFileNumber
    
    'Set oFSO = Nothing
    writeNote = True
Exit Function
Err: '未知错误
    writeNote = False
    CreateErrorReport ("writeNote()")
  'Set oFSO = Nothing
End Function



'==========================================
'取得一个文件路径名中的基本文件名
'参数:
'strFileName,文件路径名
'==========================================
Public Function getBaseName(strFileName As String)
On Error GoTo Err:
    getBaseName = Mid(strFileName, InStrRev(strFileName, "\") + 1)
    Exit Function
Err:
    getBaseName = ""
End Function

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -