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. Hola, muy buenas para todos. Una consulta: Sera posible que desde un programa de visual basic, le indique a otro (que no es un programa ...

  #1 (permalink)  
Antiguo 19/08/2008, 14:04
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 9 meses
Puntos: 2
De acuerdo Visual Basic 2005. Salvar archivos desde Visual Basic.

Hola, muy buenas para todos.

Una consulta: Sera posible que desde un programa de visual basic, le indique a otro (que no es un programa de visual basic) que se pueda salvar cada cierto tiempo?

Ejemplo: Con un link ejecuto un programa asi:

System.Diagnostics.Process.Start("C:\Miprograma.ex e")

Pero con que codigo puedo hacer que Miprograma.exe en tiempo de ejecucion se pueda autosalvar.
Es como que desde visual basic pueda autosalvar un archivo de Word mientras se esta ejecutando.

Gracias
  #2 (permalink)  
Antiguo 19/08/2008, 14:21
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.

Si Miprograma.exe es un programa creado por ti mismo hay varias formas de comunicar tus programas entre sí. Pero si no fuiste tú el que hiciste el programa (como en el caso de Word, no sé si es un caso real o solo un ejemplo el que pusiste), puedes usar DDE (si el programa lo permite).
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 19/08/2008, 14:28
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 9 meses
Puntos: 2
Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic.

Gracias David.

Te explico: El programa es un ejecutable que funciona con archivos creados por el mismo programa, o sea, este programa crea archivos con extension *.adf, entonces mientras se esta trabajando, que visual se encargue de hacer un autoguardado de ese archivo, ya que el programa ese no hace autoguardado, me entiendes?

Gracias
  #4 (permalink)  
Antiguo 19/08/2008, 14:40
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.

Se pone un poco complicado. Pero mi idea sería: seguro que ese programa por algún lado la opción de guardar, un botón, un menú, o algo así, ¿no?. Bueno, podemos con SendMessage enviar un mensaje a la ventana como si hiciéramos click en ese botón o menú y así el programa lo va a guardar.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #5 (permalink)  
Antiguo 19/08/2008, 14:47
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 9 meses
Puntos: 2
Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic.

A ver, a ver, jeje si entendi, tu dices un Sendmessage de visual o del programa?

El menu para guardar es este:



Lo que pasa es que el programa tiene un error ahi que a veces se cierra solo sin opcion de guardar entonces puede que el mensaje sirva para recordar cada 5 minutos que se debe guardar el archivo pero siento que sea algo molesto mientras tanto.

Como seria ese sendmessage?
  #6 (permalink)  
Antiguo 19/08/2008, 14:53
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Pregunta Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic.

Tal vez en este caso podemos en vez de utilizar SendMessage (enviar un mensaje a la ventana) es simular que se presionó Ctrl + S con lo que va a guardar el archivo. ¿Qué te parece?
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #7 (permalink)  
Antiguo 19/08/2008, 14:58
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 9 meses
Puntos: 2
Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic.

Cita:
Iniciado por David el Grande Ver Mensaje
Tal vez en este caso podemos en vez de utilizar SendMessage (enviar un mensaje a la ventana) es simular que se presionó Ctrl + S con lo que va a guardar el archivo. ¿Qué te parece?
A ver si entendi por que esto es nuevo para mi. El Sendmessage hace que desde mi programa en visual basic simule un Ctrl+S en el otro programa???? Oye eso seria un exito, pero voy a investigar como se declara y todo para ver si puedo hacer lo que necesito, gracias por ese excelente aporte David.
  #8 (permalink)  
Antiguo 19/08/2008, 15:03
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, en realidad lo de simular el Ctrl + S era una alternativa a usar SendMessage. Puedes simular la pulsación de teclas usando keybd_event (siempre y cuando la ventana a la que quieres enviar las pulsaciones sea la que tenga el foco).

SendMessage, cómo te voy a explicar. En Windows las ventanas reciben mensajes por cada evento que ocurre, por ejemplo, al hacer click, pulsar una tecla, volver a pintar la ventana, todos esos son mensajes que el sistema envía a la ventana, y ésta las procesa y realiza la acción en cada caso.

Es por eso que en principio te había sugerido usar SendMessage para simular que habíamos hecho click en el menú, aunque creo que será menos complicado simular la pulsación de teclas con el keybd_event.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #9 (permalink)  
Antiguo 19/08/2008, 15:12
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 9 meses
Puntos: 2
Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic.

Cita:
Iniciado por David el Grande Ver Mensaje
Bueno, en realidad lo de simular el Ctrl + S era una alternativa a usar SendMessage. Puedes simular la pulsación de teclas usando keybd_event (siempre y cuando la ventana a la que quieres enviar las pulsaciones sea la que tenga el foco).

SendMessage, cómo te voy a explicar. En Windows las ventanas reciben mensajes por cada evento que ocurre, por ejemplo, al hacer click, pulsar una tecla, volver a pintar la ventana, todos esos son mensajes que el sistema envía a la ventana, y ésta las procesa y realiza la acción en cada caso.

Es por eso que en principio te había sugerido usar SendMessage para simular que habíamos hecho click en el menú, aunque creo que será menos complicado simular la pulsación de teclas con el keybd_event.
A ver si entendi: Sendmessage es como hacer que Windows mande un mensaje en pantalla en este caso cuando uso el otro programa? (la ventana del foco)
-Mi programa obviamente debe estar abierto para que Windows haga esta accion
-Mi programa debera hacer que cada 5 minutos haga un "sendmessage" para que windows reaccione y pulse Ctrl + S en el otro programa
-Debo tambien controlar el programa para que si el otro programa no esta en ejecucion, evitar un error por no encontrar el programa ejecutado.
-Supongo que puedo habilitar/deshabilitar esa opcion para el usuario pueda decidir si quiere que se auto guarde el programa o no.

Vaya! que tarea tengo que investigar todo eso. La verdad David te agradezco mucho por esta guia. Vere que podre hacer con Sendmessage, vere si busco ejemplos para acoplar mi programa con eso.

Pura vida!
  #10 (permalink)  
Antiguo 19/08/2008, 15:15
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, explico mejor, no es que Windows mande un mensaje en pantalla, Windows envía un mensaje a la ventana, y esa ventana tiene una función que procesa los mensajes.

Aunque, como te dije, en este caso tal vez no sea necesario usar SendMessage, tal vez sea mejor solo usar keybd_event que efectivamente simula la pulsación de teclas, lo único que habrá que saber es si la ventana activa es aquella en la que queremos simular la pulsación, si no es, podemos enviarle el foco.

Espero que te ayude.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #11 (permalink)  
Antiguo 19/08/2008, 15:29
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 9 meses
Puntos: 2
Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic.

Una pregunta mas David, el Keybd_event es una funcion? o evento de algun objeto?
  #12 (permalink)  
Antiguo 19/08/2008, 15:32
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.

keybd_event es una función que pertenece a la API de Windows.

Aquí un ejemplo:
http://www.recursosvisualbasic.com.a...e-sendkeys.htm

Aunque, como te dije, hay más implicado que solo simular teclas, convendría usar FindWindow para saber si la ventana del programa existe y obtener su hWnd, luego con GetActiveWindow saber si es la ventana activa, y si así es finalmente enviar la pulsación.

Espero no haberte confundido.

P.S.: FindWindow y GetActiveWindow también pertenecen a la API.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #13 (permalink)  
Antiguo 19/08/2008, 15:53
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 9 meses
Puntos: 2
Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic.

OK gracias David, probare ahora que llegue a mi casa, muy amable por tu paciencia, cuando tenga resultados aca te aviso.
  #14 (permalink)  
Antiguo 21/08/2008, 09:41
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 9 meses
Puntos: 2
Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic.

Ya encontre la forma para activar botones con el keybd_event

Esta direccion tiene todas las formas de activar los diversos botones http://thedotnet.com/nntp/47170/showpost.aspx

David aca tengo este codigo:

Código PHP:
Public Class Form1
    Dim stopWatch 
As New Stopwatch
    
Private Const VK_LCONTROL = &HA2
    
Private Const VK_S = &H53
    
Private Const VK_TAB = &H9
    
Private Const VK_SPACE = &H20
    
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As ByteByVal bScan As Byte_
            ByVal dwFlags 
As Long_
            ByVal dwExtraInfo 
As Long)


    Private Const 
VK_SNAPSHOT = &H2C

    
Private Sub Button1_Click(ByVal sender As System.ObjectByVal e As System.EventArgsHandles Button1.Click
        Command1_Click
()
    
End Sub

    
Private Sub Command1_Click()
        
keybd_event(VK_SNAPSHOT100)
        
keybd_event(VK_LCONTROL VK_S100)
        
keybd_event(VK_TAB100)
        
keybd_event(VK_SPACE100)
    
End Sub

    
Private Sub TimerCrono_Tick(ByVal sender As System.ObjectByVal e As System.EventArgsHandles Timer1.Tick
        
If stopWatch.IsRunning Then
            Dim ts 
As TimeSpan stopWatch.Elapsed
            Me
.textbox1.Text String.Format("{0:00}:{1:00}:{2:00}.{3:00}"ts.Hoursts.Minutests.Secondsts.Milliseconds 10)
        
End If
    
End Sub
End 
Class 
Si corro este codigo, cuando oprimo el boton para activarlo obviamente va a funcionar las teclas (Ctrl+S,Tab,Space) que le puse en la ventana donde oprimi el boton.

Si ves puse un timer esta listo para solo agregarle un StopWatch.start() y empieza a caminar, lo que no se es como hacer para que cada 5 minutos se ejecute esta herramienta.

Gracias por la ayuda
  #15 (permalink)  
Antiguo 21/08/2008, 09:54
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.

Primero, ten cuidado con el keybd_event, porque no veo en el código que estás "soltando" las teclas, lo único que estás haciendo es "presionarlas", lo más probable es que se va a colgar.

Segundo, para el Timer solo necesitas establecerle la propiedad Interval (en milisegundos), después accionarlo con Timer.Enabled = True.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #16 (permalink)  
Antiguo 21/08/2008, 10:04
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 9 meses
Puntos: 2
Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic.

Cita:
Iniciado por David el Grande Ver Mensaje
Segundo, para el Timer solo necesitas establecerle la propiedad Interval (en milisegundos), después accionarlo con Timer.Enabled = True.
Todos los post te los he entendido hasta ahora! no te entendi en lo último. El Interval lo tengo en 50. Si lo pongo en 5000 durara 5 segundos si no me equivoco, cierto? ya que la siguiente instruccion que tengo su base es de 10

Me.TextBox1.Text = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10)

Ahora perdona la ignorancia en este aspecto: Timer.Enabled = True sucedera cuando????

if timer = ??? then
Timer.Enabled = True
end if

Es asi?
  #17 (permalink)  
Antiguo 21/08/2008, 10:20
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Pregunta Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic.

Pues, tienes el Timer, en alguna parte del código deberás iniciar su ejecución. Eso es lo que se hace con Timer.Enabled = True. Pero si necesitas ejecutar el código cada cinco minutos, ¿por qué no aumentas el Interval?.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #18 (permalink)  
Antiguo 21/08/2008, 10:34
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 9 meses
Puntos: 2
Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic.

Si claro David le incrementaria el interval lo que quiero es ver ahora si el programa funciona cada 5 segundos haciendo un Print Screen en cualquier ventana que use, ya si funciona lo dejo a 5 minutos.

El timer inicia cuando en el boton coloco un llamado al timer que es stopwatch.start. En ese mismo boton si se vuelve a oprimir pasa que stopwatch.stop con una condicion de if-else

Dim stopWatch As New Stopwatch

Si ves el Timer se ejecuta si el stopwatch esta corriendo:
Private Sub TimerCrono_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
If stopWatch.IsRunning Then
--
--
--
End If
End Sub

Entonces mi pregunta es: Es necesario ponerle el Timer.Enabled = True en mi codigo para poder capturar cada cierto tiempo el timer?

otra pregunta disculpa el abuso: El intervalo lo hago en el codigo, como hago que pueda poner un textbox en el programa para que el usuario escoja cada cierto tiempo para salvar el programa?

Muchas gracias!
  #19 (permalink)  
Antiguo 21/08/2008, 10:38
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.

No necesitas usar ese stopWatch, con solo poner Timer1.Enabled = True ya va a iniciar el Timer, y para pararlo solo usa Timer.Stop().

Para lo de que el usuario elija el tiempo, puedes pedirle cada cuántos minutos quieres que se ejecute en el TextBox, luego multiplicar ese valor para obtener los milisegundos. Algo como esto:
Código PHP:
Timer.Interval Val(Text1.Text) * 60 1000 
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #20 (permalink)  
Antiguo 21/08/2008, 10:45
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 9 meses
Puntos: 2
Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic.

Cita:
Iniciado por David el Grande Ver Mensaje
No necesitas usar ese stopWatch, con solo poner Timer1.Enabled = True ya va a iniciar el Timer, y para pararlo solo usa Timer.Stop().
[/PHP]
Gracias David, eres todo un libro de Visual Basic.
Ahora algo que aun no me queda claro: Digamos que corro el programa con Timer1.Enabled = True y el timer corre digamos en textbox1.text. Para detenerlo usaria Timer1Stop() pero aun no se como capturar los 5 minutos, sera que tengo que detener el tiempo con esa instruccion que me diste y ya detenido se ejecuta la instruccion de salvar? pero debo estar inicializando el timer inmediatamente despues de que termina?

Es que pensaba que cuando yo decia cada 5 minutos era que el timer se mostraba asi:

00:00:00
00:05:00
00:10:00
00:15:00
00:20:00 etc

Voy a probar deteniéndolo asi como "creo entendi". Gracias David, cualquier cosa aca te aviso.
  #21 (permalink)  
Antiguo 21/08/2008, 11:33
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 9 meses
Puntos: 2
Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic.

Cita:
Iniciado por David el Grande Ver Mensaje
Primero, ten cuidado con el keybd_event, porque no veo en el código que estás "soltando" las teclas, lo único que estás haciendo es "presionarlas", lo más probable es que se va a colgar.
Tenias razon pero como hago para "soltar" las teclas despues de su ejecucion?

Gracias!
  #22 (permalink)  
Antiguo 21/08/2008, 11:36
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.

No necesitas detener el Timer con Timer.Stop() a no ser que sea realmente necesario hacerlo, ya que si lo detienes solo va a ejecutar una sola vez y no es eso lo que queremos, lo que queremos es que continúe ejecutándose a cada cierto tiempo.

Ahora mismo no recuerdo cuánto acepta el Timer como Interval, pero prueba a ponerlo en un minuto (60000), así lo único que necesitas hacer es saber si hemos llegado a los cinco minutos de esta manera:
Código PHP:
Dim Count As Integer 0
Private Sub Timer1_Tick(ByVal sender As System.ObjectByVal e As System.EventArgsHandles Timer1.Tick
 Count 
+= 1
If Count 5 Then
     Count 
0
     
'Acción que debe ejecutarse a los cinco minutos'
End If
End Sub 
EDITO: Para soltar las teclas:
Código PHP:
Const KEYEVENTF_KEYUP = &H2
keybd_event
(Codigo Tecla0KEYEVENTF_KEYUP0
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #23 (permalink)  
Antiguo 21/08/2008, 20:30
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 9 meses
Puntos: 2
Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic.

Gracias David, todo me ha resultado a la perfección.

Saludos
  #24 (permalink)  
Antiguo 22/08/2008, 06:52
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.

Me alegra que todo haya salido bien.

Hasta la próxima .
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #25 (permalink)  
Antiguo 22/08/2008, 11:03
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 9 meses
Puntos: 2
Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic.

Que tal

Existira alguna forma de que esta simulacion de oprimir teclas sea especificamente para 1 foco? es decir para un solo programa?

Lo que pasa es que las teclas que necesito accionar son Ctrl+S, Tab y ENTER, esto debido a que si solo oprimo Ctrl+S siempre me va salir un cuadro con dos opciones, y la idea es que no salga por eso puse el TAB y Enter, que tambien puedo cambiarlo por Flecha derecha y espacio.

El problema es Ctrl+S que en cualquier aplicacion que este, me va salvar lo que tengo activado tal vez por error, entonces quiero evitar eso, o sea que Ctrl + S funcione solamente para un programa definido por mi.

Se me ocurre con un if donde condicione que si la ventana es xxxxx entonces que el programa de autosalvar (Ctrl + S) funcione. Pero supongo que esa ventana debe alguna distinción con respecto a todas las demas ventanas. No se si esto es realmente posible, pero seria una gran utilidad no solo a mi si no a los que visitan este foro.

Gracias!
  #26 (permalink)  
Antiguo 22/08/2008, 11:07
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.

En el mensaje #12 expliqué cómo hacerlo.
http://www.forosdelweb.com/2540683-post12.html

Si tienes dudas al respecto estamos por acá .
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #27 (permalink)  
Antiguo 22/08/2008, 14:40
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 9 meses
Puntos: 2
Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic.

Gracias David la primera Duda:

Estoy inicialmente probando con FindWindow, esta es la funcion:

<System.Runtime.InteropServices.DllImport("user32. dll")> _
Private Shared Function FindWindow( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As System.IntPtr
End Function

lpClassName: Nombre de la clase de la ventana a buscar. Si no se va a pasar el nombre de la clase ponga una cadena nula (vbNullString)

lpWindowName: Texto del titulo de la ventana a buscar. Si no se pasa el título, debe pasar una cadena nula (vbNullString).

Esta funcion si encuentra la ventana devuelve el manipulador de la misma, sino devuelve un 0.

Este texto lo encontré en este link: http://www.silared.com/usuarios/vbas...FindWindow.htm

Pero aún no comprendo como puedo hacer que el otro programa sea activa con mi aplicación. Tengo una situación que no se si es un problema: Según leí hay que escribir el nombre del archivo exacto como viene en la parte de arriba para que el programa lo busque y se pueda trabajar en él, lo que pasa es que al abrir un archivo, cambia de nombre asi:




Si me pueden dar una mano en este tema que me parece muy interesante tanto para mi conocimiento como para el de todos. Gracias.
  #28 (permalink)  
Antiguo 22/08/2008, 14:51
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.

En ese caso lo que puedes hacer es buscar por el ClassName, para saber cuál es el ClassName de la ventana en cuestión puedes usar el programa llamado Spy++.

Ahora, ¿para qué servirá obtener el hWnd de la ventana?. Bueno, si lo comparamos con GetActiveWindow() sabremos si es la ventana activa actualmente, y si no lo es haremos que sea con SetFocus().
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #29 (permalink)  
Antiguo 23/08/2008, 20:00
 
Fecha de Ingreso: agosto-2008
Mensajes: 5
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic.

Cita:
Iniciado por moradazo Ver Mensaje
Gracias David la primera Duda:

Estoy inicialmente probando con FindWindow, esta es la funcion:

<System.Runtime.InteropServices.DllImport("user32. dll")> _
Private Shared Function FindWindow( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As System.IntPtr
End Function

lpClassName: Nombre de la clase de la ventana a buscar. Si no se va a pasar el nombre de la clase ponga una cadena nula (vbNullString)

lpWindowName: Texto del titulo de la ventana a buscar. Si no se pasa el título, debe pasar una cadena nula (vbNullString).

Esta funcion si encuentra la ventana devuelve el manipulador de la misma, sino devuelve un 0.

Este texto lo encontré en este link:

_http://www.silared.com/usuarios/vbasic/api/Funciones/FindWindow.htm

Pero aún no comprendo como puedo hacer que el otro programa sea activa con mi aplicación. Tengo una situación que no se si es un problema: Según leí hay que escribir el nombre del archivo exacto como viene en la parte de arriba para que el programa lo busque y se pueda trabajar en él, lo que pasa es que al abrir un archivo, cambia de nombre asi:




Si me pueden dar una mano en este tema que me parece muy interesante tanto para mi conocimiento como para el de todos. Gracias.

hola que tal he estado leyendo mucho este post y me ha servido de muchisima ayuda yo me encuentro con un problema similar, pero si me podrias ayudar copie el codigo que mostraste para obtener el handle de la ventana y ya lo he logrado me devuelve el codigo de la ventana pero al momento de hacer la funcion show Window se me cierra el programa.....

lo he dejado asi....::

Código PHP:
 <System.Runtime.InteropServices.DllImport("user32.dll")> _
    
'obtener el handle de la ventana
    Private Shared Function FindWindow( _
    ByVal lpClassName As String, _
    ByVal lpWindowName As String) As System.IntPtr
    End Function

    '
mostrar la ventana
    
<System.Runtime.InteropServices.DllImport("user32.dll")> _
    
Private Shared Function ShowWindow_
    ByVal hWnd 
As Long_
    ByVal nCmdShow 
As Long) As System.IntPtr
    End 
Function 


y aqui pongo como invoco estos eventos desde un boton:::


Código PHP:
        Dim Hndl As Long
        Hndl 
FindWindow(Actnom)
        
retval ShowWindow(Hndl3

el find window lo hace sin problemas pero el show window me cierra la aplicacion que estoy haciendo mal si me pudieran ayudar..

muchas gracias....

Última edición por danger_cris; 23/08/2008 a las 20:21
  #30 (permalink)  
Antiguo 25/08/2008, 00:08
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 9 meses
Puntos: 2
Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic.

Yo igual busqué un código que busca las ventanas:

Código:
Option Explicit  
  
'Constantes para los nombres de clases   
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''   
'Algunos nombres de clase de ventanas El Outlook   
Const MSOutlook = "OpusApp"  
'El Excel   
Const MSExcel = "XLMAIN"  
'El Internet Explorer   
Const MSIExplorer = "IEFrame"  
Const MSVBasic = "wndclass_desked_gsk"  
'El bloc de notas   
Const NotePad = "Notepad"  
'Formularios de Visual basic   
Const MyVBApp = "ThunderForm"  
  
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''   
  
' Funciòn APi para buscar Ventanas de Windows   
Private Declare Function FindWindow _   
    Lib "user32" _   
    Alias "FindWindowA" ( _   
        ByVal lpClassName As String, _   
        ByVal lpWindowName As String) As Long  
  
  
Private Sub Comprobar(clase As String)   
  
Dim ret As Long  
       
    ' busca la ventana y retorna el Handle   
    ret = FindWindow(clase, vbNullString)   
       
    'si retorna distinto _   
     de 0 es porque la encontró   
    If ret <> 0 Then  
        MsgBox "La aplicación está abierta", vbInformation + vbOKOnly   
    Else  
        MsgBox "La aplicación NO está abierta", vbInformation + vbOKOnly   
    End If  
       
End Sub  
  
Private Sub Command1_Click()   
    ' Para comprobar si está abierto el Internet explorer   
    Comprobar MSIExplorer   
End Sub  
  
Private Sub Command2_Click()   
    ' Para comprobar si está abierto el Microsoft Excel   
    Comprobar MSExcel   
End Sub  
  
  
Private Sub Command3_Click()   
    ' Para comprobar si está abierto el Microsoft OutLook   
    Comprobar MSOutlook   
End Sub  
  
Private Sub Command4_Click()   
    ' Para comprobar si está abierto formularios de Visual Basic   
    Comprobar MSVBasic   
End Sub  
  
  
Private Sub Command5_Click()   
    ' Para comprobar si está abierto el Bloc de notas   
    Comprobar NotePad   
End Sub  
  
  
  
Private Sub Form_Load()   
       
    Command1.Caption = " Internet Explorer "  
    Command2.Caption = " Microsoft Excel "  
    Command3.Caption = " Microsoft Outlook "  
    Command4.Caption = " Visual basic "  
    Command5.Caption = " Bloc de notas "  
  
End Sub
Como ven, los Command1.Caption no me funciona, lo probé con Capture, pero siempre me da resultados de que existen las ventanas pero no es cierto, que podrá ser? gracias.
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 13:34.