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

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Foco de una ventana
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Foco de una ventana  (Leído 4,002 veces)
Yekka

Desconectado Desconectado

Mensajes: 62



Ver Perfil
Foco de una ventana
« en: 26 Octubre 2007, 21:42 pm »

 Hola foro, ¿como se puede hacer para darle el foco a una ventana que no lo tenga?


En línea

HaDeS, -
WarZone Master

Desconectado Desconectado

Mensajes: 284



Ver Perfil WWW
Re: Foco de una ventana
« Respuesta #1 en: 26 Octubre 2007, 22:05 pm »

Código
  1. Ventana.SetFocus
  2.  
Si la ventana es de la misma aplicación, si es una aplicación externa puedes usar esta api:
Código
  1. Private Declare Function SetFocus Lib "user32" Alias "SetFocus" (ByVal hwnd As Long) As Long
  2.  

Saludos ;)


En línea

Yekka

Desconectado Desconectado

Mensajes: 62



Ver Perfil
Re: Foco de una ventana
« Respuesta #2 en: 27 Octubre 2007, 03:59 am »

  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 Desconectado

Mensajes: 284



Ver Perfil WWW
Re: Foco de una ventana
« Respuesta #3 en: 27 Octubre 2007, 04:35 am »

Weno, cambio de estrategia, utilize la api findwindow y showwindow para hacer el focus en la ventana
Código
  1. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  2. Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
  3.  
  4. Private Sub Command1_Click()
  5.    Focus "escritorio"
  6. End Sub
  7.  
  8. Private Sub Focus(titulo$)
  9. Dim hwndventana&
  10. hwndventana = FindWindow(vbNullString, titulo)
  11. If hwndventana <> 0 Then
  12.    ShowWindow hwndventana, 1
  13. End If
  14. End Sub
  15.  

Saludos ;)
En línea

Yekka

Desconectado Desconectado

Mensajes: 62



Ver Perfil
Re: Foco de una ventana
« Respuesta #4 en: 27 Octubre 2007, 05:31 am »

   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 Desconectado

Mensajes: 284



Ver Perfil WWW
Re: Foco de una ventana
« Respuesta #5 en: 27 Octubre 2007, 07:07 am »

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:
Código
  1. Private Sub Command1_Click()
  2. On Error GoTo Error
  3. Dim Archivo$
  4. Archivo = "c:\documento.doc"
  5. If Dir$(Archivo) = "" Then Exit Sub
  6. Dim Word As Object, Docu As Object
  7. Set Word = CreateObject("Word.Application")
  8. Set Docu = Word.Documents.Open(Archivo, , , , "1234")
  9. Word.Documents.Close
  10. Set Word = Nothing
  11. Set Docu = Nothing
  12. MsgBox "Password Correcto"
  13. Exit Sub
  14. Error:
  15. If Err.Description <> "" Then
  16.    MsgBox "Password Incorrecto"
  17. End If
  18. End Sub
  19.  
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:
Código
  1. 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)
  2.  
  3. Private Sub Form_Load()
  4.    SetWindowPos Me.hWnd, -1, 0, 0, 0, 0, &H1 Or &H2
  5. End Sub
  6.  

Saludos ;)
En línea

Yekka

Desconectado Desconectado

Mensajes: 62



Ver Perfil
Re: Foco de una ventana
« Respuesta #6 en: 27 Octubre 2007, 17:27 pm »

 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 Desconectado

Mensajes: 284



Ver Perfil WWW
Re: Foco de una ventana
« Respuesta #7 en: 27 Octubre 2007, 21:51 pm »

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 Desconectado

Mensajes: 62



Ver Perfil
Re: Foco de una ventana
« Respuesta #8 en: 28 Octubre 2007, 17:54 pm »

   Hola HaDeS, utilizando tu ejemplo de abrir un .Doc pero aplicandolo para abrir un .Pps, me da un error. fijate en esto:

Citar
Error '438' en tiempo de ejecucion:
El objeto no admite esta propiedad o método

Este es tu code adaptado:
Código
  1. [code]
  2. Archivo = "c:\Diapositiva.pps"
  3.  
  4. Dim Documento As Object, ObjPowerPoint As Object
  5.  
  6. Set ObjPowerPoint = CreateObject("PowerPoint.Application")
  7.  
  8. Set Documento = ObjPowerPoint.presentacion.Open(Archivo, , , , "1234")'--> Error
  9.  
  10. ObjPowerPoint.presentacion.Close 'Cerrando el objeto
  11.  
  12. Set ObjPowerPoint = Nothing
  13. Set Documento = Nothing
[/code]

   Osea, la idea en este caso, es abrir un .pps bajo contraseña, de momento yo estoy haciendo esto:

Código:
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?  :-(.
Código
  1. [code=vb]
[/code]
« Última modificación: 3 Marzo 2008, 17:07 pm por Y@ » En línea

HaDeS, -
WarZone Master

Desconectado Desconectado

Mensajes: 284



Ver Perfil WWW
Re: Foco de una ventana
« Respuesta #9 en: 28 Octubre 2007, 22:37 pm »

Buenas!!, jeje pues, no estuvo tan enredado, estuve buscando acerca del objeto de powerpoint y tenes dos errores en tú código
Código
  1. Set Documento = ObjPowerPoint.presentacion.Open(Archivo, , , , "1234")'--> Error
  2.  
  3. ObjPowerPoint.presentacion.Close 'Cerrando el objeto
  4.  
sería:
Código
  1. Set Documento = ObjPowerPoint.Presentations.Open(Archivo, , , , "1234")'--> Error
  2.  
  3. ObjPowerPoint.Presentations.Close 'Cerrando el objeto
  4.  

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.asp


Saludos :)
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

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