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就可以得到了。
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就可以得到了。
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.
我的意思可能讲的不是很清楚。我是想得到其它应用程序中的无焦点控件的名称。
(如label,image之类的)
谢谢各位。
请继续帮忙了
请各位帮帮忙啊。
FindVCLWindow看看?
应该不可以吧?TLabel,TImage是从TGraphi继承下来的,这类控件没有句柄,因此不可能得到其他信息?
不是自己开发的应用程序。请再帮忙。
在自己的程序窗体上放一个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;
用xzgyb(老达摩)的方法可以得到任何控件的类名(针对delphi)
而用oracle_lover(数据库情人)的方法是通过使用api来进行的,可以针对屏幕上任何有handle的控件