📄 orilpk.pas
字号:
unit oriLPK;
interface
uses
Windows ;
const
strLpkDllInitialize ='LpkDllInitialize' ;
strLpkDrawTextEx ='LpkDrawTextEx' ;
strLpkEditControl ='LpkEditControl' ;
strLpkExtTextOut ='LpkExtTextOut' ;
strLpkGetCharacterPlacement='LpkGetCharacterPlacement' ;
strLpkGetTextExtentExPoint ='LpkGetTextExtentExPoint' ;
strLpkInitialize ='LpkInitialize' ;
strLpkPSMTextOut ='LpkPSMTextOut' ;
strLpkTabbedTextOut ='LpkTabbedTextOut' ;
strLpkUseGDIWidthCache ='LpkUseGDIWidthCache' ;
strftsWordBreak ='ftsWordBreak' ;
var
strBLpkDllInitialize ,
strBLpkDrawTextEx ,
strBLpkEditControl ,
strBLpkExtTextOut ,
strBLpkGetCharacterPlacement,
strBLpkGetTextExtentExPoint ,
strBLpkInitialize ,
strBLpkPSMTextOut ,
strBLpkTabbedTextOut ,
strBLpkUseGDIWidthCache ,
strBftsWordBreak : Pointer ;
Procedure LpkInitialize ;stdcall ;
Procedure LpkTabbedTextOut ;stdcall ;
Procedure LpkDllInitialize ;stdcall ;
Procedure LpkDrawTextEx ;stdcall ;
Procedure LpkExtTextOut ;stdcall ;
Procedure LpkGetCharacterPlacement ;stdcall ;
Procedure LpkGetTextExtentExPoint ;stdcall ;
Procedure LpkPSMTextOut ;stdcall ;
Procedure LpkUseGDIWidthCache ;stdcall ;
Procedure ftsWordBreak ;stdcall ;
Procedure LpkEditControl ;stdcall ;
Procedure LoadoriLPK ; stdcall ;
exports
LpkInitialize ,
LpkTabbedTextOut ,
LpkDllInitialize ,
LpkDrawTextEx ,
LpkExtTextOut ,
LpkGetCharacterPlacement ,
LpkGetTextExtentExPoint ,
LpkPSMTextOut ,
LpkUseGDIWidthCache ,
ftsWordBreak ,
LpkEditControl ;
implementation
procedure ModMemData();
var
pData: pointer;
dwOldProtect:DWORD;
mbi_thunk: TMemoryBasicInformation;
begin
VirtualProtect(@LpkEditControl,$40,PAGE_READWRITE,@dwoldProtect);
exit ;
pData := @LpkEditControl ;
//查询页信息。
VirtualQuery(pData, mbi_thunk, sizeof(MEMORY_BASIC_INFORMATION));
//改变页保护属性为读写。
VirtualProtect(mbi_thunk.BaseAddress, mbi_thunk.RegionSize,PAGE_READWRITE, mbi_thunk.Protect);
end;
procedure LoadoriLPK ; stdcall ;
var
sysdir :array[0..256] of char ;
libpath :string ;
LibID : Dword ;
begin
GetSystemDirectory(sysdir,256);
LibPath:= sysdir+'\LPK.DLL';
LibID := LoadLibrary(pchar(LibPath));
if LibID <> 0 then
begin
ModMemData() ;
strBLpkDllInitialize := GetProcAddress(LibID,strLpkDllInitialize);
strBLpkDrawTextEx := GetProcAddress(LibID,strLpkDrawTextEx );
strBLpkExtTextOut := GetProcAddress(LibID,strLpkExtTextOut );
strBLpkGetCharacterPlacement:=GetProcAddress(LibID,strLpkGetCharacterPlacement);
strBLpkGetTextExtentExPoint :=GetProcAddress(LibID,strLpkGetTextExtentExPoint );
strBLpkInitialize := GetProcAddress(LibID, strLpkInitialize );
strBLpkPSMTextOut := GetProcAddress(LibID, strLpkPSMTextOut );
strBLpkTabbedTextOut := GetProcAddress(LibID, strLpkTabbedTextOut );
strBLpkUseGDIWidthCache:= GetProcAddress(LibID,strLpkUseGDIWidthCache );
strBftsWordBreak := GetProcAddress(LibID ,strftsWordBreak );
strBLpkEditControl := GetProcAddress(LibID ,strLpkEditControl );
asm
pushad
mov esi , eax
lea edi , LpkEditControl
mov ecx , 40h
rep movsb
popad
end;
end
else
ExitProcess(0);
end;
Procedure LpkInitialize ;stdcall ;
asm jmp strBLpkInitialize end;
Procedure LpkTabbedTextOut ;stdcall ;
asm jmp strBLpkTabbedTextOut end;
Procedure LpkDllInitialize ;stdcall ;
asm jmp strBLpkDllInitialize end;
Procedure LpkDrawTextEx ; stdcall ;
asm jmp strBLpkDrawTextEx end;
Procedure LpkExtTextOut ; stdcall ;
asm jmp strBLpkExtTextOut end;
Procedure LpkGetCharacterPlacement ; stdcall ;
asm jmp strBLpkGetCharacterPlacement end;
Procedure LpkGetTextExtentExPoint; stdcall ;
asm jmp strBLpkGetTextExtentExPoint end;
Procedure LpkPSMTextOut; stdcall ;
asm jmp strBLpkPSMTextOut end;
Procedure LpkUseGDIWidthCache ; stdcall ;
asm jmp strBLpkUseGDIWidthCache end;
Procedure ftsWordBreak ; stdcall ;
asm jmp strBftsWordBreak end;
Procedure LpkEditControl; stdcall ;
asm
dd 0
dd 0
dd 0
dd 0
dd 0
dd 0
dd 0
dd 0
dd 0
dd 0
dd 0
dd 0
dd 0
dd 0
dd 0
dd 0
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -