转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
攻破“金山词霸”的技术堡垒!         ★★★★

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

作者:闵涛 文章来源:闵涛的学习笔记 点击数:4742 更新时间:2009/4/23 18:44:47

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(hdc: HDC; text: PWideChar; len: Integer; rect: PRect;
                        Format: DWORD; DTParams: PDrawTextParams): Integer; stdcall;

  TTabbedTextOutA = function(hdc: HDC; x,y: Integer; text: PAnsiChar; len: Integer;
                        TabCount: Integer; TabPositions: PInteger; TabOrigin: Integer): Integer; stdcall;
  TTabbedTextOutW = function(hdc: HDC; x,y: Integer; text: PWideChar; len: Integer;
                        TabCount: Integer; TabPositions: PInteger; TabOrigin: Integer): Integer; stdcall;
  TPolyTextOutA = function(hdc: HDC; pptxt: PPOLYTEXTA; count: Integer): BOOL; stdcall;
  TPolyTextOutW = function(hdc: HDC; pptxt: PPOLYTEXTW; count: Integer): BOOL; stdcall;

  TGetTextExtentExPointA = function(hdc: HDC; text: PAnsiChar; len: Integer;
                          maxExtent: Integer; Fit: PInteger; Dx: PInteger; Size: Pointer): BOOL; stdcall;
  TGetTextExtentExPointW = function(hdc: HDC; text: PWideChar; len: Integer;
                       &nbs

[1] [2] [3] [4] [5] [6]  下一页


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台