Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Visual Basic 2005. Salvar archivos desde Visual Basic.

Estas en el tema de Visual Basic 2005. Salvar archivos desde Visual Basic. en el foro de Visual Basic clásico en Foros del Web. Bueno, el hWnd no puede ser un número tan largo, así que el error al parecer está primeramente en la llamada a GetWindow. Prueba con: ...

  #61 (permalink)  
Antiguo 26/08/2008, 09:30
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Exclamación Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic.

Bueno, el hWnd no puede ser un número tan largo, así que el error al parecer está primeramente en la llamada a GetWindow. Prueba con:
Código PHP:
handle GetWindow(Me.hWndGW_HWNDFIRST
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #62 (permalink)  
Antiguo 26/08/2008, 10:23
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic.

Mmmmm no se por que me pasa esto...



Los dejo declarado todos como Integer? o los sigo dejando como long?
  #63 (permalink)  
Antiguo 26/08/2008, 10:26
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
De acuerdo Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic.

Bueno, se me olvidó cómo obtener el hWnd en Visual Basic .NET .

Deben ser Long las variables. Prueba pasándole a GetWindow como parámetro GetDesktopWindow.
http://msdn.microsoft.com/en-us/libr...04(VS.85).aspx
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #64 (permalink)  
Antiguo 26/08/2008, 10:59
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic.

Mira hice algo asi:

Código:
Private Sub Listar()
        Dim buf As Long, handle As Long, titulo As String, lenT As Long, ret As Long
        List1.Items.Clear()
        handle = GetWindow(GetDesktopWindow, GW_HWNDFIRST)
Le agregue el GetDesktopWindow como parametro, ahora el handle me da como resultado 8975933078237085696, al seguir el codigo igual me cuelga el programa en lenT = GetWindowTextLength(handle) lo que pense era capturar la cantidad de caracteres asi:

Dim A as Integer

A = Len(GetWindowTextLength(handle))

Pero igual me sigue colgando el programa... como me ha costado pero se que lo conseguiré. Si se algo aca lo postearé, gracias.
  #65 (permalink)  
Antiguo 26/08/2008, 11:08
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
De acuerdo Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic.

Encontré un ejemplo de listado de ventanas para VB.NET.
http://www.elguille.info/NET/vb6anet...numWindows.htm
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #66 (permalink)  
Antiguo 26/08/2008, 11:41
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic.

David, muchas gracias por el link y la paciencia. Pude correr el código que me diste y efectivamente funciona:



Como puedes ver ya tengo el Treat3 mas sus demas caracteres, ahora supongo que debo hacer una consulta que a la hora de que el programa ingrese cada dato al listview, pregunte si es Treat y tome la cadena verdad? intentare eso a ver si me sirve, y si sabes algo mejor me puedes comentar? gracias.
  #67 (permalink)  
Antiguo 26/08/2008, 11:50
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
De acuerdo Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic.

Exacto, en realidad no necesitas ni del Listview, lo único que necesitas es ir comparando los títulos de las ventanas hasta encontrar una que empiece con Treat3 y obtener su hWnd.

Con ese hWnd ya podremos saber si esa es la ventana activa y si no lo es hacer que esa sea la ventana activa.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #68 (permalink)  
Antiguo 26/08/2008, 11:55
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic.

David, estaba probando y el hWnd cambia cada vez que abro el programa Treat3, igual como cuando miraba el nombre de la clase que cambiaba cada vez que abria la aplicacion. En sintesis debo tomar el nombre cuando empieze por treat, pienso que si la agrego a una variable string la puedo agregar aqui:

ret = FindWindow(Nothing, variable)

Voy a probar, lo unico que no te entendi es como hacer para que la ventana sea activa si no lo esta.
  #69 (permalink)  
Antiguo 26/08/2008, 11:59
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic.

El hWnd claro que siempre va a cambiar, cambia cada vez que se abre la ventana, pero lo que hacemos es recorrer todo el listado de ventanas y obtener su hWnd.

Ese hWnd es el que vamos a pasarle como parámetro a SetActiveWindow() o SetForegroundWindow() para que esa ventana sea la que esté activa .
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #70 (permalink)  
Antiguo 26/08/2008, 13:23
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic.

el SetForegroundWindow o el SetActiveWindow hace que esa ventana siempre este activa? que tal si necesito minimizar?
  #71 (permalink)  
Antiguo 26/08/2008, 13:34
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
De acuerdo Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic.

No, lo único que hace SetForegroundWindow es hacer que la ventana aparezca en primer plano cuando se ejecuta, no impide que se minice.

En tu caso lo usaremos cada vez que necesitamos guardar el archivo, haremos que la ventana del programa esté en primer plano y enviaremos las pulsaciones de teclas.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #72 (permalink)  
Antiguo 26/08/2008, 14:09
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic.

Mira David hice una prueba: Con el programa del codigo que me pasaste tome un hWnd de una ventana que tengo abierta, y la puse en la funcion del SetActiveWindow.

Yo lo declare asi:

Public Class Form1
Declare Function SetActiveWindow Lib "user32.dll" (ByVal hwnd As Long) As Long


Private Sub Command1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Command1.Click
SetActiveWindow(11798932)
End Sub
End Class

Cuando le doy al boton no pasa nada, dime si ando bien perdido o si tengo que usar algun otro tipo de dato. Gracias.
  #73 (permalink)  
Antiguo 26/08/2008, 14:13
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Exclamación Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic.

Usa SetForegroundWindow(), y otra cosa, el hWnd cambia cada vez que abres la ventana, así que lo mejor es obtenerla en tiempo de ejecución.

De paso, también usa ShowWIndow por si la ventana está minimizada.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #74 (permalink)  
Antiguo 26/08/2008, 14:29
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic.

Si, con SetForegroundWindow() me sirve de maravilla, necesito que la ventana se vea para hacer lo de las teclas, ya lo probe y si funciona. Pero vieras David como me esta costando ver de que manera obtengo el hWnd sin necesidad del listview. Se que con solo obtenerlo por medio de una variable, consigo todo!
  #75 (permalink)  
Antiguo 26/08/2008, 14:37
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
De acuerdo Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic.

Bueno, modifica el código así:
Código PHP:
       Private Sub EnumerarVentanas()
        
' Enumera las ventanas principales (TopWindows) '
        
colWin.Clear()
        
EnumWindows(AddressOf EnumWindowsProc0)
        
        For 
Each s As String In colWin.Keys
          
If Microsoft.VisualBasic.Left(colWin(s), 6) = "Treat3" Then
               
' Aquí ya tenemos el hWnd en la variable s '
          
End If
        
Next
    End Sub 
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #76 (permalink)  
Antiguo 26/08/2008, 14:56
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic.

Gracias David, ahora el resultado es mucho mas efectivo.
En el If que me mostrastre, le agregue el "Contains" para tener mas efectividad de que la palabra contenga esa cadena:

If Microsoft.VisualBasic.Left(colWin(s), 6).Contains("Treat") Then
TextBox1.Text = s
End If

Lo malo es que como que se queda guardado el hWnd, puesto que cerre el Treat y al abrirlo me deberia generar un nuevo numero pero no lo hace, inclusive cerrando me mostraba el mismo numero, hasta que le cambie el nombre de Treat por otro ahi para probar entonces si me cambio de numero, sera algo que tenia el codigo anterior?
  #77 (permalink)  
Antiguo 26/08/2008, 15:01
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Exclamación Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic.

Qué raro, porque cada vez que llamamos a EnumerarVentanas() debería obtener el hWnd actual.

Ah, lo del Contains podrías hacerlo directamente en la variable así:
Código PHP:
If colWin(s).Contains("Treat3"Then 
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #78 (permalink)  
Antiguo 26/08/2008, 15:27
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic.

ahora si me corre bien, volví a escribir todo el código y si me funciona, gracias por todo el tiempo, si tengo alguna duda la pondré acá. Cuando termine el código lo publicaré como ejemplo.

Última edición por moradazo; 26/08/2008 a las 21:49
  #79 (permalink)  
Antiguo 27/08/2008, 07:55
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic.

El programa corre bien, ya salva sobre cualquier ventana Treat, ya el objetivo esta a un 95% gracias a David y al foro.

Ahora me gustaria saber como hago para que cuando la ventana este minimizada, restaurada, o en cualquier otro estado, salve y que conserve su estado. Ejemplo, si esta maximizada, salvara maximizado, si esta restaurado salvara restaurado, si esta minimizado, salvara en su estado minimizado, si esta inactivo (detras de otra ventana) salvara inactivo. Buscare e investigare, si saben les agradezco su colaboracion.

Gracias.

Última edición por moradazo; 27/08/2008 a las 09:02
  #80 (permalink)  
Antiguo 27/08/2008, 09:05
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Exclamación Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic.

Bueno, en ese caso no tenemos otra opción que usar SendMessage para simular el guardado, con keybd_event no podrás hacerlo a menos que la ventana esté activa.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #81 (permalink)  
Antiguo 27/08/2008, 10:42
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 10 meses
Puntos: 2
De acuerdo Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic.

Ok David, averiguando en internet, vi la declaración de SendMessage:

Declare Function SendMessage Lib "User32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Tengo entendido que:

ByVal hwnd as long: Le doy el Handle de la ventana
ByVal wMsg As Long: Supongo que le doy la instruccion de teclas que necesito que haga
ByVal wParam As Long, y ByVal lParam As Long: No tengo bien entendido que puedo enviar como parametros.

Estos son los mensajes que me da esta api:

WM_CLOSE
WM_COMMAND
WM_HELP
WM_INITMENU
WM_LBUTTONDBLCLK
WM_LBUTTONDOWN
WM_LBUTTONUP
WM_MBUTTONDBLCLK
WM_MBUTTONDOWN
WM_MBUTTONUP
WM_MOUSEMOVE
WM_RBUTTONDBLCLK
WM_RBUTTONDOWN
WM_RBUTTONUP
WM_SYSCOMMAND
WM_TIMER

Como los uso? como los declaro?
Si me pueden ayudar seria de gran ayuda.
Gracias.

Última edición por moradazo; 27/08/2008 a las 14:02
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:16.