专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > vbScript

急大侠,关于使用VBS操作二进制文件

发布时间:2010-05-20 14:01:29 文章来源:www.iduyao.cn 采编人员:星星草
急请教各位大侠,关于使用VBS操作二进制文件?
本人是一个外行,只是使用VBS做一些图像的工作。

现在遇到一个问题:

我需要打开一个BMP文件,然后修改其中的某些值(都是二进制,也就是修改某些象素的值)。读出现在好了,问题出现在,修改和写入文件。

我的例子程序如下:

set bmpbinarystreamwrite = createobject("Adodb.Stream")
bmpbinarystreamwrite.type = 1
bmpbinarystreamwrite.mode = 3
bmpbinarystreamwrite.open
bmpbinarystreamwrite.loadfromfile workingdirectory & "" & "Test.bmp"
bytearray = bmpbinarystreamwrite.read(-1)
bmpbinarystreamwrite.close

bytearray(100) = midb(bytearray, 101, 1)  

bmpbinarystreamwrite.open
bmpbinarystreamwrite.write bytearray
bmpbinarystreamwrite.savetofile workingdirectory & "" & "Testn.bmp", 2
bmpbinarystreamwrite.flush
bmpbinarystreamwrite.close


问题出现在bytearray(100) = midb(bytearray, 101, 1) ,也就是如何修改。同时修改的过程中,不能改变bytearray的数据类型,以保证能够再次成功写入文件(bmpbinarystreamwrite.write bytearray)。

感谢!!!

------解决方案--------------------
下面这个是我以前写的QQ游戏多开的修改脚本,就用到了二进制的读写,你参考一下吧.
注意:因为QQ GAME版本的更新,这个脚本已经无效,测试运行前先更改strFileName的值

VBScript code

    Dim strFileName,oStream,oFSO
Set oFSO = CreateObject("Scripting.FilesystemObject")
    '如需测试,更改下面的的File Path
    strFileName = "C:Program FilesTencentQQGAMEcommonUtility.dll"
    strNewFile = "C:Program FilesTencentQQGAMEcommonUtility.bak"

Set oStream = CreateObject("Adodb.Stream")
With oStream
    .Type = 1
    .Mode = 3
    .Open
    .LoadFromFile strFileName
End With

    oStream.Position = 68769
    If Bin2Str(oStream.Read(1)) = "75" Then

        '先备份        
            oFSO.CopyFile  strFileName,strNewFile        

        '修改68769处为EB
        oStream.Position = 68769
        oStream.Write Str2Bin("EB")
        oStream.SaveToFile strFileName,2
        
        WScript.Echo "文件补丁成功!"
    Else
        WScript.Echo "文件特征不符,取消补丁!"
    End If
    oStream.Close
    Set oFSO = Nothing
    WScript.Quit
        
    
'***********************************************************************************
'2进制转换为16进制字符串
'***********************************************************************************
Function Bin2Str(bin)

    Dim i,str
    For i = 1 To Lenb(bin)
        If Ascb(Midb(bin,i,1)) < 16 Then str = str + "0"
        str = str & Hex(Ascb(Midb(bin,i,1)))
    Next
    Bin2Str = str

End Function

'***********************************************************************************
'16进制字符串转换为2进制
'***********************************************************************************
Function Str2Bin(str)
    
    Dim oXML,oElement
    
    Set oXML = Createobject("Microsoft.XMLDOM")
    Set oElement = oXML.CreateElement("oTmpElement")
    oElement.DataType = "bin.hex"
    oElement.NodeTypedValue = str
    Str2Bin = oElement.nodeTypedValue
    
    Set oElement = Nothing
    Set oXML = Nothing
    
End Function
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: