2015-04-23 3 views
0

Я создал графический интерфейс в Visual Basic 2010, который запускает другую программу, за исключением того, что другая программа скрыта за окном GUI при ее запуске. Я уже получаю идентификатор процесса этой другой программы, чтобы позже ее убить, но я не уверен, как превратить идентификатор в то, что я могу использовать, чтобы вывести окно вперед.Показать окно другой программы

Другое решение - переместить мой графический интерфейс обратно, но это тоже не сработает. Я думаю, что это из-за другой программы. Перед запуском главного окна появляется заставка, требующая взаимодействия. Моя программа не отправляется обратно до тех пор, пока экран заставки не будет закрыт, что приведет к победе над целью.

ответ

2

Вы изучали AppActivate. Предполагается, что он фокусируется на приложении, которое вы хотите, пока оно работает.

1

Есть несколько способов, которыми вы могли бы это сделать. Вы можете использовать AppActivate, как Тимми предложил или вы можете использовать PInvoke с функцией SetForegroundWindow:

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 
+0

Спасибо за отличную альтернативу. – Stradigos

Смежные вопросы