???已知另一软件中textbox的名字,如何取得它的句柄?
在一个正在使用的软件里有一个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




