weno lo que quisiera saber es que
cual es el codigo para que appactivate No simplemente se active en
dicha ventana
sino que se active en cual quier ventana de windows
Ejemplo:
AppActivate "Bloc de notas"
Que se active No solo en el bloc de notas
sino en cualquier ventana de windows
Espero Sus respuestas =)
Usa FindWindows o FindWindowsEX (Algo asi se encribia jojo) despues pasale SetForegroundWindow
Correcion:
FindWindow o FindWindowEx (Para obtener el Handle)
SetForegroundWindow (Para traerla al frente)
P.D.: revisa la Api-Guide para saber como usarlas si no sabes...¡!
Dulces Lunas.¡!
GetActiveWindow()
Sumado a lo que te indican:
SetForegroundWindow 'pone la ventana en el primer plano y se activa
GetForegroundWindow() 'Devuelve el manejador de la ventana activa
GetWindowText 'Obtiene el título
GetWindowRect 'Obtiene dimenciones
IsIconic 'IsIconic retorna 0 si la ventana No está minimizada
S2
el codigo que tengo es este
Private Sub Command1_Click()
If Option1 = True Then
AppActivate "Bloc de Notas"
SendKeys "%(a)+(l)", True
End If
End Sub
Entonces en vez de Bloc de Notas
POngo que Codigo que me dijieron?
Option Explicit
Private Declare Function SetForegroundWindow Lib "USER32" (ByVal hwnd As Long) As Long
Private Declare Function FindWindow Lib "USER32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Sub Command1_Click()
If Option1 = True Then Call SetForegroundWindow(FindWindow("notepad", vbNullString))
End Sub
S2
Cita de: Dessa en 15 Junio 2009, 12:26 PM
IsIconic 'IsIconic retorna 0 si la ventana No está minimizada
Aprovechando el tema .. ahora que lo estoy leyendo me gustaria ponerle esa opcion de cuando este minimizado y se quiera abrir otra vez el mismo exe, se maximize el que esta abierto, algo asi como el messenger.
pensaba hacerlo con FindWindow y lo demas, pero vi un ejemplo que no usa tanto de apis, usando el nombre del exe, pero si este cambia no sirve, y para ello pienso usar la funcion CreateMutex en lugar de un simple App.PrevInstance, a lo que iva eso de IsIconic me serviria para detectar si esta minimizado la ventana, o si hay alguna otra manera de hacer lo mismo, por cierto aun no reviso sobre el tema este .. recien lo vi aqui y me acorde ;D ;D ;D .
Saludos.
Edit: ya encontre .. y si esa es para lo que quiero me tomo solo unos segundos con san Google.
No entendí bien la pregunta pero si es para una aplicacion tuya podes usar la propiedad WindowState del formulario, y si es para una externa podes usar IsIconic
Option Explicit
Private Declare Function IsIconic Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Const SW_SHOWNORMAL = 1
Private Sub Command1_Click()
If FindWindow("notepad", vbNullString) = 0 Then
MsgBox "Notepad cerrado"
Shell "notepad", vbNormalFocus
Else
If IsIconic(FindWindow("notepad", vbNullString)) = 0 Then
MsgBox "Notepad no esta minimizado"
'Call SetForegroundWindow(FindWindow("notepad", vbNullString))
Else
MsgBox "Notepad minimizado"
'Call ShowWindow(FindWindow("notepad", vbNullString), SW_SHOWNORMAL)
'Call SetForegroundWindow(FindWindow("notepad", vbNullString))
End If
End If
End Sub
S2
Cita de: Dessa en 15 Junio 2009, 18:45 PM
No entendí bien la pregunta pero si es para una aplicacion tuya podes usar la propiedad WindowState del formulario, y si es para una externa podes usar IsIconic
es la misma aplicacion pero para una nueva instancia, pero para que no se ejecute y en lugar de eso maximize la actual... algo asi como para que no se ejecute el mismo exe varias veces .. se suele usar el App.PrevInstance o algo mejor la funcion API CreateMutex por si le cambian el nombre al exe.
Cita de: byway en 16 Junio 2009, 03:40 AM
es la misma aplicacion pero para una nueva instancia, pero para que no se ejecute y en lugar de eso maximize la actual... algo asi como para que no se ejecute el mismo exe varias veces .. se suele usar el App.PrevInstance o algo mejor la funcion API CreateMutex por si le cambian el nombre al exe.
Ahora si, si buscas en el foro creo que hay un code alternativo de Karcrack.
S2
EDIT:
http://foro.elhacker.net/programacion_vb/srcmaltmutexbas_alternativa_a_createmutex-t243771.0.html;msg1171506;topicseen (http://foro.elhacker.net/programacion_vb/srcmaltmutexbas_alternativa_a_createmutex-t243771.0.html;msg1171506;topicseen)
S2
Cita de: Dessa en 16 Junio 2009, 11:50 AM
Ahora si, si buscas en el foro creo que hay un code alternativo de Karcrack.
si ya estoy usando el CreateMutex, también vi el modulo de Karcrack, pero lo que deseaba adicionarle es que cuando ya este en ejecución (la primera instancia) y cuando vuelves a ejecutar para la segunda instancia este vea si la primera instancia esta minimizada para asi maximizarlo y ponerlo en frente obteniendo el foco, y luego se cierre para evitar 2 instancias del mismo exe.
Private Declare Function IsIconic Lib "user32" (ByVal hwnd As Long) As Long
Dim x As String
Private Sub Timer1_Timer()
If IsIconic(Me.hwnd) = 0 Then
If x = "" Then MsgBox "maximizado"
x = "x"
Else
If x = "x" Then MsgBox "minimizado"
x = ""
End If
End Sub