首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > vbScript >

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

2012-03-06 
急请教各位大侠,关于使用VBS操作二进制文件?本人是一个外行,只是使用VBS做一些图像的工作。现在遇到一个问

急请教各位大侠,关于使用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,oFSOSet oFSO = CreateObject("Scripting.FilesystemObject")    '如需测试,更改下面的的File Path    strFileName = "C:\Program Files\Tencent\QQGAME\common\Utility.dll"    strNewFile = "C:\Program Files\Tencent\QQGAME\common\Utility.bak"Set oStream = CreateObject("Adodb.Stream")With oStream    .Type = 1    .Mode = 3    .Open    .LoadFromFile strFileNameEnd 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 = strEnd 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 

热点排行