如何在VB中打开其他程序,并执行程序?

liyanchao198 2012-08-24 05:19:21
1,我有一个VS做的小程序:输入关键字进行搜索相关项目
2,还有一个VB6做的程序,一个人力资源管理程序
3,现在我想用VB6做的管理程序去打开vs的搜索程序(用一个按钮单击),并根据vb6中的内容自动搜索相关项目

其中:vs不是我做的,没有源代码,vb6有源代码,请高手们点拨一下,思路+代码最好,没有代码有思路也十分感谢!
...全文
1835 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_18993463 2014-08-06
  • 打赏
  • 举报
回复
你是怎么解决的,跪求
liyanchao198 2013-01-19
  • 打赏
  • 举报
回复
我都忘了结贴了,谢谢各位,问题已解决
dongliudd 2012-09-09
  • 打赏
  • 举报
回复
学习啦,谢谢各位。
lliai 2012-09-05
  • 打赏
  • 举报
回复
用“shell()"
Bluesolos 2012-09-05
  • 打赏
  • 举报
回复
这个应该容易,给你个稳定的办法。
首先隐藏打开此程序,
然后注入程序,搜索窗口按钮句柄,编辑框句柄
通过这两个句柄输入信息及进行控制,
然后通过句柄判断搜索是否完成。
然后显示窗口就可以了,
就是这样,没有什么太好的办法。
sosoben 2012-09-05
  • 打赏
  • 举报
回复
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


(1)hwndParent:要查找子窗口的父窗口句柄。
  如果hwndParent为NULL,则函数以桌面窗口为父窗口,查找桌面窗口的所有子窗口。
(2)hwndChildAfter :子窗口句柄。查找从在Z序中的下一个子窗口开始。子窗口必须为hwndParent窗口的直接子窗口而非后代窗口。如果HwndChildAfter为NULL,查找从hwndParent的第一个子窗口开始。如果hwndParent 和 hwndChildAfter同时为NULL,则函数查找所有的顶层窗口及消息窗口。
(3)lpszClass:指向一个指定了类名的空结束字符串,或一个标识类名字符串的成员的指针。如果该参数为一个成员,则它必须为前次调用theGlobaIAddAtom函数产生的全局成员。该成员为16位,必须位于lpClassName的低16位,高位必须为0。
(4)lpszWindow:指向一个指定了窗口名(窗口标题)的空结束字符串。如果该参数为 NULL,则为所有窗口全匹配。
  hWnd1 Long,在其中查找子的父窗口。如设为零,表示使用桌面窗口(通常说的顶级窗口都被认为是桌面的子窗口,所以也会对它们进行查找)
  hWnd2 Long,从这个窗口后开始查找。这样便可利用对FindWindowEx的多次调用找到符合条件的所有子窗口。如设为零,表示从第一个子窗口开始搜索


也就是说,用这个可以查到子窗口,再查子窗口里面的子控件,你可以根据控件类型或名称去查找,有相同名称的话也可以通过顺序查找




lHwnd = FindWindow(vbNullString, titleSTR1)
lChildHwnd = FindWindowEx(lHwnd, 0&, vbNullString, titleSTR2)
lChildHwndY = FindWindowEx(lChildHwnd, 0&, vbNullString, "0")



得到句柄之后就好办了
可以sendmessage了
 For i = 1 To Len(Str)
SendMessage hwnd, WM_IME_CHAR, Asc(Mid(Str, i, 1)), 1
Next

送出你想要的字符


#DeFine WM_LBUTTONDBLCLK 0x203

双击鼠标左键

SendMessage BTNhwnd, WM_LBUTTONDBLCLK


#DeFine WM_LBUTTONDOWN 0x201

按下鼠标左键

#DeFine WM_LBUTTONUP 0x202

释放鼠标左键
c_cyd2008 2012-09-01
  • 打赏
  • 举报
回复
若spy++能看见,EnumChildWindows可枚举子窗口,
liyanchao198 2012-09-01
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

楼主你只有“结帖率:50.00% ”,尽量多结些帖也好升级啊。另,给人这帖加120分,鼓励大家回答
[/Quote]
。。。俺只发了两个贴了,第一个结了,这个还在进行中,至于分数我看大多都是这个数,我也就随大伙了,以后会增加的
liyanchao198 2012-09-01
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

楼主你只有“结帖率:50.00% ”,尽量多结些帖也好升级啊。另,给人这帖加120分,鼓励大家回答
[/Quote]
。。。俺只发了两个贴了,第一个结了,这个还在进行中,至于分数我看大多都是这个数,我也就随大伙了,以后会增加的
liyanchao198 2012-09-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

其实不用焦点的。

1)shell出VS程序。
2)取得VS程序的句柄,并通过FindWindowEx获取VS程序中输入框和按钮的句柄(我假设是这样)。
3)通过SendMessage,向VS的文本框输入内容(这个内容就是VB6中定义的了),然后再通过SendMessage按下VS的按键。

其中,shell是可以通过参数控制shell出来的程序获得焦点的。不用API。
[/Quote]



shell出程序自然没问题,但是我用findwindow或findwindowex或其他函数,却只能找出窗口中第一层的控件句柄,内层的找不到,比如窗口内有SysTabControl32,可以找到句柄,但SysTabControl32里还有个类名为#32770的窗口,就找不到了,更别提#32770里的控件了。。。愁死了
舉杯邀明月 2012-08-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

其实不用焦点的。

1)shell出VS程序。
2)取得VS程序的句柄,并通过FindWindowEx获取VS程序中输入框和按钮的句柄(我假设是这样)。
3)通过SendMessage,向VS的文本框输入内容(这个内容就是VB6中定义的了),然后再通过SendMessage按下VS的按键。

其中,shell是可以通过参数控制shell出来的程序获得焦点的。不用API。
[/Quote]

Ding
赵4老师 2012-08-30
  • 打赏
  • 举报
回复
bcrun 2012-08-29
  • 打赏
  • 举报
回复
楼主你只有“结帖率:50.00% ”,尽量多结些帖也好升级啊。另,给人这帖加120分,鼓励大家回答
asianh 2012-08-29
  • 打赏
  • 举报
回复
其实不用焦点的。

1)shell出VS程序。
2)取得VS程序的句柄,并通过FindWindowEx获取VS程序中输入框和按钮的句柄(我假设是这样)。
3)通过SendMessage,向VS的文本框输入内容(这个内容就是VB6中定义的了),然后再通过SendMessage按下VS的按键。

其中,shell是可以通过参数控制shell出来的程序获得焦点的。不用API。
liyanchao198 2012-08-25
  • 打赏
  • 举报
回复
一提到API我就菜鸟了,使窗口获得焦点是不是这个函数?
SetWindowFocus Lib "user32" Alias "SetFocus" (ByVal hWnd As Long) As Long
那为什么不用postmessgae?不用焦点额
aspdotnet50 2012-08-25
  • 打赏
  • 举报
回复
1、shell打开
2、用api保证打开的窗口取得蕉点
3、sendkey,对窗口发送相关的键信息
liyanchao198 2012-08-25
  • 打赏
  • 举报
回复
用spy++是不是可以获得任意窗口的句柄和类名?
liyanchao198 2012-08-25
  • 打赏
  • 举报
回复
多谢KingOfPorcupine的提示,shellex是不是就是shell?vs小程序中的搜索框、搜索按钮句柄如何获得呢?
我先百度下
KingOfPorcupine 2012-08-24
  • 打赏
  • 举报
回复
shellex 函数可以打开其他应用程序 并指定打开后窗口的状态
postmessage函数可以 向指定的(必须有句柄) 程序 或者程序上的控件发送消息 (单击 双击 字母 扩展键 = 文字信息可以用setkey(好像是这个吧))这些资料你去百度上搜 一大堆
KingOfPorcupine 2012-08-24
  • 打赏
  • 举报
回复
shellex 函数可以打开其他应用程序 并指定打开后窗口的状态
postmessage函数可以 向指定的(必须有句柄) 程序 或者程序上的控件发送消息 (单击 双击 字母 扩展键 = 文字信息可以用setkey(好像是这个吧))这些资料你去百度上搜 一大堆

7,789

社区成员

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

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