欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

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

更新时间: 2014-01-05 01:53:05 责任编辑: Author_N1

 

急请教各位大侠,关于使用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 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 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 			
			
		
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 01:53:05
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/2523/
本文WWW.DOC100.NET DOC100.NET版权所有。