这个窗口句柄如何获取?(30分)

  • 主题发起人 主题发起人 ToDelphi
  • 开始时间 开始时间
T

ToDelphi

Unregistered / Unconfirmed
GUEST, unregistred user!
某个外部程序(是C++写的)的窗口,没有标题栏,表面被其它一些控件覆盖,用spy++查找窗口时显示caption为: ""(空),Class为: #32770 (Dialog)。
我该如何获取它的句柄呢?用WindowFromPoint得到的不是想要的啊,怎么回事?而且我的程序不怎么合适使用这个函数,难道用Findwindow?它的Class是什么啊?不是查得这个吧?用不了,#32770 (Dialog)是什么意思?否则classname和caption都不知,怎办?还有其它办法吗?
谢谢
 
程序大不,发出来如何
 
发出来吧,大家一起研究一下。
 
先获得这个窗口中的任一控件句柄,再获得这个控件的父窗口,再反过来判断此控件是不是父窗口的子窗口,一直循环下去,直到“此控件不是父窗口的子窗口”(因为当判断到主窗口时,它的父窗口就是桌面了,而他本身并不是桌面的“子窗口”)
 
spy++获得的那个覆盖的控件,然后退到那个树结构的界面看他的父窗体
 
参考下面代码弄一下。
function EnumProc(Handle: THandle; lParam: LPARAM): boolean ; stdcall;
var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
EnumWindows(@EnumProc, 4444);
end;
function EnumProc(Handle: THandle; lParam: LPARAM): boolean ; stdcall;
var wl:integer;
begin
if lparam=4444 then
begin
wl:=getWindowLong(handle,GWL_STYLE);
if (WS_CAPTION and wl)=0 then form1.memo1.lines.append(' handle: '+inttostr(handle));
//在此加些代码进一步根据尺寸筛选。
result:=true;
end;
end;
end.
 
多人接受答案了。
 
后退
顶部