elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  [Solucionado] Como Hacer para llamar a un form desde otra instancia del programa
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Solucionado] Como Hacer para llamar a un form desde otra instancia del programa  (Leído 5,340 veces)
agus0


Desconectado Desconectado

Mensajes: 360



Ver Perfil
[Solucionado] Como Hacer para llamar a un form desde otra instancia del programa
« 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


« Última modificación: 16 Enero 2010, 22:06 pm por agus0 » En línea

seba123neo
Moderador
***
Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: Como Hacer para llamar a un form desde otra instancia del programa.
« Respuesta #1 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.


En línea

Hasseds

Desconectado Desconectado

Mensajes: 145



Ver Perfil
Re: Como Hacer para llamar a un form desde otra instancia del programa.
« Respuesta #2 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


En línea

Sergio Desanti
agus0


Desconectado Desconectado

Mensajes: 360



Ver Perfil
Re: Como Hacer para llamar a un form desde otra instancia del programa.
« Respuesta #3 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




Gracias Hasseds tu Code funciono perfecto Gracias
En línea

Hasseds

Desconectado Desconectado

Mensajes: 145



Ver Perfil
Re: [Solucionado] Como Hacer para llamar a un form desde otra instancia del programa
« Respuesta #4 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  ;)
En línea

Sergio Desanti
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines