请教:把外部程序怎么嵌入到自己的窗体中运行

lirenedu 2006-11-22 08:59:47
我有一个窗体,我希望反一个外部程序的窗口直接嵌入到我自己的窗体中运行

,比如:把cmd.exe嵌入到我自己的窗体中运行,但不显示cmd.exe的标题栏.

我不知道我描述清楚没有...(可惜不能贴图)..

...全文
697 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
sx_lxh 2006-11-23
  • 打赏
  • 举报
回复
Declare Function SetParent Lib "user32" Alias "SetParent" (ByVal hWndChild As IntPtr, ByVal hWndNewParent As IntPtr) As Integer
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Int32, ByVal wMsg As Int32, ByVal wParam As Int32, ByVal lParam As Int32) As Int32
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Int32, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Int32) As Int32

Private Const WM_SYSCOMMAND As Int32 = &H112
Private Const SC_MAXIMIZE As Int32 = &HF030
Private Const SC_MINIMIZE As Int32 = &HF020
Private Const SC_RESTORE As Int32 = &HF120
Public Const SW_HIDE = 0
Public Const SW_SHOW = 5

Private Declare Function ShowWindow Lib "user32.dll" (ByVal hwnd As Int32, ByVal nCmdShow As Int32) As Int32


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
ShellExecute(Me.Panel1.Handle, "open", "c:\windows\system32\cmd.exe", Nothing, ".", SW_HIDE)
System.Threading.Thread.Sleep(50) '我发现,不休息的话,下面的FindWindow有可能找不到窗体
Dim h As IntPtr = FindWindow(Nothing, "c:\windows\system32\cmd.exe")
ShowWindow(h, SW_HIDE)
SetParent(h, Me.Panel1.Handle) '嵌套到panel1内
SendMessage(h, WM_SYSCOMMAND, SC_MAXIMIZE, 0)
End Sub
lirenedu 2006-11-22
  • 打赏
  • 举报
回复
有问题
1) 我第一次执行的时候能成功,但会先弹出cmd.exe的窗口,然后才在panel1中显示
2) 再次执行就不能成功了.(我已经编译,执行的是编译的exe文件)

3)cmd.exe窗体的大小可以在panel1中随意移动,(能不能把它固定下来)还有cmd.exe的窗体大小,怎么控制?
sx_lxh 2006-11-22
  • 打赏
  • 举报
回复
原来网上整理的,参考一下。
sx_lxh 2006-11-22
  • 打赏
  • 举报
回复
下面的代码应该可以吧CMD窗体嵌套到你自己的窗体内:
Declare Function SetParent Lib "user32" Alias "SetParent" (ByVal hWndChild As IntPtr, ByVal hWndNewParent As IntPtr) As Integer
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
System.Diagnostics.Process.Start("c:\windows\system32\cmd.exe")
System.Threading.Thread.Sleep(50) '我发现,不休息的话,下面的FindWindow有可能找不到窗体
Dim h As IntPtr
h = FindWindow(vbNullString, "c:\windows\system32\cmd.exe")

SetParent(h, Me.Panel1.Handle) '嵌套到panel1内

'SetParent(h, Me.Handle) '或者直接嵌套到窗体内
End Sub

16,552

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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