VB操作SysTabControl32控件及获取Edit内容问题请教

醉盅的虾米 2020-03-26 11:21:39
想用VB操作通达信的数据导出窗口,有些问题请教.


想实现功能,点击Excel文件标签,取得文本框中的文件名,执行导出操作,代码如下:

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 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 SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long

Private Const TCM_FIRST = &H1300
Private Const TCM_SETCURFOCUS = (TCM_FIRST + 48)
Private Const BM_CLICK As Long = &HF5

Public Sub 数据导出()
Dim tdx_hwnd As Long
Dim tdx_bqkz As Long
Dim tdx_control As Long
Dim Filename As String

tdx_hwnd = FindWindow(vbNullString, "数据导出") '查找数据导出窗口
If tdx_hwnd <> 0 Then
tdx_bqkz = FindWindowEx(tdx_hwnd, 0, "SysTabControl32", "Tab1")
SendMessage tdx_bqkz, TCM_SETCURFOCUS, 1, 0 '让Excel文件标签获得焦点

SetForegroundWindow tdx_hwnd
tdx_control = FindWindowEx(tdx_hwnd, 0, "Edit", vbNullString) '查找控件存盘文件名
Dim s As String * 255
GetWindowText tdx_control, s, Len(s)

tdx_control = FindWindowEx(tdx_hwnd, 0, "Button", "导出") '查找控件
SendMessage tdx_control, BM_CLICK, 0, 0
End If
End Sub

运行效果如下:


红色那句代码可以让Excel文件标签选中,但文本框中的文件不会随着改变,与鼠标点击有些不一样。
洋红色那句代码不能取得Edit控件中的文件名,总是为空。
请各位老师帮看看是什么问题。
...全文
570 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
醉盅的虾米 2020-03-28
  • 打赏
  • 举报
回复
经过测试,红色部份我改为使用Mouse click来代替,实现了想用的功能。

洋红色部份我改用SendMessage的WM_GETTEXT方法实现。

1,453

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧