var
  ClassName: PChar;
  ptCursor: TPoint;
  hWndOver: HWND;
  Text: PChar;
begin
  GetCursorPos(ptCursor);
  hWndOver := WindowFromPoint(ptCursor);
  GetMem(ClassName, 100);
  GetMem(Text, 255);
  try
    GetClassName(hWndOver, ClassName, 100);
    SendMessage(hWndOver, WM_GETTEXT, 255, LongInt(Text));
    Canvas.FillRect(Rect(5, 20 , PreClassLength + 20, 40));
    Canvas.FillRect(Rect(5, 40 , PreTextLength + 20, 60));
    PreClassLength := Canvas.TextWidth(ClassName);
    PreTextLength := Canvas.TextWidth(Text);
    if PreClassLength > PreTextLength then
      Width := Canvas.TextWidth(ClassName) + 20
    else
      Width := Canvas.TextWidth(Text) + 20;
    Canvas.TextOut(5, 20, string(ClassName));
    Canvas.TextOut(5, 35, string(Text));
  finally
    FreeMem(ClassName);
    FreeMem(Text);
  end;
end;//你把其中的classname换成name就可以得到了。

解决方案 »

  1.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, StdCtrls, Grids, Buttons;type
      TForm1 = class(TForm)
        Label1: TLabel;
        Image1: TImage;
        Label2: TLabel;
        SpeedButton1: TSpeedButton;
        DrawGrid1: TDrawGrid;
        Button1: TButton;
        RadioButton1: TRadioButton;
        RadioGroup1: TRadioGroup;
        procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
          Y: Integer);
        procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    var
      Control: TControl;
    begin
      Control := ControlAtPos(Point(X, Y), True, True);
      if Control <> nil then
        Label2.Caption := Control.Name;
    end;procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      SetCapture(Handle);
    end;procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      ReleaseCapture;
    end;end.
      

  2.   

    xzgyb(老达摩)
    我的意思可能讲的不是很清楚。我是想得到其它应用程序中的无焦点控件的名称。
    (如label,image之类的)
    谢谢各位。
    请继续帮忙了
      

  3.   

    做梦噢如果是其它的工具开发的呢???也要返回控件名称??。如果是DELPHI的道还好说
      

  4.   

    这估计连spy++都搞不定吧:)
      

  5.   

    是用delphi开发的,smallflaybird(bird鸟) 那该如何实现呀?
    请各位帮帮忙啊。
      

  6.   

    用Delphi开发的?用
    FindVCLWindow看看?
      

  7.   

    FindVCLWindow也不行。
    应该不可以吧?TLabel,TImage是从TGraphi继承下来的,这类控件没有句柄,因此不可能得到其他信息?
      

  8.   

    我是说对于其它用delphi做的应用程序来说的。
    不是自己开发的应用程序。请再帮忙。
      

  9.   

    以下过程可以获得屏幕上其他程序窗口的控件名称
    在自己的程序窗体上放一个Timer和一个Edit,自己设定Timer的Interval,默认为1000(1秒),Timer1的Timer过程如下:
    procedure TfrmGetPswd.Timer1Timer(Sender: TObject);
    var
      ClassName: PChar;
      ptCursor: TPoint;
      hWndOver: HWND;
    begin
      //获取鼠标位置
      GetCursorPos(ptCursor);
      //获取鼠标下的窗口句柄
      hWndOver := WindowFromPoint(ptCursor);
      //分配内存
      GetMem(ClassName, 100);
      try
        //获取控件名
        GetClassName(hWndOver, ClassName, 100);
        //显示控件名
        edit1.Text :=String(ClassName);
      finally
        FreeMem(ClassName);//释放内存
      end;
    end;
      

  10.   

    可以考虑综合一下呀,
    用xzgyb(老达摩)的方法可以得到任何控件的类名(针对delphi)
    而用oracle_lover(数据库情人)的方法是通过使用api来进行的,可以针对屏幕上任何有handle的控件