先找到父窗口 管理员管理 这个窗体的句柄,然后再根据父窗口句柄找出它的子窗口
最后发送一条消息就可以了
可以用下面的API函数
查找窗口可用FindWindowEx
发送消息用SendMessage
方法不止这一种 ,窗口句柄还可以通枚举的方式也可以获取
给你两个API
EnumWindows
EnumChildWindows
具体增么实现 怎么找到字窗口
代码我写好了 你按我的说法测试一下 成功后就你可以仿照这个做了
模块代码
Option Explicit
Public Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Public Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Public Declare Function SendMessage& Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any)
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public 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
Public Const WM_SETTEXT = &HC
Public TextHwnd(5) As Long
Public EnumCount As Integer
Public Function WinProc(ByVal hwnd As Long, ByVal lParam As Long) As Long
Dim tmpStr As String
Dim sLen As Integer
sLen = Len("ThunderRT6TextBox")
tmpStr = Space(sLen)
GetClassName hwnd, tmpStr, sLen + 1
If InStr(tmpStr, "ThunderRT6TextBox") > 0 Then
TextHwnd(EnumCount) = hwnd
End If
EnumCount = EnumCount + 1
WinProc = 1
End Function
窗体代码
Private Sub Command1_Click()
Dim t As Long
Dim c As Long
Dim tmp As String
t = FindWindow(vbNullString, "我的测试窗口")
If t <= 0 Then MsgBox "false"
EnumCount = 0
EnumChildWindows t, AddressOf WinProc, 0
tmp = “asdfqwerdfg”
SendMessage TextHwnd(0), WM_SETTEXT, 0, ByVal tmp
tmp = "123456789"
SendMessage TextHwnd(1), WM_SETTEXT, 0, ByVal tmp
End Sub
然后再新建一个工程,w做为测试窗体,窗体上放两个TEXT控件。窗体的名称Caption设置为"我的测试窗口",然后将这个空程序生成EXE,生成完成后运行这个窗体名叫 我的测试窗口 的EXE
然后再运行上面的那个工作,点击按钮,程序会自动搜索 窗体名为 “我的测试窗口”的EXE文件的窗口,并且设置这个窗口里的文本框一和文本框二的内容
在此先谢谢你能够帮助我
但是我把你的代码测试了一下可以 也有一些地方不懂
如果窗口上有三个TEXT就不能准确发送了
还有就是有三个按钮 三个TEXT这个就会无效了
在此请教
呵呵 刚才疏忽了
把这句代码写在IF判断里边
因为EnumCount是做数组下标用的
EnumCount = EnumCount + 1
原句
If InStr(tmpStr, "ThunderRT6TextBox") > 0 Then
TextHwnd(EnumCount) = hwnd
End If
EnumCount = EnumCount + 1
改成下面这样就OK了
If InStr(tmpStr, "ThunderRT6TextBox") > 0 Then
TextHwnd(EnumCount) = hwnd
EnumCount = EnumCount + 1
End If
只有找到一个TEXT文本框的时候 才让数组的下标加1,不然这个句柄就不会保存到数组下标为0 和 1 里面了
还是没有搞懂 你可以加我QQ吗? 370907531 非常感激
2009年3亿用户都在问什么?快来看看!
十大娱乐事件、十大网络用语、人物影视top10......所有你想知道的,尽在问问!