Rubrik: Verschiedenes / Sonstiges | VB-Versionen: VB.NET | 16.05.08 |
Fremdanwendung starten und im Vordergrund anzeigen Dieses Beispiel startet eine Fremdanwendung und zeigt diese dauerhaft im Vordergrund an. | ||
Autor: Heinz Prelle | Bewertung: | Views: 16.300 |
www.visual-basic5.de | System: WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Mit nachfolgendem Beispiel lässt sich eine Fremdanwendung starten und dauerhaft im Vordergrund anzeigen. Nach dem Start der Anwendung wird das Handle ermittelt und zusammen mit den notwendigen Flags an die SetWindowsPos API-Funktion übergeben, um die Anwendung im Vordergrund anzuzeigen.
Erstellen Sie ein neues Windows-Forms Projekt, platzieren auf die Form eine ComboBox (ComboBox1), einen Button (Button1) und fügen nachfolgenden Code in den Codeteil der Form ein:
Public Class Form1
Public Class WinApi ''' <summary> ''' Flags zum Setzen der Fensterposition ''' </summary> Public Enum Flags As Int32 HWND_TOPMOST = -1 SWP_NOSIZE = &H1 SWP_NOMOVE = &H2 End Enum ''' <summary> ''' Benötigte API-Funktion ''' </summary> <System.Runtime.InteropServices.DllImport("user32.dll")> _ Public Shared Sub SetWindowPos( _ ByVal hwnd As IntPtr, _ ByVal hWndInsertAfter As IntPtr, _ ByVal x As Int32, _ ByVal y As Int32, _ ByVal cx As Int32, _ ByVal cy As Int32, _ ByVal wFlags As Int32) End Sub End Class
Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load ' Beispielanwendungen zum Test-Aufruf Dim s() As String = {"calc.exe", "notepad.exe", "excel.exe"} ' ComboBox mit Werten fuellen ComboBox1.Items.AddRange(s) ' Ersten Eintrag setzen ComboBox1.SelectedIndex = 0 End Sub
''' <summary> ''' Fremdanwendung starten, Handle ermitteln und zurückgeben ''' </summary> ''' <param name="ApplicationName">Zu startende Anwendung</param> Private Function StartApplication(ByVal ApplicationName As String) As IntPtr Try ' Prozessvariable deklarieren Dim hProcess As Process = New Process() With hProcess ' zu startende Datei übergeben .StartInfo.FileName = ApplicationName ' Fensterstil festlegen .StartInfo.WindowStyle = ProcessWindowStyle.Normal ' Prozess starten .Start() .WaitForInputIdle() ' Handle des Prozesses zurückgeben Return .MainWindowHandle() End With Catch ' Bei Fehler IntPtr.Zero zurückgeben Return IntPtr.Zero End Try End Function
Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click ' Fehlerüberwachung einschalten Try ' Ausgewählte Anwendung starten und Handle ermitteln Dim ApplicationHandle As IntPtr = StartApplication( _ ComboBox1.SelectedItem.ToString()) ' Konnte das Handle ermittelt werden... If Not ApplicationHandle.Equals(IntPtr.Zero) Then ' ... wird die Prozedur SetWindowPos aus der WinApi-Klasse ' zum setzen der Fensterposition aufgerufen WinApi.SetWindowPos(ApplicationHandle, _ New IntPtr(WinApi.Flags.HWND_TOPMOST), 0, 0, 0, 0, _ WinApi.Flags.SWP_NOSIZE Or WinApi.Flags.SWP_NOMOVE) Else ' ... andernfalls wird eine Meldung ausgegeben, dass das ' Handle nicht ermittelt werden konnte MessageBox.Show("Benötigtes Handle konnte nicht ermittelt werden.", "Info") End If Catch ex As Exception ' Fehler... Throw New Exception(ex.Message.ToString()) End Try End Sub
End Class