所见及所得的类分析跟踪器

顾乐tt1314521

顾乐tt1314521

2016-02-19 12:52

想要天天向上,就要懂得享受学习。图老师为大家推荐所见及所得的类分析跟踪器,精彩的内容需要你们用心的阅读。还在等什么快点来看看吧!

  {以下代码可以分析Windows下的鼠标处的对象类名,句柄及其递归父类等信息,是很久以前火鸟的工具软件视窗超人中的一段代码。其触发使用了Timer控件,其实更好的实现是用Windows Mouse Hook来做触发,就当抛砖引玉吧;此代码还实现了不依赖于Windows2000以上要求的半透明窗口(在Win98/WinMe下也可半透明),本实现的实现其实比较类似于金山词霸的即指即译功能,只不过大家在做不同的应用而已。 在Delphi环境下,新建一个窗体,把代码贴入即可,本工具主要会对做Windows环境下的开发人员工作有些帮助(如分析别人的程序的控件对象,跟踪对象句柄等)}
  unit Unit1;

  interface

  uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, ExtCtrls, StdCtrls;

  type
    TForm1 = class(TForm)
      procedure Timer1Timer(Sender: TObject);
      procedure FormCreate(Sender: TObject);
    private
      { Private declarations }
    public
      { Public declarations }
    end;

  var
    Form1: TForm1;
    Timer1: TTimer;

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  implementation

  {$R *.dfm}

  procedure TForm1.Timer1Timer(Sender: TObject);
  var poss:TPoint;
      ic:Hdc;
      Bmp:TbitMap;
    Hands: HWND;
    Buf: array[0..129] of Char;
    Stmp:TStrings;
    itmp,iwidth,iheight:integer;
    sword,sline:string;
  begin
    GetCursorPos(Poss);
    with self do
    begin
      if (poss.x tag-10) or (poss.ytimer1.Tag-10) then left:=screen.Width
      else
      begin
        Hands := WindowFromPoint(Poss);
        if (left=tag) or (hands=handle) then exit;
        stmp:=TStringList.create;
        stmp.Add('句柄: '+IntToStr(Hands));
        GetClassName(Hands, Buf, 128);
        stmp.Add ('类名: '+Buf);
        itmp:=GetParent(Hands);
        while itmp0  do
        begin
            GetClassName(itmp, Buf, 128);
            if buf'' then stmp.Add (inttostr(stmp.Count-1)+'级父类: '+Buf);
            itmp:=GetParent(itmp);
        end;
        SendMessage(Hands, WM_GETTEXT, 128, Integer(@Buf));
        sword:='字符: '+buf;
        if length(sword)132 then sword:=sword+'....';
        repeat
          itmp:=pos(chr(10),sWord);
          if itmp0 then
          begin
            sline:=copy(sWord,1,itmp-1);
            sword:=copy(sWord,itmp+1,length(sword));
          end
          else sline:=sword;
          itmp:=pos(chr(13),sline);
          if itmp0 then sline:=copy(sline,1,itmp-1);
          stmp.Add(sline);
        until sline=sword;
        iwidth:=0;
        for itmp:=0 to stmp.Count-1 do if canvas.TextWidth(stmp[itmp])+15iWidth then iWidth:=canvas.TextWidth(stmp[itmp])+15;
        iheight:=stmp.Count*(canvas.TextHeight(stmp[0])+2);
        width:=iwidth;
        height:=iheight;
        SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE+ SWP_NOSIZE+SWP_NOACTIVATE+SWP_NOOWNERZORDER);
        ic:=CreateDC('DISPLAY',nil,nil,nil);
        if tag+widthscreen.Width then tag:=screen.Width-width;
        if timer1.Tag +heightscreen.Height then timer1.Tag:=screen.Height-height;
        Bmp:=Tbitmap.Create;
        bmp.Width := Width;
        bmp.Height :=Height;
        bitblt(bmp.Canvas.handle,0,0,Width,Height,ic,tag,timer1.Tag,SRCCOPY);
        Left :=tag;
        Top :=timer1.tag;
        bitblt(canvas.handle,0,0,Width,Height,bmp.Canvas.handle,0,0,SRCAND);
        canvas.Font.Color:=$0000FF;
        SetBkMode(canvas.handle,TRANSPARENT);
        for itmp:=0 to stmp.Count-1 do canvas.TextOut(5,5+itmp*canvas.TextHeight(stmp[itmp]),TrimRight(stmp[itmp]));
        deletedc(ic);
        bmp.free;
        stmp.Free;
      end;
      tag:=poss.x+10;
      timer1.Tag:=poss.y+10;
    end;
  end;
  procedure TForm1.FormCreate(Sender: TObject);
  begin
    self.BorderStyle:=bsNone;
    Timer1:=TTimer.Create(self);
    timer1.Interval:=300;
    timer1.OnTimer:=Timer1Timer;
  end;

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  end.
  

展开更多 50%)
分享

猜你喜欢

所见及所得的类分析跟踪器

编程语言 网络编程
所见及所得的类分析跟踪器

如何拍出所见所得的景象

摄影 人像摄影 静物摄影
如何拍出所见所得的景象

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

使用VB实现所见即所得功能

编程语言 网络编程
使用VB实现所见即所得功能

让新手信心爆棚的8招拍出所见即所得影像

摄影 人像摄影 静物摄影
让新手信心爆棚的8招拍出所见即所得影像

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

用户注册及跟踪代码(三)

ASP
用户注册及跟踪代码(三)

用户注册及跟踪代码(一)

ASP
用户注册及跟踪代码(一)

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

鼠标划过时整行变色

鼠标划过时整行变色

ADO简介

ADO简介
下拉加载更多内容 ↓