试了多种方法都无效.什么FindWindowEx,GetCurrPos+WindowFromPoint
得到的句柄并不是这个输入框的!
但用SPY++又能得到正确句柄.真是奇怪.环境:WIN2K SP4
得到的句柄并不是这个输入框的!
但用SPY++又能得到正确句柄.真是奇怪.环境:WIN2K SP4
解决方案 »
- 新手问题,如何在循环语句中加入自己的判断语句
- textbox的行数
- 精华共享系列一:图形信息校验码识别,转换任意图像为Base64文本
- 请问前辈:
- VB怎么监视某一个API函数是否被调用?
- 知道如果我知道一个按钮地句柄后怎样模拟按下
- 初学者的问题:如何配置VB,使VB不以默认工程打开?谢谢了。
- 我在frame里加了一个日期控件,可是由于frame比较小,而导致有部分空间被遮盖了,该怎么办?(当然不能再把frame拉大啦)有没有办法把它
- 控件注册问题?
- 有关鼠标单击和双击的问题,详情请进~~~~~~~~(看在偶出了一百分的份上,:-D)
- 鼠标座标问题
- 不好意思.俺的问题问错了.这贴修正一下--如何取CHM中的关键字输入框句柄?
HH Child
SysTabControl32
#32770
ComboBox
Edit
但是只有切换到“搜索”页
那个Edit才会创建
如果没切换到“搜索”页
那个Edit不存在
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As LongPrivate Sub Command1_Click()
Dim hDlg As Long
Dim hWndChild As Long
Dim hWnd As Long
hDlg = FindWindow("HH Parent", vbNullString)
'hWnd = FindWindowEx(hDlg, 0, "HH Child", vbNullString)'由于存在同类名控件,所以无法区分
hWndChild = 0
Do
hWndChild = FindWindowEx(hDlg, hWndChild, "HH Child", vbNullString)
Debug.Print hWndChild
If hWndChild = 0 Then Exit Do
hWnd = FindWindowEx(hWndChild, 0, "SysTabControl32", vbNullString)
hWnd = FindWindowEx(hWnd, 0, "#32770", vbNullString)
hWnd = FindWindowEx(hWnd, 0, "ComboBox", vbNullString)
hWnd = FindWindowEx(hWnd, 0, "Edit", vbNullString)
If hWnd <> 0 Then Exit Do
Loop
MsgBox hWnd'找到了!
End Sub
我怎么没试成功?已经切换到搜索页了。
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private 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
Private Declare Function putFocus Lib "user32" Alias "SetFocus" (ByVal hwnd As Long) As Long
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Private Declare Function GetFocus Lib "user32" () As Long
Private Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String) As Long
Private Const WM_SETTEXT = &HCPrivate Sub Command1_Click()
Dim s As String
s = "VB技巧" '换成你要查找的窗口标题
Dim mhwnd As Long
mhwnd = FindWindow("HH Parent", s)
'显示找到的窗口
ShowWindow mhwnd, vbNormalFocus
'切换到搜索页
SendKeys "%S", 1
Dim texthwnd As Long
'使编辑框获得输入焦点
SendKeys "%w"
'获得编辑框的句柄,texthwnd即为所求
texthwnd = GetFocus
'设置编辑框的内容
SendMessage texthwnd, WM_SETTEXT, 0&, ByVal "this is test"
'以下程序没大用,验证用的,获得编辑框的类名
Dim ss As String * 256
GetClassName texthwnd, ss, 256
Debug.Print Left(ss, InStr(1, ss, Chr(0)) - 1)
End Sub
我真正想知道的是如何得到KeyWord的EDIT框.当然,此贴的分我还是会给的.但结完了之后想必各位都不会再看贴子了.还是呆会再结比较好.嘿嘿~
Option ExplicitPrivate Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private 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
Private Declare Function putFocus Lib "user32" Alias "SetFocus" (ByVal hwnd As Long) As Long
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Private Declare Function GetFocus Lib "user32" () As Long
Private Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String) As Long
Private Const WM_SETTEXT = &HCPrivate Sub Command1_Click()
Dim s As String
s = "VB技巧" '换成你要查找的窗口标题
Dim mhwnd As Long
mhwnd = FindWindow("HH Parent", s)
'显示找到的窗口
ShowWindow mhwnd, vbNormalFocus
'切换到索引页
SendKeys "%N", 1
Dim texthwnd As Long
'使编辑框获得输入焦点
SendKeys "%w"
'获得编辑框的句柄,texthwnd即为所求
texthwnd = GetFocus
'设置编辑框的内容
SendMessage texthwnd, WM_SETTEXT, 0&, ByVal "this is test"
'以下程序没大用,验证用的,获得编辑框的类名
Dim ss As String * 256
GetClassName texthwnd, ss, 256
Debug.Print Left(ss, InStr(1, ss, Chr(0)) - 1)
End Sub
窗体上只能有一个按钮(如果有其它控件的话,要临时改变他们的Enabled属性)
BOOL AttachThreadInput(
DWORD idAttach, // 需要附加的线程ID
DWORD idAttachTo, // 附加到的线程ID
BOOL fAttach // true 附加 false 取消
); 可是问题是,我没用attachThreadInput就可以通过GetFocus获得其它线程的窗口句柄,奇怪!不解!
Private 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
Private Declare Function GetDlgCtrlID Lib "user32.dll" (ByVal hwnd As Long) As LongPrivate Declare Function GetFocus Lib "user32" () As LongPrivate Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const WM_LBUTTONDOWN As Long = &H201
Private Const WM_LBUTTONUP As Long = &H202
Private Const MK_LBUTTON As Long = &H1Private Const WM_SETTEXT = &HC
Private Sub Command1_Click()
Dim hWndMain As Long
Dim hWndChild As Long
Dim hWndTab As Long
Dim hWndEdit As Long
'得到主窗体的句柄
hWndMain = FindWindow("HH Parent", vbNullString)
'Debug.Print "Main:"; hWndMain
'得到Tab控件的句柄
hWndChild = 0
Do
hWndChild = FindWindowEx(hWndMain, hWndChild, "HH Child", vbNullString)
If hWndChild = 0 Then Exit Do
hWndTab = FindWindowEx(hWndChild, 0, "SysTabControl32", vbNullString)
If hWndTab <> 0 Then Exit Do
Loop
'Debug.Print "Tab:"; hWndTab
'切换到“索引”页
Call SendMessage(hWndTab, WM_LBUTTONDOWN, MK_LBUTTON, ByVal &H80050) '&H80050是坐标(80,8)
'得到索引文本框的句柄
hWndEdit = FindWindowEx(hWndChild, 0, "Edit", vbNullString)
'Debug.Print "Edit:"; hWndEdit
'设置文字
Call SendMessage(hWndEdit, WM_SETTEXT, 0, ByVal "这是“索引”文本框")
End Sub