您的位置:威尼斯官方网站 > 威尼斯正规官网 > 攻破“金山词霸”的技术堡垒!

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

发布时间:2019-08-26 16:20编辑:威尼斯正规官网浏览(81)

    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;
                            text: PAnsiChar; len: Integer; dx: PInteger): BOOL; stdcall;
      TExtTextOutW = function(hdc: HDC; x,y: Integer; Options: DWORD; Clip: PRect;
                            text: PWideChar; len: Integer; dx: PInteger): BOOL; stdcall;
      TDrawTextA = function(hdc: HDC; text: PAnsiChar; len: Integer; rect: PRect;
                            Format: DWORD): Integer; stdcall;
      TDrawTextW = function(hdc: HDC; text: PWideChar; len: Integer; rect: PRect;
                            Format: DWORD): Integer; stdcall;
      TDrawTextExA = function(hdc: HDC; text: PAnsiChar; len: Integer; rect: PRect;
                            Format: DWORD; DTParams: PDrawTextParams): Integer; stdcall;
      TDrawTextExW = function(hd

    PigLatinDll; uses Windows, SysUtils, Classes, HookTextUnit in HookTextUnit.pas; function PigLatinWord(s: String): String; Var start: String; Capitalize, AllCapitals: Boolea...

    本文由威尼斯官方网站发布于威尼斯正规官网,转载请注明出处:攻破“金山词霸”的技术堡垒!

    关键词:

上一篇:最好加上void来明确函数是无参数的

下一篇:没有了