怎么在vb窗体里显示其他的exe程序
就是打开VB窗体后,将另外一个exe程序显示在vb的窗体内并且还要设置位置大小的aaxx254#163.com谢谢!...
就是打开VB窗体后,将另外一个exe程序显示在vb 的窗体内
并且还要设置位置大小的
aaxx254#163.com
谢谢! 展开
并且还要设置位置大小的
aaxx254#163.com
谢谢! 展开
3个回答
展开全部
我赞成 crazy0qwer 的意见,同时鄙视zx001z 照搬抄袭,还运行一个带这样提示的s1.exe
要注意的是 比如计算器 在 切换 科学 和 普通的时候 句柄会变化,,另外有的程序加载的慢,导致在查找句柄的时候还没建立窗体,所以查不到句柄设置失败, 有的窗体运行后不是最前端也会导致失败。所以最好用 API FINDWINDOW 来查找句柄而不是 GetForegroundWindow 获得前端的句柄
用 findwindowex 可以查到所有的句柄声明如下
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 SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Function MoveWindow Lib "user32" (ByVal Hwnd As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long
Private Sub Command1_Click()
Dim Hwnd As Long
Shell "calc.exe", vbNormalFocus
Hwnd = GetForegroundWindow
SetParent Hwnd, Me.Hwnd
MoveWindow Hwnd, 0, 0, 200, 200, 1 ' 0,0 是位置,200,200是宽度和高度
End Sub
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Function MoveWindow Lib "user32" (ByVal Hwnd As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long
Private Sub Command1_Click()
Dim Hwnd As Long
Shell "calc.exe", vbNormalFocus
Hwnd = GetForegroundWindow
SetParent Hwnd, Me.Hwnd
MoveWindow Hwnd, 0, 0, 200, 200, 1 ' 0,0 是位置,200,200是宽度和高度
End Sub
更多追问追答
追问
这个一般程序都可以。可是这弄的这个好像不行,在窗体外面运行的。是不是有托盘图标的问题啊!
追答
额,我说了这就是一个很简单的例子,没有考虑那么多。你自己应该学会调试。
也不知道你要设置的是什么样的窗体,是本程序调用的还是自己打开的。
如下调试:
1、在 SetParent Hwnd, Me.Hwnd 这里设置一个断点,运行程序,到断点后检查获得的句柄是否和你希望的一致。
2、打开你要设置的这个窗口,手动获取它句柄(这个网上一大把,不说了),直接把句柄填入SetParent Hwnd, Me.Hwnd 里面,测试看看。如果可以那就是取句柄问题,不可以就是其他问题了。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用API函数
SetParent声明方法:
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
函数功能:该函数改变某个子窗口的父窗口。
函数原型:HWND SetParent(HWND hWndChild,HWND hWndNewParent);
参数:
hWndChild:子窗口句柄。
hWndNewParent:新的父窗口句柄。如果该参数是NULL,则桌面窗口就成为新的父窗口。在WindowsNT5.0中,如果参数为HWND_MESSAGE,则子窗口成为消息窗口。
返回值:如果函数成功,返回值为子窗口的原父窗口句柄;如果函数失败,返回值为NULL。若想获得多错误信息,请调用GetLastError函数。
备注:应用程序可以使用SetParent函数来设置弹出式窗口,层叠窗口或子窗口的父窗口。新的窗口与窗口必须属于同一应用程序。
如果参数hWndChild标识的窗口是可见的,系统将执行适当的重画和刷新动作。
由于兼容的原因,对于将改变父窗口的子窗口,SetParent函数并不改变该子窗口的WS_CHILD WS_POPUP风格。所以,如果hWndNewParent参数为NULL,就应在调用SetParent函数之后清空WS_CHILD位并且设置为WS_POPUP风格。相反的,如果hWndNewParent参数不为NULL并且在此之前窗口是桌面窗口的子窗口,就应在调用SetParent函数之前清空WS_POPUP位井设置WS_CHILD风格。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0以上版本:头文件:Winuser.h;库文件:user32.lib。
SetParent声明方法:
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
函数功能:该函数改变某个子窗口的父窗口。
函数原型:HWND SetParent(HWND hWndChild,HWND hWndNewParent);
参数:
hWndChild:子窗口句柄。
hWndNewParent:新的父窗口句柄。如果该参数是NULL,则桌面窗口就成为新的父窗口。在WindowsNT5.0中,如果参数为HWND_MESSAGE,则子窗口成为消息窗口。
返回值:如果函数成功,返回值为子窗口的原父窗口句柄;如果函数失败,返回值为NULL。若想获得多错误信息,请调用GetLastError函数。
备注:应用程序可以使用SetParent函数来设置弹出式窗口,层叠窗口或子窗口的父窗口。新的窗口与窗口必须属于同一应用程序。
如果参数hWndChild标识的窗口是可见的,系统将执行适当的重画和刷新动作。
由于兼容的原因,对于将改变父窗口的子窗口,SetParent函数并不改变该子窗口的WS_CHILD WS_POPUP风格。所以,如果hWndNewParent参数为NULL,就应在调用SetParent函数之后清空WS_CHILD位并且设置为WS_POPUP风格。相反的,如果hWndNewParent参数不为NULL并且在此之前窗口是桌面窗口的子窗口,就应在调用SetParent函数之前清空WS_POPUP位井设置WS_CHILD风格。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0以上版本:头文件:Winuser.h;库文件:user32.lib。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询