当前位置:编程学习 > VB >>

如何跨进程控制别的窗体的TreeView

size=14px]有个程序窗口中有个TreeView控件(这是人家封装好了的exe文件),请问用啥方法去激活该控件某子节点的NodeClick事件。
补充:我现在采用的API函数,已经能获取到该窗口以及该控件、对应子节点的句柄了,并且还可以选中我所需要的子节点。[/size] --------------------编程问答-------------------- 发送鼠标按键啊 --------------------编程问答-------------------- 不行啊。 --------------------编程问答--------------------
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Const WM_LBUTTONDOWN = &H201
Private Const WM_LBUTTONUP = &H202
Private Sub Command1_Click()
    MsgBox "123"
End Sub

Private Sub Command2_Click()
    PostMessage Command1.hwnd, WM_LBUTTONDOWN, 0, 0
    PostMessage Command1.hwnd, WM_LBUTTONUP, 0, 0
End Sub
--------------------编程问答-------------------- phwnd = FindWindow("TFrmMain", "程序登录") '获得“程序登录.exe”窗体句柄

'hTreeView = GetWindow(phwnd, GW_CHILD) '获得SysTreeView32控件句柄
hTreeView = FindWindowEx(phwnd, 0, "TTreeView", "")  '获得SysTreeView32控件句柄

hTVRoot = SendMessage(hTreeView, TVM_GETNEXTITEM, TVGN_ROOT, ByVal 0&) '获得SysTreeView32控件根节点
hTVItem = SendMessage(hTreeView, TVM_GETNEXTITEM, TVGN_CHILD, ByVal hTVRoot) '获得SysTreeView32控件第一子节点
hTVItem = SendMessage(hTreeView, TVM_GETNEXTITEM, TVGN_NEXT, ByVal hTVItem) '获得SysTreeView32控件第二子节点
hTVItem = SendMessage(hTreeView, TVM_GETNEXTITEM, TVGN_NEXT, ByVal hTVItem) '获得SysTreeView32控件第三子节点
SendMessage hTreeView, TVM_SELECTITEM, TVGN_Caret, ByVal hTVItem '选中第三子节点

'rc.Left = hTVItem '子节点的句柄
'Call SendMessage(hTreeView, TVM_GETITEMRECT, True, hTVItem)

'pt.x = rc.Left
'pt.y = rc.Top
'节点的相对坐标要变为绝对坐标
'Call ClientToScreen(hTreeView, pt)
'Call SetCursorPos(pt.x - rc.Left + 10, pt.y - 2) '在处理第三方的TreeView时我发现只能是pt.x - rc.Left,而网上查到的仅是pt.x,不知道为什么?  另外+10和-2是根据第三方的这个控件不同适当的调整其鼠标偏移量

'mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
'mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 --------------------编程问答-------------------- 这是我后面的,这样鼠标不能在我所需要的节点行点击。 --------------------编程问答--------------------
引用 3 楼 dbcontrols 的回复:
VB code
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Const WM_LBUTTONDO……

这可不行,你这是在本窗口啊。我是在其它窗口的TreeView控件中的某节点。 --------------------编程问答-------------------- 你不是得到句柄了吗?换成你的句柄就可以了
如果这点变化都不会,还是改行吧
东西学的拳南北不会打
学法律去吧,死脑筋

引用 6 楼 daijianhua 的回复:
引用 3 楼 dbcontrols 的回复:
VB code
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Pr……
--------------------编程问答-------------------- 泰山兄,我是将得到的句柄写上去的,但是程序执行后并没执行TreeView的NodeClick事件啊!
phwnd = FindWindow("TFrmMain", "三方程序") '获得“三方程序.exe”窗体句柄

'hTreeView = GetWindow(phwnd, GW_CHILD) '获得SysTreeView32控件句柄
hTreeView = FindWindowEx(phwnd, 0, "TTreeView", "")  '获得SysTreeView32控件句柄

hTVRoot = SendMessage(hTreeView, TVM_GETNEXTITEM, TVGN_ROOT, ByVal 0&) '获得SysTreeView32控件根节点
hTVItem = SendMessage(hTreeView, TVM_GETNEXTITEM, TVGN_CHILD, ByVal hTVRoot) '获得SysTreeView32控件第一子节点
hTVItem = SendMessage(hTreeView, TVM_GETNEXTITEM, TVGN_NEXT, ByVal hTVItem) '获得SysTreeView32控件第二子节点
hTVItem = SendMessage(hTreeView, TVM_GETNEXTITEM, TVGN_NEXT, ByVal hTVItem) '获得SysTreeView32控件第三子节点
SendMessage hTreeView, TVM_SELECTITEM, TVGN_Caret, ByVal hTVItem '选中第三子节点


PostMessage hTVItem, WM_LBUTTONDOWN, 0, 0
PostMessage hTVItem, WM_LBUTTONUP, 0, 0

这后面已经将句柄写上去的,这里的hTVItem就是我所需要子节点的句柄啊。
谢谢泰山兄帮助啊。 --------------------编程问答--------------------
phwnd = FindWindow("TFrmMain", "三方程序") '获得“三方程序.exe”窗体句柄

'hTreeView = GetWindow(phwnd, GW_CHILD) '获得SysTreeView32控件句柄
hTreeView = FindWindowEx(phwnd, 0, "TTreeView", "") '获得SysTreeView32控件句柄

hTVRoot = SendMessage(hTreeView, TVM_GETNEXTITEM, TVGN_ROOT, ByVal 0&) '获得SysTreeView32控件根节点
hTVItem = SendMessage(hTreeView, TVM_GETNEXTITEM, TVGN_CHILD, ByVal hTVRoot) '获得SysTreeView32控件第一子节点
hTVItem = SendMessage(hTreeView, TVM_GETNEXTITEM, TVGN_NEXT, ByVal hTVItem) '获得SysTreeView32控件第二子节点
hTVItem = SendMessage(hTreeView, TVM_GETNEXTITEM, TVGN_NEXT, ByVal hTVItem) '获得SysTreeView32控件第三子节点
SendMessage hTreeView, TVM_SELECTITEM, TVGN_Caret, ByVal hTVItem '选中第三子节点


PostMessage hTVItem, WM_LBUTTONDOWN, 0, 0
PostMessage hTVItem, WM_LBUTTONUP, 0, 0
--------------------编程问答-------------------- 没有三方程序.exe,无法测试
估计是你根本没得到节点的句柄 --------------------编程问答-------------------- 得到了,因为可以选中对应的子节点啊。并且用msgbox能看得到句柄,和spy++所获得是一样的。 --------------------编程问答-------------------- --------------------编程问答-------------------- 看样子VB下不能做这样的东西! --------------------编程问答-------------------- 不是vb做不了 是你做不了 看你对这个完全不懂 不想多说 --------------------编程问答-------------------- 我也想知道,可是好像都找没到答案,不知道LZ选中自己想要的节点功能是怎么去实现的呢?如果可以能发下您的方法给我吗?
不管结果怎样,先谢过您先。
549210375@qq.com
这是我的邮箱。 --------------------编程问答-------------------- 楼主的问题解决了吗,能指导指导吧,我也是这样的问题,两天了都没解决呢....
补充:VB ,  API
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,