CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  基础类

???已知另一软件中textbox的名字,如何取得它的句柄?

楼主DimVar(.Net中...)2002-05-09 11:33:45 在 VB / 基础类 提问

在一个正在使用的软件里有一个textbox   -   txtPrimary.   现需要用另一个程序得到txtPrimary的内容。  
  我现在用EnumChildWindows只可以得到所有的window的句柄,可是没办法知道哪一个才是txtPrimary的。  
  有效答案立即有分,绝不食言。  
  分数不够的话可以再加! 问题点数:100、回复次数:10Top

1 楼DimVar(.Net中...)回复于 2002-05-09 11:47:06 得分 0

if   u   have   the   answer,   pls   also   send   to   jack@teledirect.com.sgTop

2 楼bitsoft(我来也)回复于 2002-05-09 11:50:56 得分 0

Private   Declare   Function   GetTopWindow   Lib   "user32"   (ByVal   hwnd   As   Long)   As   Long  
  Private   Declare   Function   GetNextWindow   Lib   "user32"   Alias   "GetWindow"   (ByVal   hwnd   As   Long,   ByVal   wFlag   As   Long)   As   Long  
   
  Private   Sub   Command5_Click()  
  Dim   l1   As   Long  
   
  l1   =   GetTopWindow(&H2A02A8)'你的窗口句柄  
  Do   While   l1   >   0  
          l1   =   GetNextWindow(l1,   2)     '遍历  
  Loop  
  end   subTop

3 楼bitsoft(我来也)回复于 2002-05-09 11:53:52 得分 20

补充:用GetWindowText得到l1的text,和你所要的做比较Top

4 楼DimVar(.Net中...)回复于 2002-05-09 12:42:39 得分 0

问题在于textbox中的内容是变化的,不可以用来做比较。也就是说不可以通过比较textbox的内容来确定它的句柄。Top

5 楼zyl910(编程的乐趣在于编程控制硬件,与用图形学实现绚丽效果)回复于 2002-05-09 12:51:41 得分 30

FindWindowEx    
   
  VB声明    
  Declare   Function   FindWindowEx   Lib   "user32"   Alias   "FindWindowExA"   (ByVal   hWnd1   As   Long,   ByVal   hWnd2   As   Long,   ByVal   lpsz1   As   String,   ByVal   lpsz2   As   String)   As   Long    
  说明    
  在窗口列表中寻找与指定条件相符的第一个子窗口    
  返回值    
  Long,找到的窗口的句柄。如未找到相符窗口,则返回零。会设置GetLastError    
  参数表    
  参数   类型及说明    
  hWnd1   Long,在其中查找子的父窗口。如设为零,表示使用桌面窗口(通常说的顶级窗口都被认为是桌面的子窗口,所以也会对它们进行查找)    
  hWnd2   Long,从这个窗口后开始查找。这样便可利用对FindWindowEx的多次调用找到符合条件的所有子窗口。如设为零,表示从第一个子窗口开始搜索    
  lpsz1   String,欲搜索的类名。零表示忽略    
  lpsz2   String,欲搜索的类名。零表示忽略    
  Top

6 楼zyl910(编程的乐趣在于编程控制硬件,与用图形学实现绚丽效果)回复于 2002-05-09 12:54:10 得分 0

要查找的TextBox=FindWindowEx(另一窗体的hWnd,   0,   "Edit",   vbNullString)Top

7 楼DimVar(.Net中...)回复于 2002-05-09 13:30:50 得分 0

谢谢各位的回答。  
  可是在那个窗体上有很多的TEXTBOX。即便我得到所有的HWND,又怎么能知道哪个才是我所要的呢?Top

8 楼zxs218(Frank Zhou)回复于 2002-05-09 15:28:00 得分 0

在TextBox中的Tag属性设置一个特殊的字符,  
  然后再枚举窗体时检查窗口的UserData中的内容,如果有,且内容等于你设定的我想可能就是你要找的txtPrimary。  
   
  使用GetWindowLong(hWnd,   GWL_USERDATA)  
   
  你可以试一下,我没有测试过。Top

9 楼zxs218(Frank Zhou)回复于 2002-05-10 09:24:50 得分 50

使用字符串比较可能比较难,因为这需要进程重入。  
   
  另外我还有一个办法:  
   
  你可以通过SPY++工具捕获到txtPrimary的ControlID,然后使用zyl910(910:分儿,我来了!)的方法,获得所有的Edit控件,然后用GetWindowLong(hWnd,   GWL_ID)取得ControlID,然后比较即可,相同的即是txtPrimary。Top

10 楼DimVar(.Net中...)回复于 2002-05-11 17:09:54 得分 0

zxs218(Frank   Zhou)   的最后一个方法不错!  
  谢谢啦。Top

相关问题

  • 怎么取得TextBox控件的菜单句柄?
  • 在线等待 100分 如何取得一个已经知道名字的进程句柄
  • 关于窗口句柄的取得:)
  • 如何取得view 的句柄
  • 如何取得子窗口句柄
  • 怎样取得游戏窗口句柄
  • 如何取得桌面窗口句柄?
  • 怎样通过句柄(窗口句柄、DC句柄等)来取得对象占用的资源量?
  • 怎么取得 任务栏 的句柄?还有屏幕的句柄
  • 如何取得ActiveX控件的窗口句柄和他的父窗口句柄?

关键词

  • 内容
  • 句柄
  • txtprimary
  • 窗体
  • lpsz
  • findwindowex
  • textbox
  • 查找
  • hwnd
  • byval

得分解答快速导航

  • 帖主:DimVar
  • bitsoft
  • zyl910
  • zxs218

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo