
1新建三个命令按钮Command1命名“写字”,Command1命名“禁用”,Command1命名“关闭”;2在窗体写下如下代码:
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 EnableWindow Lib "user32" (ByVal hwnd As Long, ByVal fEnable As Long) As Long
'该程序在VB60下由shumu_qing测试通过
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 Const WM_CLOSE = &H10
Private Const WM_SETTEXT = &HC
Private Sub Command1_Click()
Dim WindowHandle As Long, ChildWindowHandle As Long
WindowHandle = FindWindow(vbNullString, "无标题 - 记事本")
If WindowHandle Then '如果获取句柄成功
ChildWindowHandle = FindWindowEx(WindowHandle, 0, "Edit", vbNullString)
If ChildWindowHandle Then '如果成功获取子句柄
SendMessage ChildWindowHandle, WM_SETTEXT, 0, ByVal CStr("hello") '发送hello消息
Else
MsgBox "无法获取子窗口", vbCritical, "提示"
End If
Else
MsgBox "无法获取窗口", vbCritical, "提示"
End If
End SubPrivate Sub Command2_Click()
Dim WindowHandle As Long, ChildWindowHandle As Long
WindowHandle = FindWindow(vbNullString, "无标题 - 记事本")
If WindowHandle Then '如果获取句柄成功
ChildWindowHandle = FindWindowEx(WindowHandle, 0, "Edit", vbNullString)
If ChildWindowHandle Then '如果成功获取子句柄
EnableWindow ChildWindowHandle, False '禁用子窗口
Else
MsgBox "无法获取子窗口", vbCritical, "提示"
End If
Else
MsgBox "无法获取窗口", vbCritical, "提示"
End If
End SubPrivate Sub Command3_Click()
Dim WindowHandle As Long
WindowHandle = FindWindow(vbNullString, "无标题 - 记事本")
If WindowHandle Then '如果获取句柄成功
SendMessage WindowHandle, WM_CLOSE, 0, 0 '关闭窗口
Else
MsgBox "无法获取窗口", vbCritical, "提示"
End If
End Sub
先找到窗口的句柄,再来查找按钮的句柄,如果按钮有文本内容,那就好办,如果没有,那建议你利用SPY++先来察看一下按钮的类型,以此类型为查找参数多次调用FindWindowEx来查找,直到找到的的句柄和Spy++相同,那么这个按钮就找到了。
按钮类名同样,但是你去遍历的时候它的次序始终是固定的。通过id不可靠,有些有id但是有些id是0。
clswindow类,里面有个函数etElementHwndByClassName,可以得到指定的次序按钮。加入你要处理的按钮是在第二个次序,类名为Button,那么就用:GetElementHwndByClassName("Button",2),即可,
具体代码:
Private Sub Command6_Click()
Dim w As New clsWindow
Dim i%
If wGetWindowHwndByTitleEx("自动化 *** 作框架") > 0 Then
i = i + 1
Do While wGetElementHwndByClassName("ThunderCommandButton", i) > 0'按次序遍历
MsgBox wGetElementHwndByClassName("ThunderCommandButton", i)'得到当前次序按钮的句柄
wSetElementTextByClassName "ThunderCommandButton", "次序" & i, i'设置按钮文本
i = i + 1
Loop
End If
End Sub
1、如果是对话框,那么先得到那个对话框的窗口hWnd,然后通过传入ID就会得到对应的编辑框句柄,然后得到文本:
HWND hEdit = GetDlgItem( hDlgWnd, uEditID );
TCHAR szBuf[MAX_PATH];
::GetWindowText( hEdit, szBuf, MAX_PATH );
2、如果是其他窗口,其他窗口创建时保存Edit窗口的指针,然后通过这个指针得到文本内容:
CString csText;
pEditWnd->GetWindowText(csText);
以上就是关于如何在VB中打开一个记事本窗口并获取窗口句柄,向其中发送富文本框中的内容(最好带格式)全部的内容,包括:如何在VB中打开一个记事本窗口并获取窗口句柄,向其中发送富文本框中的内容(最好带格式)、vb怎么获取控件句柄和内容、在VC++MFC中,怎样从一个窗口获取另外一个窗口的编辑框的文本等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)