vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Verschiedenes / Sonstiges   |   VB-Versionen: VB.NET16.05.08
Fremdanwendung starten und im Vordergrund anzeigen

Dieses Beispiel startet eine Fremdanwendung und zeigt diese dauerhaft im Vordergrund an.

Autor:   Heinz PrelleBewertung:  Views:  16.300 
www.visual-basic5.deSystem:  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



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.