急请教各位大侠,关于使用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的值
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