如何通过句柄得到控件名称?(200分)

A

AsStone

Unregistered / Unconfirmed
GUEST, unregistred user!
我通过EnumChildWindows 得到其他程序的控件列表,但只有ClassName和Caption.通过FindControl得到的返回值为nil,因为程序里面有多个Edit或Button,怎么通过控件的
句柄得到控件名称?因为,每次程序重新启动,这些控件的Handle又会改变.
谢谢!
 
Z

zzutrain

Unregistered / Unconfirmed
GUEST, unregistred user!
建议楼主用AccExplorer32.exe 微软提供的 工具软件分析一下软件,再做.
以前做IE7切换页面的时候用到过,很不错的工具。
 
A

AsStone

Unregistered / Unconfirmed
GUEST, unregistred user!
谢谢,我先试下.
我也有用过VC提供的SPY++,只能得到句柄,但这个句柄每次程序重新启动又变化了,无法进行识别.....
 
Z

zzutrain

Unregistered / Unconfirmed
GUEST, unregistred user!
vc的spy++ 和 delphi 的winsignt32 差不多,但是accexplorer32,我个人感觉更好用点。
 
A

AsStone

Unregistered / Unconfirmed
GUEST, unregistred user!
正在网上搜索,还没找到下载的地方....
 
A

AsStone

Unregistered / Unconfirmed
GUEST, unregistred user!
找到了,也用了下,用什么方法可以唯一识别同一类控件(比如:TEdit)呢?
 
Z

ztf86781163

Unregistered / Unconfirmed
GUEST, unregistred user!
FindControl,自己看看这个函数的实现
function FindControl(Handle: HWnd): TWinControl;
var
OwningProcess: DWORD;
begin
Result := nil;
if (Handle <> 0) and (GetWindowThreadProcessID(Handle, OwningProcess) <> 0) and
(OwningProcess = GetCurrentProcessId) then
begin
if GlobalFindAtom(PChar(ControlAtomString)) = ControlAtom then
Result := Pointer(GetProp(Handle, MakeIntAtom(ControlAtom)))
else
Result := ObjectFromHWnd(Handle);
end;
end;
 
Top Bottom