攻破“金山词霸”的技术堡垒!

2008-04-10 02:58:30来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

library PigLatinDll;

uses
Windows,
SysUtils,
Classes,
HookTextUnit in ''''HookTextUnit.pas'''';

function PigLatinWord(s: String): String;
Var start: String; Capitalize, AllCapitals: Boolean; i: Integer; begin
Result:=s;
if length(s)<=1 then exit;
Capitalize:=IsCharUpper(s[1]);
AllCapitals:=True;
for i:=1 to length(s) do begin
if IsCharLower(s[i]) then begin
AllCapitals:=False; break;
end;
end;
start:=lowercase(copy(s,1,2));
if (start[1]<''''a'''') or (start[1]>''''z'''') then exit;
if (start[1] in [''''a'''',''''e'''',''''i'''',''''o'''',''''u'''']) then start:='''''''';
if (start<>''''ch'''') and (start<>''''th'''') and (start<>''''sh'''') and (start<>''''wh'''')

and (start<>''''qu'''') and (start<>''''kn'''') and (start<>''''wr'''') then delete(start,2,1);
Result:=copy(s,length(start) 1,length(s)) start;
if start='''''''' then Result:=Result ''''yay'''' else Result:=Result ''''ay''''; if AllCapitals then result:=Uppercase(Result) else
if Capitalize then result[1]:=Upcase(result[1]);
end;

function IntToRoman(n: Integer): String;
Var i, units, tens, hundreds, thousands: Integer;
begin
If (n>=5000) or (n<=0) then Result:=IntToStr(n) else begin thousands:=n div 1000; n:=n mod 1000;
hundreds:=n div 100; n:=n mod 100;
tens:=n div 10; n:=n mod 10;
units:=n;
Result:='''''''';
for i:=1 to Thousands do begin
Result:=Result ''''M'''';
end;
Case Hundreds of
1: Result:=Result ''''C'''';
2: Result:=Result ''''CC'''';
3: Result:=Result ''''CCC'''';
4: Result:=Result ''''CD'''';
5: Result:=Result ''''D'''';
6: Result:=Result ''''DC'''';
7: Result:=Result ''''DCC'''';
8: Result:=Result ''''DCCC'''';
9: Result:=Result ''''CM'''';
end;
Case Tens of
1: Result:=Result ''''X'''';
2: Result:=Result ''''XX'''';
3: Result:=Result ''''XXX'''';
4: Result:=Result ''''XL'''';
5: Result:=Result ''''L'''';
6: Result:=Result ''''LX'''';
7: Result:=Result ''''LXX'''';
8: Result:=Result ''''LXXX'''';
9: Result:=Result ''''XC'''';
end;
Case Units of
1: Result:=Result ''''I'''';
2: Result:=Result ''''II'''';
3: Result:=Result ''''III'''';
4: Result:=Result ''''IV'''';
5: Result:=Result ''''V'''';
6: Result:=Result ''''VI'''';
7: Result:=Result ''''VII'''';
8: Result:=Result ''''VIII'''';
9: Result:=Result ''''IX'''';
end;
end;
end;

function LatinNumber(s: String): String;
Var n: Integer;
begin
try
n:=StrToInt(s);
Result:=IntToRoman(n);
except
Result:=s;
end;
end;

function Conv(s: String): String;
Var i: Integer; w: String;
begin
Result:='''''''';
try
if s='''''''' then exit;
i:=1;
while (i<=length(s)) do begin
while (i<=length(s)) and (s[i]<='''' '''') do begin
Result:=Result s[i];
Inc(i);
end;

// convert any numbers into latin numbers
w:='''''''';
while (i<=length(s)) and (s[i]>=''''0'''') and (s[i]<=''''9'''') do begin w:=w s[i];
Inc(i);
end;
Result:=Result LatinNumber(w);

// add any other symbols unchanged (for now)
w:='''''''';
while (i<=length(s)) and not IsCharAlphaNumeric(s[i]) do begin w:=w s[i];
Inc(i);
end;
Result:=Result w;

// convert whole words into pig latin
w:='''''''';
while (i<=length(s)) and IsCharAlpha(s[i]) do begin
w:=w s[i];
Inc(i);
end;
Result:=Result PigLatinWord(w);
end;
except
end;
end;

function GetMsgProc(code: integer; removal: integer; msg: Pointer): Integer; stdcall;
begin
Result:=0;
end;

Var HookHandle: THandle;

procedure StartHook; stdcall;
begin
HookHandle:=SetWindowsHookEx(WH_GETMESSAGE, @GetMsgProc, HInstance, 0);
end;

procedure StopHook; stdcall;
begin
UnhookWindowsHookEx(HookHandle);
end;

exports StartHook, StopHook;

begin
HookTextOut(Conv);
end.

====================================================

unit HookTextUnit;

interface
uses Windows, SysUtils, Classes, PEStuff;

type
TConvertTextFunction = function(text: String): String;
TTextOutA = function(hdc: HDC; x,y: Integer; text: PAnsiChar; len: Integer): BOOL; stdcall;
TTextOutW = function(hdc: HDC; x,y: Integer; text: PWideChar; len: Integer): BOOL; stdcall;
TExtTextOutA = function(hdc: HDC; x,y: Integer; Options: DWORD; Clip: PRect;

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:用DELPHI设计代理服务器程序

下一篇:用Delphi实现自定义颜色对话框及其构件