📄 process.pas
字号:
ReWrite(DataFile);
AssignFile(BMPFile,InManName);
Reset(BMPFile);
Size:=0;
BytePos:=54;
For i:=0 To 2 Do Begin
Data:=0;
For BitPos:=7 Downto 0 Do Begin
Seek(BMPFile,BytePos);
Read(BMPFile,CVal);
If (CVal And $01)=$01 Then Data:=Data+(1 Shl BitPos);
Inc(BytePos);
End;
Case i Of
0: fact:=$00001;
1: fact:=$00100;
2: fact:=$10000;
End;
Size:=Size+Data*fact;
End;
For i:=1 To Size Do Begin
Data:=0;
For BitPos:=7 Downto 0 Do Begin
Seek(BMPFile,BytePos);
Read(BMPFile,CVal);
If (CVal And $01)=$01 Then Data:=Data+(1 Shl BitPos);
Inc(BytePos);
End;
Write(DataFile,Data);
Percent:=Trunc((((BytePos-54)/8)/Size)*100);
LPercent.Caption:=IntToStr(Percent)+'%';
ProBar.Width:=Percent*2;
Application.ProcessMessages;
If ExitNow Then Break;
End;
CloseFile(DataFile);
CloseFile(BMPFile);
End;
End;
end;
procedure TForm16.DecodeTXT;
var
TXTFile: File Of Byte;
Character: Byte;
DataFile: File Of Byte;
Data: Byte;
i: Longint;
BitPos: Byte;
BytePos: Longint;
Size: Longint;
fact: Longint;
begin
LAction.Caption:=ml.GetCodeString('Process',14);{'Decoding ...'; } // code014
Application.ProcessMessages;
AssignFile(TXTFile,InManName);
Reset(TXTFile);
AssignFile(DataFile,temppath+'~wbstego.out');
ReWrite(DataFile);
Size:=0;
For i:=0 To 2 Do Begin
Data:=0;
For BitPos:=7 Downto 0 Do Begin
Repeat
Read(TXTFile,Character);
Until (Character=$00) Or (Character=$20);
If Character=$20 Then Data:=Data+(1 Shl BitPos);
End;
Case i Of
0: fact:=$00001;
1: fact:=$00100;
2: fact:=$10000;
End;
Size:=Size+Data*fact;
End;
For i:=1 To Size Do Begin
Data:=0;
For BitPos:=7 DownTo 0 Do Begin
Repeat
Read(TXTFile,Character);
Until (Character=$00) Or (Character=$20);
If Character=$20 Then Data:=Data+(1 Shl BitPos);
End;
Write(DataFile,Data);
Percent:=Trunc((i/Size)*100);
LPercent.Caption:=IntToStr(Percent)+'%';
ProBar.Width:=Percent*2;
Application.ProcessMessages;
If ExitNow Then Break;
End;
CloseFile(TXTFile);
CloseFile(DataFile);
end;
procedure TForm16.DecodeHTM;
var
HTMFile: File Of Byte;
Character: Byte;
Char2: Byte;
DataFile: File Of Byte;
Data: Byte;
i: Longint;
CPos: Longint;
BitPos: Byte;
BytePos: Longint;
Size: Longint;
fact: Longint;
begin
LAction.Caption:=ml.GetCodeString('Process',15);{'Decoding ...'; } // code015
Application.ProcessMessages;
AssignFile(HTMFile,InManName);
Reset(HTMFile);
AssignFile(DataFile,temppath+'~wbstego.out');
ReWrite(DataFile);
Size:=0;
For i:=0 To 2 Do Begin
Data:=0;
Repeat
Read(HTMFile,Character);
If Character=$0D Then Read(HTMFile,Char2) Else Char2:=$00;
Until (Character=$0D) And (Char2=$0A);
CPos:=FilePos(HTMFile);
For BitPos:=7 Downto 0 Do Begin
Seek(HTMFile,CPos-BitPos-3);
Read(HTMFile,Character);
If Character=$09 Then Data:=Data+(1 Shl BitPos);
End;
Seek(HTMFile,CPos);
Case i Of
0: fact:=$00001;
1: fact:=$00100;
2: fact:=$10000;
End;
Size:=Size+Data*fact;
End;
For i:=1 To Size Do Begin
Data:=0;
Repeat
Read(HTMFile,Character);
If Character=$0D Then Read(HTMFile,Char2) Else Char2:=$00;
Until (Character=$0D) And (Char2=$0A);
CPos:=FilePos(HTMFile);
For BitPos:=7 DownTo 0 Do Begin
Seek(HTMFile,CPos-BitPos-3);
Read(HTMFile,Character);
If Character=$09 Then Data:=Data+(1 Shl BitPos);
End;
Seek(HTMFile,CPos);
Write(DataFile,Data);
Percent:=Trunc((i/Size)*100);
LPercent.Caption:=IntToStr(Percent)+'%';
ProBar.Width:=Percent*2;
Application.ProcessMessages;
If ExitNow Then Break;
End;
CloseFile(HTMFile);
CloseFile(DataFile);
end;
procedure TForm16.DecodePDF;
label
obj, endobj, obj2, endobj2;
var
PDFFile: File Of Byte;
Character: Byte;
Char2: Byte;
DataFile: File Of Byte;
Data: Byte;
i,j: Longint;
CPos: Longint;
BitPos: Byte;
BytePos: Longint;
Size: Longint;
fact: Longint;
Found: Boolean;
InObjTag: Boolean;
TagStr: String;
begin
Found:=False;
InObjTag:=False;
LAction.Caption:=ml.GetCodeString('Process',16);{'Decoding ...'; } // code016
Application.ProcessMessages;
AssignFile(PDFFile,InManName);
Reset(PDFFile);
AssignFile(DataFile,temppath+'~wbstego.out');
ReWrite(DataFile);
Size:=0;
For i:=0 To 2 Do Begin
Data:=0;
Found:=False;
Repeat
Read(PDFFile,Character);
If (InObjTag) Then Begin
If ((Character=Ord('e')) Or (Character=Ord('E'))) Then Begin
endobj:
TagStr:=Chr(Character);
For j:=1 To 5 Do Begin
Read(PDFFile,Character);
TagStr:=TagStr+Chr(Character);
If ((Character=Ord('e')) Or (Character=Ord('E'))) Then goto endobj;
End;
TagStr:=LowerCase(TagStr);
If TagStr='endobj' Then InObjTag:=False;
End;
End
Else Begin
If ((Character=Ord('o')) Or (Character=Ord('O'))) Then Begin
obj:
TagStr:=Chr(Character);
For j:=1 To 2 Do Begin
Read(PDFFile,Character);
TagStr:=TagStr+Chr(Character);
If ((Character=Ord('o')) Or (Character=Ord('O'))) Then goto obj;
End;
TagStr:=LowerCase(TagStr);
If TagStr='obj' Then InObjTag:=True;
End
Else Begin
If Character=$0D Then Found:=True;
End;
End;
Until Found;
CPos:=FilePos(PDFFile);
For BitPos:=7 Downto 0 Do Begin
Seek(PDFFile,CPos-BitPos-2);
Read(PDFFile,Character);
If Character=$09 Then Data:=Data+(1 Shl BitPos);
End;
Seek(PDFFile,CPos);
Case i Of
0: fact:=$00001;
1: fact:=$00100;
2: fact:=$10000;
End;
Size:=Size+Data*fact;
End;
For i:=1 To Size Do Begin
Found:=False;
Data:=0;
Repeat
Read(PDFFile,Character);
If (InObjTag) Then Begin
If ((Character=Ord('e')) Or (Character=Ord('E'))) Then Begin
endobj2:
TagStr:=Chr(Character);
For j:=1 To 5 Do Begin
Read(PDFFile,Character);
TagStr:=TagStr+Chr(Character);
If ((Character=Ord('e')) Or (Character=Ord('E'))) Then goto endobj2;
End;
TagStr:=LowerCase(TagStr);
If TagStr='endobj' Then InObjTag:=False;
End;
End
Else Begin
If ((Character=Ord('o')) Or (Character=Ord('O'))) Then Begin
obj2:
TagStr:=Chr(Character);
For j:=1 To 2 Do Begin
Read(PDFFile,Character);
TagStr:=TagStr+Chr(Character);
If ((Character=Ord('o')) Or (Character=Ord('O'))) Then goto obj2;
End;
TagStr:=LowerCase(TagStr);
If TagStr='obj' Then InObjTag:=True;
End
Else Begin
If Character=$0D Then Found:=True;
End;
End;
Until Found;
CPos:=FilePos(PDFFile);
For BitPos:=7 DownTo 0 Do Begin
Seek(PDFFile,CPos-BitPos-2);
Read(PDFFile,Character);
If Character=$09 Then Data:=Data+(1 Shl BitPos);
End;
Seek(PDFFile,CPos);
Write(DataFile,Data);
Percent:=Trunc((i/Size)*100);
LPercent.Caption:=IntToStr(Percent)+'%';
ProBar.Width:=Percent*2;
Application.ProcessMessages;
If ExitNow Then Break;
End;
CloseFile(PDFFile);
CloseFile(DataFile);
end;
procedure TForm16.Button1Click(Sender: TObject);
begin
If Not(InProg) Then Close
Else
If MessageDlg(ml.GetCodeString('Process',17){'Do you really want to abort the process now?'},mtConfirmation,[mbYes,mbNo],0)=mrYes // code017
Then Begin
ExitNow:=True;
Close;
End;
end;
procedure TForm16.FormShow(Sender: TObject);
begin
ExitNow:=False;
InProg:=True;
Percent:=0;
LAction.Caption:=ml.GetCodeString('Process',18);{'Preparing ...'; } // code018
Button1.Caption:=ml.GetCodeString('Process',19);{'&Abort'; } // code019
LPercent.Caption:=IntToStr(Round(Percent))+'%';
ProBar.Width:=0;
Timer1.Enabled:=True;
end;
procedure TForm16.Timer1Timer(Sender: TObject);
var
XFile: File Of Byte;
i,j: Byte;
CPos: Longint;
begin
Timer1.Enabled:=False;
If anAction=AEncode Then Begin
Prepare;
If Mix Then MixThrough;
If Crypt Then Encrypt;
If ExitNow Then Close Else Begin
If FileType='BMP' Then Begin
EncodeBMP;
End;
If FileType='TXT' Then Begin
If Meth=0 Then EncodeTXT
Else EncodeHTM;
End;
If FileType='HTM' Then EncodeHTM;
If FileType='PDF' Then EncodePDF;
End;
End
Else Begin
If FileType='BMP' Then DecodeBMP;
If FileType='TXT' Then Begin
{trying to find out encoding method}
Meth:=0;
AssignFile(XFile,InManName);
Reset(XFile);
While (Not(EOF(XFile))) And (Meth=0) Do Begin
Read(XFile,i);
If (i=$0D) And Not(EOF(XFile)) Then Begin
Read(XFile,j);
If j=$0A Then Begin
Meth:=1;
CPos:=FilePos(XFile);
For i:=7 DownTo 0 Do Begin
Seek(XFile,CPos-i-3);
Read(XFile,j);
If (j<>$09) And (j<>$20) Then Meth:=0;
End;
Seek(XFile,CPos);
End;
End;
End;
CloseFile(XFile);
If Meth=0 Then DecodeTXT Else DecodeHTM;
End;
If FileType='HTM' Then DecodeHTM;
If FileType='PDF' Then DecodePDF;
If ExitNow Then Close Else Begin
If Pwd<>'' Then Decrypt;
If Pwd<>'' Then UnMixThrough;
HandleResult;
End;
End;
LPercent.Caption:='100%';
LAction.Caption:=ml.GetCodeString('Process',20);{'Finished!!!'; } // code020
Button1.Caption:=ml.GetCodeString('Process',21);{'&OK'; } // code021
InProg:=False;
end;
procedure TForm16.FormCreate(Sender: TObject);
begin
// ml support
Button1.Caption:=ml.GetComponentString('Process.Button1.Caption');
Form16.Caption:=ml.GetComponentString('Process.Form16.Caption');
LAction.Caption:=ml.GetComponentString('Process.LAction.Caption');
// image
ml.GetComponentImage('Process.ProBar.Picture',ProBar.Picture.Graphic);
///////////////////////////////////////////////////////////////////
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -