Autor
|
Tema: Foco de una ventana (Leído 4,335 veces)
|
Yekka
Desconectado
Mensajes: 62
|
Hola foro, ¿como se puede hacer para darle el foco a una ventana que no lo tenga?
|
|
|
En línea
|
|
|
|
HaDeS, -
WarZone Master
Desconectado
Mensajes: 284
|
Ventana.SetFocus
Si la ventana es de la misma aplicación, si es una aplicación externa puedes usar esta api: Private Declare Function SetFocus Lib "user32" Alias "SetFocus" (ByVal hwnd As Long) As Long
Saludos
|
|
|
En línea
|
|
|
|
Yekka
Desconectado
Mensajes: 62
|
Es posible un ejemplo, suponiendo que solo tengo el caption o el nombre de la ventana, "me refiero al focus de una aplicacion externa".
|
|
|
En línea
|
|
|
|
HaDeS, -
WarZone Master
Desconectado
Mensajes: 284
|
Weno, cambio de estrategia, utilize la api findwindow y showwindow para hacer el focus en la ventana 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 Private Sub Command1_Click() Focus "escritorio" End Sub Private Sub Focus(titulo$) Dim hwndventana& hwndventana = FindWindow(vbNullString, titulo) If hwndventana <> 0 Then ShowWindow hwndventana, 1 End If End Sub
Saludos
|
|
|
En línea
|
|
|
|
Yekka
Desconectado
Mensajes: 62
|
Gracias me funciono bien, estoy haciendo un proyecto que abra un .doc bajo contraseña, luego lo llamo con la rutina "Focus" en caso de que lo pierda y le envio la clave con SendKeys.
Otra pregunta, no se si me salgo del tema. ¿Como se puede hacer para que una ventana siempre este visble, a pesar de que pierda el focus? ej: como el administrador de tareas de windows, una vez activo, siempre estara visible, como los programas de administracion de redes que usan los ciber-cafe.
|
|
|
En línea
|
|
|
|
HaDeS, -
WarZone Master
Desconectado
Mensajes: 284
|
mm, lo que queres es hacer un tipo de bruteforce no?, mira este código que creo que funciona para word, lo probe con word 2000: Private Sub Command1_Click() On Error GoTo Error Dim Archivo$ Archivo = "c:\documento.doc" If Dir$(Archivo) = "" Then Exit Sub Dim Word As Object, Docu As Object Set Word = CreateObject("Word.Application") Set Docu = Word.Documents.Open(Archivo, , , , "1234") Word.Documents.Close Set Word = Nothing Set Docu = Nothing MsgBox "Password Correcto" Exit Sub Error: If Err.Description <> "" Then MsgBox "Password Incorrecto" End If End Sub
Crea un objeto de word, abre el documento e intenta meter la contraseña, si hay un error es porque la contraseña esta mala, si no hay error es porque la contraseña es buena. Y con respecto a que esté siempre visible podes probar esto: Private Declare Sub SetWindowPos Lib "User32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) Private Sub Form_Load() SetWindowPos Me.hWnd, -1, 0, 0, 0, 0, &H1 Or &H2 End Sub
Saludos
|
|
|
En línea
|
|
|
|
Yekka
Desconectado
Mensajes: 62
|
Bien, con respecto al codigo que abre word, lo probre en office 2003, abre word, envia la contraseña, y luego me da el mensaje que indica 'password correcto', pero no abre el documento, no se si me explico, no aparece lo que esta escrito en el mismo.
Con respecto al segundo code, funciona bien gracias, sobre todo por la velocidad de respuesta que das.
|
|
« Última modificación: 27 Octubre 2007, 17:30 pm por Y@ »
|
En línea
|
|
|
|
HaDeS, -
WarZone Master
Desconectado
Mensajes: 284
|
No tengo idea porque pasa eso, debe ser por la diferencia de versiones del word... voy a averiguar, y luego si tengo la respuesta te la posteo. Saludos
|
|
|
En línea
|
|
|
|
Yekka
Desconectado
Mensajes: 62
|
Hola HaDeS, utilizando tu ejemplo de abrir un .Doc pero aplicandolo para abrir un .Pps, me da un error. fijate en esto: Error '438' en tiempo de ejecucion: El objeto no admite esta propiedad o método Este es tu code adaptado: [code] Archivo = "c:\Diapositiva.pps" Dim Documento As Object, ObjPowerPoint As Object Set ObjPowerPoint = CreateObject("PowerPoint.Application") Set Documento = ObjPowerPoint.presentacion.Open(Archivo, , , , "1234")'--> Error ObjPowerPoint.presentacion.Close 'Cerrando el objeto Set ObjPowerPoint = Nothing Set Documento = Nothing
[/code] Osea, la idea en este caso, es abrir un .pps bajo contraseña, de momento yo estoy haciendo esto: Dim Res As Long Res = ShellExecute(Me.hwnd, "Open", App.Path & "\Multimedia\Diapositivas\Duaca.pps", "", "", 1)
NombreVentana = "Contraseña"
If FindWindow(vbNullString, ByVal NombreVentana) Then Focus NombreVentana 'Tu rutina Focus SendKeys "1234" SendKeys "{TAB}" SendKeys "{ENTER}" End If
De momento, el code funciona, lo ejecuto, busco haber si la ventana esta activa, le doy foco y le envio la contraseña. Todo bien, pero si se cliquea en otra ventana en pleno procedimiento, la contraseña no llega a su destino, me explico: se abre el documento pero queda en espera del password de apertura. Lo que necesito saber, es si como lo estoy haciendo esta bien y si sabes como puedo corregir ese problema o si por el contrario, crees que tu ejemplo de abrir office, es mas efectivo, en ese caso dime que puedo hacer para corregirr el error en tiempo de ejecucuion que me da tu ejemplo adptado a .pps. Un poco enrredado todo lo que dije, ¿verdad? . [code=vb]
[/code]
|
|
« Última modificación: 3 Marzo 2008, 17:07 pm por Y@ »
|
En línea
|
|
|
|
HaDeS, -
WarZone Master
Desconectado
Mensajes: 284
|
Buenas!!, jeje pues, no estuvo tan enredado, estuve buscando acerca del objeto de powerpoint y tenes dos errores en tú código Set Documento = ObjPowerPoint.presentacion.Open(Archivo, , , , "1234")'--> Error ObjPowerPoint.presentacion.Close 'Cerrando el objeto
sería: Set Documento = ObjPowerPoint.Presentations.Open(Archivo, , , , "1234")'--> Error ObjPowerPoint.Presentations.Close 'Cerrando el objeto
Pero, eso no arregla todo el problema, al parecer el método Open del objeto powerpoint no admite el campo pass, por lo que el código igualmente quedaría inútil. Como va esto, creo que es mejor que utilizes la forma de obtener el foco de la ventana y con la sendkeys mandar la clave y luego tab , enter. Si no te funciona bien agrega un DoEvents luego de que obtiene el foco de la ventana, asi se asegura que después de obtener el foco se envien las teclas. Si queres saber más sobre el tema de objetos office y visual, mira esta página: http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/office97/html/web/FULLTOC.aspSaludos
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
no perder foco en JFRAME
Programación General
|
XpandyX
|
0
|
2,890
|
22 Octubre 2011, 19:01 pm
por XpandyX
|
|
|
Como puedo saver si un nombre de proceso o un handled es el foco,ventana activa
.NET (C#, VB.NET, ASP)
|
70N1
|
2
|
3,649
|
14 Marzo 2012, 12:37 pm
por rosado78
|
|
|
[Solucionado] no perder el Foco??
Java
|
Nakatsukasa Itero
|
4
|
11,433
|
12 Mayo 2012, 01:03 am
por Nakatsukasa Itero
|
|
|
Una IA resuelve los captcha de texto de las webs y pone el foco en la ...
Noticias
|
wolfbcn
|
1
|
3,783
|
7 Diciembre 2018, 23:56 pm
por Serapis
|
|
|
G2A vuelve a ser el foco de la polémica: algunos desarrolladores piden a los ...
Noticias
|
wolfbcn
|
2
|
1,384
|
2 Julio 2019, 20:41 pm
por Serapis
|
|