Vb.net 显示另一个程序的窗口

Vb.net 显示另一个程序的窗口,vb.net,winforms,user-interface,Vb.net,Winforms,User Interface,我在VisualBasic2010中创建了一个GUI,它可以启动另一个程序,但另一个程序在启动时隐藏在GUI窗口后面。我已经在检索另一个程序的进程ID,以便稍后杀死它,但我不确定如何将该ID转换为可用于向前打开窗口的内容 另一个解决方案是将GUI移到后面,但这也不起作用。我想那是因为另一个节目。在主窗口启动之前会出现一个启动屏幕,需要进行交互。我的程序只有在启动屏幕关闭后才会被发送回,这违背了我的目的。你有没有调查过。只要应用程序在运行,它就应该将焦点设置为所需的应用程序 你调查过了吗。只要应用

我在VisualBasic2010中创建了一个GUI,它可以启动另一个程序,但另一个程序在启动时隐藏在GUI窗口后面。我已经在检索另一个程序的进程ID,以便稍后杀死它,但我不确定如何将该ID转换为可用于向前打开窗口的内容


另一个解决方案是将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)作为布尔值
端函数
端模块