Hallo,
ich brauche Hilfe bei einem Programm, an dem ich gerade arbeite. Es geht darum, einen Doppelstart des Programms zu verhindern. Sollte das Programm zum zweiten mal gestartet werden, soll das zuerst gestartete Programm in den Vordergrund geholt werden. Bis dahin funktioniert auch alles einwandfrei. Das Problem ist nur, wenn das Fenster minimiert ist, wird dieses nich wiederhergestellt und auch nicht in den Vordergrund geholt. Nach lagem suchen habe ich festgestellt, dass es zwei Handles beim Start des Programms gibt. Wenn das Fenster nicht minimiert ist, wird das richtige Handle gefunden und somit kann das Fenster wieder aktiviert werden. Ist das Fenster jedoch minimiert, wird das andere Handle zuerst gefunden und das Programm versucht dann natürlich das flasche Handle zu aktivieren. Naja ich hoffe mal dass ich es nicht zu kompliziert erklärt habe. Hier nochmal ein Teil des Quellcodes für das Verständniss:
ich brauche Hilfe bei einem Programm, an dem ich gerade arbeite. Es geht darum, einen Doppelstart des Programms zu verhindern. Sollte das Programm zum zweiten mal gestartet werden, soll das zuerst gestartete Programm in den Vordergrund geholt werden. Bis dahin funktioniert auch alles einwandfrei. Das Problem ist nur, wenn das Fenster minimiert ist, wird dieses nich wiederhergestellt und auch nicht in den Vordergrund geholt. Nach lagem suchen habe ich festgestellt, dass es zwei Handles beim Start des Programms gibt. Wenn das Fenster nicht minimiert ist, wird das richtige Handle gefunden und somit kann das Fenster wieder aktiviert werden. Ist das Fenster jedoch minimiert, wird das andere Handle zuerst gefunden und das Programm versucht dann natürlich das flasche Handle zu aktivieren. Naja ich hoffe mal dass ich es nicht zu kompliziert erklärt habe. Hier nochmal ein Teil des Quellcodes für das Verständniss:
Visual Basic-Quellcode
- Private Const SW_MAXIMIZE As Long = 3&
- Private Const SW_MINIMIZE As Long = 6&
- Private Const SW_RESTORE As Long = 9&
- Private Const SW_NORMAL = 1
- Private Declare Function ShowWindow Lib "user32" (ByVal _
- hWnd As Long, ByVal nCmdShow As Long) As Long
- Private Declare Function FindWindow Lib "user32" Alias _
- "FindWindowA" (ByVal lpClassName As String, ByVal _
- lpWindowName As String) As Long
- Public Declare Function SetForegroundWindow Lib "User32.Dll" (ByVal hWnd As Long) As Long
- Private Sub Form_Load()
- Dim MemTitle As String
- Dim hWnd As Long
- If App.PrevInstance Then
- MemTitle = App.Title
- App.Title = "%&irgendwas"
- Unload frm_IHT
- 'Sucht Applikation und stellt sie wieder her
- hWnd = FindWindow(vbNullString, MemTitle)
- ShowWindow hWnd, SW_NORMAL
- SetForegroundWindow hWnd
- Exit Sub
- End If
- End Sub
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Akay“ ()