« Vista以降でsndrec32.exe/play/close相当は? | トップページ | エクスプローラで「ファイル拡張子」のカラムを表示する。 »

2010年11月24日 (水)

clpファイルをbmpファイルに変換する。

Vista以降にはclipbrd.exeがありません。そのためXP以前に作成したclpファイルが見れません。

そこで、clpファイルからbmpファイルに変換します。

clp2bmp.vbs clpファイル...

Option Explicit
Dim File
For Each File In WScript.Arguments
  clp2bmp File
Next

Sub clp2bmp(File)
Dim src,Buf,FileID,iCount,i,pos,iType,iSize,iOffset,iName,dst,FileSize
Set src=CreateObject("ADODB.Stream")
src.Open
src.Type=1
src.LoadFromFile File
Buf=src.Read(-1)
FileID=IntegerAt(Buf,0)
If FileID <> &H0000C350& Then
  WScript.Echo Hex(FileID)
  WScript.Quit
End If
iCount=IntegerAt(Buf,2)
WScript.Echo iCount
For i=1 to iCount
  pos=4+(2+4+4+79)*(i-1)
  iType=IntegerAt(Buf,pos+0)
  iSize=LongAt(Buf,pos+2)
  iOffset=LongAt(Buf,pos+6)
  iName=StrConv(Midb(Buf,pos+10+1,79))
  WScript.Echo iType,iOffset,iSize,iName
  Select Case iType
  Case 8,17
    Set dst=CreateObject("ADODB.Stream")
    dst.Open
    dst.Type=2
    dst.Charset="latin1"
    FileSize=iSize+14
    dst.WriteText "BM" & ChrW(FileSize Mod 16) & ChrW((FileSize \ 256) Mod 16) & ChrW((FileSize \ 4096) Mod 16) & ChrW(FileSize \ 65536) & ChrW(0) & ChrW(0) & ChrW(0) & ChrW(0) & ChrW(0) & ChrW(0) & ChrW(0) & ChrW(0)
    dst.Position=0
    dst.Type=1
    dst.Position=14
    src.Position=iOffset
    src.CopyTo dst,iSize
    dst.SaveToFile File & "." & iType & ".bmp",2
  End Select
Next
End Sub

Function LongAt(Buf,Offset)
LongAt=AscB(MidB(Buf,Offset+1,1))+AscB(MidB(Buf,Offset+2,1))*256+AscB(MidB(Buf,Offset+3,1))*256*256+AscB(MidB(Buf,Offset+4,1))*256*256*256
End Function

Function IntegerAt(Buf,Offset)
IntegerAt=AscB(MidB(Buf,Offset+1,1))+AscB(MidB(Buf,Offset+2,1))*256
End Function

Function StrConv(s)
Dim k
For k=1 To LenB(s)
  StrConv=StrConv & ChrW(AscB(MidB(s,k,1)))
Next
End Function

« Vista以降でsndrec32.exe/play/close相当は? | トップページ | エクスプローラで「ファイル拡張子」のカラムを表示する。 »