Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: agus0 en 16 Enero 2010, 18:56 pm



Título: [Solucionado] Como Hacer para llamar a un form desde otra instancia del programa
Publicado por: agus0 en 16 Enero 2010, 18:56 pm
Buenas foro, estaba haciendo un soft y me tope con la siguiente duda:

Si yo hago que mi soft se minimize en la bandeja de Tray (Junto al reloj), y el usuario, vuelve a ejecutar el programa desde el "Programa.exe", Como hago para que se habra el "FormMain" por ejemplo pero de la instancia que esta minimizada, es decir:

Citar
Private Sub Form_Load()
If App.PrevInstance = True Then
'abrir el FrmMain que esta minimizado
End If
End Sub
* mi duda seria que pongo en lugar de "'abrir el FrmMain que esta minimizado"

Gracias


Título: Re: Como Hacer para llamar a un form desde otra instancia del programa.
Publicado por: seba123neo en 16 Enero 2010, 19:34 pm
Hola, este es un ejemplo de como hacer que te parpadee la ventana si a tenes ya abierta.

Código
  1. Option Explicit
  2.  
  3. Private Declare Function CreateMutex Lib "kernel32" Alias "CreateMutexA" (lpMutexAttributes As Any, ByVal bInitialOwner As Long, ByVal lpName As String) As Long
  4. Private Declare Function ReleaseMutex Lib "kernel32" (ByVal hMutex As Long) As Long
  5. Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
  6. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  7. Private Declare Function FlashWindow Lib "user32" (ByVal hwnd As Long, ByVal bInvert As Long) As Long
  8. Const ERROR_ALREADY_EXISTS = 183&
  9.  
  10. Private Sub Form_Initialize()
  11.    Dim hMutex As Long
  12.    Dim vRet As Long
  13.  
  14.    hMutex = CreateMutex(ByVal 0&, 1, App.Title)
  15.  
  16.    If (Err.LastDllError = ERROR_ALREADY_EXISTS) Then
  17.  
  18.        ReleaseMutex hMutex
  19.        CloseHandle hMutex
  20.  
  21.        vRet = FindWindow("ThunderRT6FormDC", "Form1")
  22.  
  23.        FlashWindow vRet, 1
  24.  
  25.        End
  26.    End If
  27. End Sub

adaptalo al tuyo..

saludos.


Título: Re: Como Hacer para llamar a un form desde otra instancia del programa.
Publicado por: Hasseds en 16 Enero 2010, 19:35 pm
PrevInstance  no sirve si cambian de nonbre o ruta

Código:

Option Explicit

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long

Private Sub Form_Load()

Dim CaptionVerdadero As String: CaptionVerdadero = Me.Caption

If App.PrevInstance Then
  Me.Caption = "INSTANCIA 2"
  Call ShowWindow(FindWindow(vbNullString, CaptionVerdadero), 1)
  Call SetForegroundWindow(FindWindow(vbNullString, CaptionVerdadero))
  End
End If

End Sub




Fijate esto

http://foro.elhacker.net/empty-t261721.0.html (http://foro.elhacker.net/empty-t261721.0.html)




Título: Re: Como Hacer para llamar a un form desde otra instancia del programa.
Publicado por: agus0 en 16 Enero 2010, 22:05 pm
PrevInstance  no sirve si cambian de nonbre o ruta

Código:

Option Explicit

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long

Private Sub Form_Load()

Dim CaptionVerdadero As String: CaptionVerdadero = Me.Caption

If App.PrevInstance Then
  Me.Caption = "INSTANCIA 2"
  Call ShowWindow(FindWindow(vbNullString, CaptionVerdadero), 1)
  Call SetForegroundWindow(FindWindow(vbNullString, CaptionVerdadero))
  End
End If

End Sub




Fijate esto

http://foro.elhacker.net/empty-t261721.0.html (http://foro.elhacker.net/empty-t261721.0.html)




Gracias Hasseds tu Code funciono perfecto Gracias


Título: Re: [Solucionado] Como Hacer para llamar a un form desde otra instancia del programa
Publicado por: Hasseds en 16 Enero 2010, 22:53 pm
agus, tené en cuenta que PrevInstance no sirve en el caso de que alguien modifique el nombre  o la ruta del ejecutable, si bien esto se puede manejar con App.EXEName y App.Path lo correcto seria CreateMutex. como te indica Seba o que adaptes el code de byway.

Un saludo agus  ;)