API 获得多个文本框句柄

derway 2004-07-27 05:28:19
在一个窗口里,如何用API函数来获取它里的多个文本
输入框的句柄?
...全文
326 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
cchen 2004-07-30
  • 打赏
  • 举报
回复
WindowFromPoint是用鼠标取句柄的函数,可以看看,或许会有用的!!呵呵!!
fei19790920 2004-07-28
  • 打赏
  • 举报
回复
既然没有Caption,那就得拿绝招了

这个控件在当前窗口的坐标你应该可以得到吧,大概的位置也可以,但要在该控件的区域内:
var
h, hChild: HWND;
begin
h := handle; //FindWindow(nil, '窗口标题');
hChild := ChildWindowFromPointEx(h,Point(10,10),CWP_ALL);//查找的位置为10,10的控件
if hChild <> 0 then
begin
//找到一个TEdit
end;
derway 2004-07-28
  • 打赏
  • 举报
回复
它能够提供接口的话,我就不用发贴啦!
我知道你(数字蛋糕)写的那几行代码没用,
但是(抵制日货)写的那几行代码道给了我一些思路
fei19790920 2004-07-28
  • 打赏
  • 举报
回复
唉,我目前也没有办法解决,郁闷。。。
derway 2004-07-28
  • 打赏
  • 举报
回复
看上去很绝!
但实质上用起来后,就找不准相应位置上的控件的句柄了
如果找的是按钮的话就容易很多了
所以你用的还不算是绝招.
歪打正不着!
大哥,还有什么招术啊?
其实你有没有用过这个函数的?
位置已经是那个控件上的了,但找出来的句柄是它的parent的句柄
数字蛋糕 2004-07-28
  • 打赏
  • 举报
回复
首先一点:另一个程序不一定是Delphi写的,所以我上面的方法不可行。

然后:程序之间通信最好能够有生产商提供的接口,而不是笨拙的通过搜索来查找。万一别人开了两个窗口怎么办?你怎么知道该往哪一个窗口发消息。
nyf1220 2004-07-27
  • 打赏
  • 举报
回复
哈哈,以前也找过,不行呀,
那些没有名字的,我却又想找到他的句并的,就不会~~
derway 2004-07-27
  • 打赏
  • 举报
回复
各位高手,还有什么办法啊?

给小弟解答一下,感激不尽啊!
derway 2004-07-27
  • 打赏
  • 举报
回复
问题是用spy++来找的时候,它的caption 都是空的,
这才叫苦啊!
fei19790920 2004-07-27
  • 打赏
  • 举报
回复
var
h, hChild: HWND;
i: integer;
begin
h := handle; //FindWindow(nil, '窗口标题');
hChild := 0;
hChild := FindWindowEx(h, 0, 'TEdit', 'Edit1');//如果要找的名字叫“Edit1”
if hChild <> 0 then
begin
//找到一个TEdit
end;
end;
derway 2004-07-27
  • 打赏
  • 举报
回复
取数据和发数据的窗口的程序是一个厂家编的通讯软件来的
derway 2004-07-27
  • 打赏
  • 举报
回复
其实,这个意图主要是:自己编一个程序来控制另外一个程序的
从另外一个程序窗口上的文本框里取数据各发数据
但是前提是要确定找出来的句柄对应的是哪一个文本框
beyondtkl 2004-07-27
  • 打赏
  • 举报
回复
如果这样的话,那我可不可以只找出当想要的那一个文本框控件的句柄?
例如一个是收数据的框,一个是发数据的框,
假如现在我要的那个框是收的,那个这个句柄如何确定呢?

// 这就需要你自己确定了 或者
你专门为这种<这个>句柄写一个专门的消息及处理函数 你发数据时就通过此消息发。。
beyondtkl 2004-07-27
  • 打赏
  • 举报
回复
同意楼上 遍历查找...
derway 2004-07-27
  • 打赏
  • 举报
回复
如果这样的话,那我可不可以只找出当想要的那一个文本框控件的句柄?
例如一个是收数据的框,一个是发数据的框,
假如现在我要的那个框是收的,那个这个句柄如何确定呢?
数字蛋糕 2004-07-27
  • 打赏
  • 举报
回复
for i := 0 to ComponentCount - 1 do
begin
if Components[i] is TCustomEdit then
begin
//找到一个文本输入框,该干什么干什么……
end;
end;
fei19790920 2004-07-27
  • 打赏
  • 举报
回复
var
h, hChild: HWND;
i: integer;
begin
h := FindWindow(nil, '窗口标题');
hChild := 0;
i := 0;
while h <> 0 do
begin
hChild := FindWindowEx(h, hChild, 'TEdit', nil);
if hChild <> 0 then
begin
//找到一个TEdit
inc(i);
end
else
Break;
end;
showmessage(inttostr(i));
end;

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧