Vb.net 显示另一个程序的窗口
我在VisualBasic2010中创建了一个GUI,它可以启动另一个程序,但另一个程序在启动时隐藏在GUI窗口后面。我已经在检索另一个程序的进程ID,以便稍后杀死它,但我不确定如何将该ID转换为可用于向前打开窗口的内容Vb.net 显示另一个程序的窗口,vb.net,winforms,user-interface,Vb.net,Winforms,User Interface,我在VisualBasic2010中创建了一个GUI,它可以启动另一个程序,但另一个程序在启动时隐藏在GUI窗口后面。我已经在检索另一个程序的进程ID,以便稍后杀死它,但我不确定如何将该ID转换为可用于向前打开窗口的内容 另一个解决方案是将GUI移到后面,但这也不起作用。我想那是因为另一个节目。在主窗口启动之前会出现一个启动屏幕,需要进行交互。我的程序只有在启动屏幕关闭后才会被发送回,这违背了我的目的。你有没有调查过。只要应用程序在运行,它就应该将焦点设置为所需的应用程序 你调查过了吗。只要应用
另一个解决方案是将GUI移到后面,但这也不起作用。我想那是因为另一个节目。在主窗口启动之前会出现一个启动屏幕,需要进行交互。我的程序只有在启动屏幕关闭后才会被发送回,这违背了我的目的。你有没有调查过。只要应用程序在运行,它就应该将焦点设置为所需的应用程序 你调查过了吗。只要应用程序在运行,它就应该将焦点设置为所需的应用程序 你调查过了吗。只要应用程序在运行,它就应该将焦点设置为所需的应用程序 你调查过了吗。只要应用程序在运行,它就应该将焦点设置为所需的应用程序 有几种方法可以做到这一点。您可以按照Timmy的建议使用
AppActivate
,也可以使用带有SetForeGroundIndow
功能的pinvoke:
Imports System.Runtime.InteropServices
Public Class Form1
Dim oProcess As New Process()
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' Add buttons to the form
Dim cmd As New Button
cmd.Name = "cmdAppActivate"
cmd.Text = "App Activate"
cmd.Location = New Point(0, 0)
cmd.Size = New Size(90, 25)
AddHandler cmd.Click, AddressOf cmdAppActivate_Click
Me.Controls.Add(cmd)
cmd = New Button
cmd.Name = "cmdSetForegroundWindow"
cmd.Text = "Set Foreground Window"
cmd.Location = New Point(0, 30)
cmd.Size = New Size(130, 25)
AddHandler cmd.Click, AddressOf cmdSetForegroundWindow_Click
Me.Controls.Add(cmd)
' Open notepad
oProcess.StartInfo = New ProcessStartInfo("notepad.exe")
oProcess.Start()
End Sub
Private Sub cmdAppActivate_Click(sender As Object, e As EventArgs)
AppActivate(oProcess.Id) ' use appactivate to bring the notepad window to the front
End Sub
Private Sub cmdSetForegroundWindow_Click(sender As Object, e As EventArgs)
SetForegroundWindow(oProcess.MainWindowHandle) ' Use pinvoke (SetForegroundWindow) to bring the notepad window to the front
End Sub
End Class
Module Module1
<DllImport("user32.dll")> _
Public Function SetForegroundWindow(ByVal hWnd As IntPtr) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function
End Module
导入System.Runtime.InteropServices
公开课表格1
Dim oProcess作为新流程()
私有子表单1_Load(发送方作为对象,e作为事件参数)处理MyBase.Load
'将按钮添加到窗体
Dim cmd作为新按钮
cmd.Name=“cmdAppActivate”
cmd.Text=“应用程序激活”
cmd.Location=新点(0,0)
cmd.Size=新尺寸(90,25)
AddHandler cmd.Click,cmdAppActivate\u单击
Me.Controls.Add(cmd)
cmd=新按钮
cmd.Name=“cmdsetforegroundindow”
cmd.Text=“设置前景窗口”
cmd.Location=新点(0,30)
cmd.Size=新尺寸(130,25)
AddHandler cmd.Click,cmdSetForegroundWindow的地址单击
Me.Controls.Add(cmd)
'打开记事本
oProcess.StartInfo=新流程StartInfo(“notepad.exe”)
oProcess.Start()
端接头
私有子cmdAppActivate_单击(发件人作为对象,e作为事件参数)
AppActivate(oProcess.Id)'使用AppActivate将记事本窗口置于前面
端接头
私有子cmdSetForegroundWindow\u单击(发送者作为对象,e作为事件参数)
SetForeGroundIndow(oProcess.MainWindowHandle)'使用pinvoke(SetForeGroundIndow)将记事本窗口带到前面
端接头
末级
模块1
_
公共函数SetForegroundWindow(ByVal hWnd作为IntPtr)作为布尔值
端函数
端模块
有几种方法可以做到这一点。您可以按照Timmy的建议使用AppActivate
,也可以使用带有SetForeGroundIndow
功能的pinvoke:
Imports System.Runtime.InteropServices
Public Class Form1
Dim oProcess As New Process()
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' Add buttons to the form
Dim cmd As New Button
cmd.Name = "cmdAppActivate"
cmd.Text = "App Activate"
cmd.Location = New Point(0, 0)
cmd.Size = New Size(90, 25)
AddHandler cmd.Click, AddressOf cmdAppActivate_Click
Me.Controls.Add(cmd)
cmd = New Button
cmd.Name = "cmdSetForegroundWindow"
cmd.Text = "Set Foreground Window"
cmd.Location = New Point(0, 30)
cmd.Size = New Size(130, 25)
AddHandler cmd.Click, AddressOf cmdSetForegroundWindow_Click
Me.Controls.Add(cmd)
' Open notepad
oProcess.StartInfo = New ProcessStartInfo("notepad.exe")
oProcess.Start()
End Sub
Private Sub cmdAppActivate_Click(sender As Object, e As EventArgs)
AppActivate(oProcess.Id) ' use appactivate to bring the notepad window to the front
End Sub
Private Sub cmdSetForegroundWindow_Click(sender As Object, e As EventArgs)
SetForegroundWindow(oProcess.MainWindowHandle) ' Use pinvoke (SetForegroundWindow) to bring the notepad window to the front
End Sub
End Class
Module Module1
<DllImport("user32.dll")> _
Public Function SetForegroundWindow(ByVal hWnd As IntPtr) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function
End Module
导入System.Runtime.InteropServices
公开课表格1
Dim oProcess作为新流程()
私有子表单1_Load(发送方作为对象,e作为事件参数)处理MyBase.Load
'将按钮添加到窗体
Dim cmd作为新按钮
cmd.Name=“cmdAppActivate”
cmd.Text=“应用程序激活”
cmd.Location=新点(0,0)
cmd.Size=新尺寸(90,25)
AddHandler cmd.Click,cmdAppActivate\u单击
Me.Controls.Add(cmd)
cmd=新按钮
cmd.Name=“cmdsetforegroundindow”
cmd.Text=“设置前景窗口”
cmd.Location=新点(0,30)
cmd.Size=新尺寸(130,25)
AddHandler cmd.Click,cmdSetForegroundWindow的地址单击
Me.Controls.Add(cmd)
'打开记事本
oProcess.StartInfo=新流程StartInfo(“notepad.exe”)
oProcess.Start()
端接头
私有子cmdAppActivate_单击(发件人作为对象,e作为事件参数)
AppActivate(oProcess.Id)'使用AppActivate将记事本窗口置于前面
端接头
私有子cmdSetForegroundWindow\u单击(发送者作为对象,e作为事件参数)
SetForeGroundIndow(oProcess.MainWindowHandle)'使用pinvoke(SetForeGroundIndow)将记事本窗口带到前面
端接头
末级
模块1
_
公共函数SetForegroundWindow(ByVal hWnd作为IntPtr)作为布尔值
端函数
端模块
有几种方法可以做到这一点。您可以按照Timmy的建议使用AppActivate
,也可以使用带有SetForeGroundIndow
功能的pinvoke:
Imports System.Runtime.InteropServices
Public Class Form1
Dim oProcess As New Process()
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' Add buttons to the form
Dim cmd As New Button
cmd.Name = "cmdAppActivate"
cmd.Text = "App Activate"
cmd.Location = New Point(0, 0)
cmd.Size = New Size(90, 25)
AddHandler cmd.Click, AddressOf cmdAppActivate_Click
Me.Controls.Add(cmd)
cmd = New Button
cmd.Name = "cmdSetForegroundWindow"
cmd.Text = "Set Foreground Window"
cmd.Location = New Point(0, 30)
cmd.Size = New Size(130, 25)
AddHandler cmd.Click, AddressOf cmdSetForegroundWindow_Click
Me.Controls.Add(cmd)
' Open notepad
oProcess.StartInfo = New ProcessStartInfo("notepad.exe")
oProcess.Start()
End Sub
Private Sub cmdAppActivate_Click(sender As Object, e As EventArgs)
AppActivate(oProcess.Id) ' use appactivate to bring the notepad window to the front
End Sub
Private Sub cmdSetForegroundWindow_Click(sender As Object, e As EventArgs)
SetForegroundWindow(oProcess.MainWindowHandle) ' Use pinvoke (SetForegroundWindow) to bring the notepad window to the front
End Sub
End Class
Module Module1
<DllImport("user32.dll")> _
Public Function SetForegroundWindow(ByVal hWnd As IntPtr) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function
End Module
导入System.Runtime.InteropServices
公开课表格1
Dim oProcess作为新流程()
私有子表单1_Load(发送方作为对象,e作为事件参数)处理MyBase.Load
'将按钮添加到窗体
Dim cmd作为新按钮
cmd.Name=“cmdAppActivate”
cmd.Text=“应用程序激活”
cmd.Location=新点(0,0)
cmd.Size=新尺寸(90,25)
AddHandler cmd.Click,cmdAppActivate\u单击
Me.Controls.Add(cmd)
cmd=新按钮
cmd.Name=“cmdsetforegroundindow”
cmd.Text=“设置前景窗口”
cmd.Location=新点(0,30)
cmd.Size=新尺寸(130,25)
AddHandler cmd.Click,cmdSetForegroundWindow的地址单击
Me.Controls.Add(cmd)
'打开记事本
oProcess.StartInfo=新流程StartInfo(“notepad.exe”)
oProcess.Start()
端接头
私有子cmdAppActivate_单击(发件人作为对象,e作为事件参数)
AppActivate(oProcess.Id)'使用AppActivate将记事本窗口置于前面
端接头
私有子cmdSetForegroundWindow\u单击(发送者作为对象,e作为事件参数)
SetForeGroundIndow(oProcess.MainWindowHandle)'使用pinvoke(SetForeGroundIndow)将记事本窗口带到前面
端接头
末级
模块1
_
公共函数SetForegroundWindow(ByVal hWnd作为IntPtr)作为布尔值
端函数
端模块