Yo usé esa misma función que pusiste (Comprobar) y me funciona perfectamente. ¿Qué sucede cuando haces click en los botones?.
P.S.: danger_cris, usa SetFocus en vez de ShowWindow.
| ||||
![]() Yo usé esa misma función que pusiste (Comprobar) y me funciona perfectamente. ¿Qué sucede cuando haces click en los botones?. P.S.: danger_cris, usa SetFocus en vez de ShowWindow.
__________________ Por favor, antes de preguntar, revisa la Guía para realizar preguntas. |
| ||||
Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic. Cita: Gracias David por la respuesta.Primero en el ejemplo que puse a mi me da error en la parte en rojo: 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 " Command1.Capture = " Internet Explorer " Command2.Capture = " Microsoft Outlook " Command3.Capture = " Microsoft Excel " Command4.Capture = " Bloc de notas " Command5.Capture = " Visual basic " End Sub Y este es el resultado que me da este codigo: ![]() Como pueden ver, el programa me dice que cualquier aplicacion en ese menu esta activo, o esta abierto, cuando es mentira por que Excel en este caso no esta abierto, ni siquiera algun programa de Office. Sera por que cambie el Caption por el Capture? gracias |
| ||||
![]() Ese código me suena a VB6 ![]() Bueno, habría que ejecutarlo paso a paso para saber qué está sucediendo, dudo mucho que el problema sea con el Capture ya que no está tomando ese valor en la función Capturar.
__________________ Por favor, antes de preguntar, revisa la Guía para realizar preguntas. |
| ||||
Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic. Al ejecutarlo paso a paso, hay una parte donde se supone distingue si la ventana existe o no: Private Sub Comprobar(ByVal clase As String) Dim ret As Long ' busca la ventana y retorna el Handle ret = FindWindow(clase, vbNullString) TextBox1.Text = ret '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 Puse un textbox para saber que numeros estaba dando y estos son los resultados: Internet: 322288895582013560 Excel: 322851845531762688 Outlook: 323696270461894656 Visual Basic: 137922760064304820 Bloc de Notas: 324259220415315968 Jamas me va dar cero, aunque el programa no se este ejecutando. Pero mi pregunta es si en realidad un programa de estos al estar abierto me daria ese numero tan alto? Gracias |
| ||||
![]() El hWnd de la ventana no puede ser un número tan grande ![]() Es raro, porque yo lo he probado y funciona. P.S.: ¿Cuál es el valor de vbNullString en VB.NET?
__________________ Por favor, antes de preguntar, revisa la Guía para realizar preguntas. |
| ||||
Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic. En este caso es nulo, nada, no devuelve valores, le puse textbox1.text = vbNullString y ningun valor aparece... |
| ||||
![]()
__________________ Por favor, antes de preguntar, revisa la Guía para realizar preguntas. |
| ||||
Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic. No creo por que incluso el .Net pide un valor Public Const vbNullString As String (Constants must have a value) |
| ||||
![]() Bueno, aquí no tengo VB.NET para probarlo. Pero es muy extraño el comportamiento del FindWindow. ![]() ¿Has probado con la aplicación esa que mencionaste al principio?
__________________ Por favor, antes de preguntar, revisa la Guía para realizar preguntas. |
| ||||
Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic. Gracias David, por cierto ahi me disculpan y agradezco su paciencia por estas consultas tan amplias de mi parte, pero es que dependen de mi trabajo! (Estoy de prueba) He tenido muchos enredos pero gracias a este foro los he solucionado y lo mas importante, he aprendido mucho de verdad. El codigo que puse al principio es el mismo de estas partes que he puesto en los ultimos post, estaba intentando ver si me funcionaba el del danger_cris, pero me da error en retval = ShowWindow(hinst, SW_MINIMIZE) pero igual lo declare como string y como integer y no me funciona, igual puse tu sugerencia de cambiar a SetFocus y mi visual me dice que SetFocus no esta declarado. Tengo estas dudas igual investigaré y si se algo lo posteo aca. Gracias! |
| ||||
![]() SetFocus también es de la API ![]()
__________________ Por favor, antes de preguntar, revisa la Guía para realizar preguntas. |
| ||||
![]() Por cierto, prueba con esto para FindWindow: Código PHP: Código PHP:
__________________ Por favor, antes de preguntar, revisa la Guía para realizar preguntas. |
| ||||
Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic. Gracias David, ahora el resultado es al contrario, para cualquier boton que ejecuto me dice que la ventana no esta abierta, y ret para cualquier boton siempre me esta dando cero. Este es el codigo: Código PHP: |
| ||||
![]() Cambia esto: Código PHP: Código PHP: ![]() P.S.: Me equivoqué, con SetFocus no funciona ![]()
__________________ Por favor, antes de preguntar, revisa la Guía para realizar preguntas. |
| ||||
Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic. David mira: Hace unas semanas me compré este libro: Visual Basic 2005 de Anaya Multimedia, de Guillermo Guille Som Cerezo me costo 38000 colones, en dólares son $70, y te juro me ha sido más útil el foro y vos que este libro (No digo que el libro sea malo, más bien es muy bueno, eso da más méritos a todo el foro) Oye David, gracias me ha funcionado, creo que ya identificadas las ventanas podré aplicar lo de salvar en el programa seleccionado. Ahora mi duda es: En base a este programa que probamos para ver si identificaba las ventanas, se habían declarado previamente unas constantes que servían para que los botones los llamaran: Const MSOutlook = "OpusApp" Const MSExcel = "XLMAIN" Const MSIExplorer = "IEFrame" Const MSVBasic = "wndclass_desked_gsk" Const NotePad = "Notepad" Const MyVBApp = "ThunderForm" Esos son programas definidos pero como te mencionaba de un principio tengo un programa que no es ninguno de esos, como hago para declararlo? Asi es el programa: ![]() Necesito tener el encabezado cierto? pero el encabezado cambia por el numero de caso, solo se mantiene al inicio donde dice Treat3 Gracias. |
| ||||
Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic. Como te dije, hay un programa que se llama Spy ++ que te permite saber cuál es la clase de la ventana. Otra opción que tienes es con FindWindow coloca primeramente el nombre exacto que tienes en la barra de título de esa ventana, después con GetClassName (pasándole el hWnd obtenido) ya sabrás cuál es la clase de la ventana. P.S.: En este caso debemos usar la clase de la ventana porque como dijiste el título varía.
__________________ Por favor, antes de preguntar, revisa la Guía para realizar preguntas. |
| ||||
Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic. Gracias David, dos cosas: Tienes algún link que me pueda explicar claramente el GetClassName, o sea, para declararlo precisamente en ese código que estoy trabajando. Y la segunda consulta es: El hWnd que me mencionas es el mismo ret que me diste en el código? Gracias |
| ||||
![]() Si descargas el Spy++ te ahorrarás todo ese trabajo ![]() http://msdn.microsoft.com/en-us/library/ms633582(VS.85).aspx. http://www.recursosvisualbasic.com.a...ame-parent.htm El hWnd al que me refiero es el obtenido con el FindWindow. Explico, lo que necesitamos saber es la clase de la ventana de tu programa, para obtenerlo primero obtendremos su hWnd pasando al FindWindow como parámetro el título completo de la ventana. Después de obtener el hWnd lo pasamos a GetClassName y obtendremos su clase. Cuando ya tengamos la clase ya no necesitaremos saber cuál es el título exacto de la ventana, solo pasaremos el nombre de la clase como parámetro a FindWindow.
__________________ Por favor, antes de preguntar, revisa la Guía para realizar preguntas. |
| ||||
Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic. Una pregunta David, el Spy++ me dice como se llaman las ventanas dentro del Sistema Operativo? Ya lo baje se llama "WinIDSetup3-1.exe" supongo que es ese. Ya obtenido el nombre de la ventana entonces la funcion quedaria asi: ret = findwindow ("Treat3",el nombre que busco) es asi o ando perdido? ![]() |
| ||||
![]() El Spy++ te permite obtener la clase de la ventana. Inicia el Spy++, presiona Ctrl+F, va a abrir una ventana de búsqueda, arrastra el ícono que aparece en el medio sobre la ventana del programa, van a aparecer algunos datos, entre ellas la clase de la ventana, esa clase deberás pasar al FindWindow, así: Código PHP:
__________________ Por favor, antes de preguntar, revisa la Guía para realizar preguntas. |
| ||||
Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic. Ok perdona David de verdad tanta preguntadera. Mi computadora tiene derechos de administrador asi que estoy esperando para que me la desbloqueen, es mas facil asi supongo. Cualquier cosa aca te aviso, gracias por el tiempo. |
| ||||
Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic. Bien David, ya estoy usando el programa pero me parece que es otro al que tu describes, igualmente baje donde me decian Spy ++ Me ha funcionado bien con todas las ventanas, en el sentido de que efectivamente me da los nombres de las clases como el de Internet (IEFrame) el de excel (XLMain), etc. El de mi programa me da un codigo largo (Afx:400000:8:10011:0:3b0a87) y si me funciono, lo malo es que cada vez que abro ese programa, ese nombre de clase cambia los ultimos 6 caracteres, por que sera? este es el programa que baje: ![]() Gracias! |
| ||||
![]() Bueno, no es exactamente ese el programa que yo uso pero por lo visto tiene la misma utilidad. Es que el ClassName es definido por el programa, así que algunos programas pueden hacer que varíe. Por ahora no veo otra alternativa que listar todas las ventanas y ver cuál contiene en el título el nombre "Treat3". ![]()
__________________ Por favor, antes de preguntar, revisa la Guía para realizar preguntas. |
| ||||
Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic. Gracias por tu respuesta. Ya entendí, es buscar la manera de ver todas las ventanas que tenga activas en ese momento y elegir la que diga "Treat3" bueno algo asi pensaba: Código PHP: Yo pensé algo así:
Código:
Pero más bien ahi estoy preguntando si el titulo contiene el mismo título, es una idea que quize probar y no pude. Alguna otra forma para saber el nombre de la ventana? Private Sub Comprobar(ByVal clase As String) Dim A As String ="Treat3" Dim ret As Long ret = FindWindow(Nothing, A.Contains("Treat3")) 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 Última edición por moradazo; 25/08/2008 a las 21:27 |
| ||||
![]() Bueno, con FindWindow no podremos listar todas las ventanas, yo me refería a usar GetWindow para obtener una lista de todas las ventanas en ese momento y luego en esa lista ver si alguna de ellas comienza con la palabra "Treat3". Mira este ejemplo: http://www.recursosvisualbasic.com.a...api/api-39.htm
__________________ Por favor, antes de preguntar, revisa la Guía para realizar preguntas. |
| ||||
Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic. Gracias David una pregunta: Es que el código me parece que es de Visual Basic 6, y tengo un par de errores (Es que no conozco nada de Visual 6)
Código:
handle = GetWindow(hWnd, GW_HWNDFIRST)'Procedimiento que lista las ventanas visibles de Windows Private Sub Listar() Dim buf As Long, handle As Long, titulo As String, lenT As Long, ret As Long List1.Items.Clear() 'Obtenemos el Hwnd de la primera ventana, usando la constante GW_HWNDFIRST handle = GetWindow(hWnd, GW_HWNDFIRST) 'Este bucle va a recorrer todas las ventanas. 'cuando GetWindow devielva un 0, es por que no hay mas Do While handle <> 0 'Tenemos que comprobar que la ventana es una de tipo visible If IsWindowVisible(handle) Then 'Obtenemos el número de caracteres de la ventana lenT = GetWindowTextLength(handle) 'si es el número anterior es mayor a 0 If lenT > 0 Then 'Creamos un buffer. Este buffer tendrá el tamaño con la variable LenT titulo = String$(lenT, 0) 'Ahora recuperamos el texto de la ventana en el buffer que le enviamos 'y también debemos pasarle el Hwnd de dicha ventana ret = GetWindowText(handle, titulo, lenT + 1) titulo$ = Left$(titulo, ret) 'La agregamos al ListBox 'List1.AddItem(titulo$) List1.Items.Add(titulo) 'Puse esta linea pensando que es lo mismo que la anterior End If End If handle = GetWindow(handle, GW_HWNDNEXT) Loop End Sub El hWnd ya estaba declarado en las funciones del ejemplo que me mandaste de esa pagina, igual me dice que no esta declarado. titulo = String$(lenT, 0) Me dice que String es un tipo y no se puede usar como expresión titulo$ = Left$(titulo, ret) Public Property Left() As Integer' has no parameters and its return type cannot be indexed. $ Type character '$' does not match declared data type 'Integer'. Estos tipos de codigos me han salido en muchos programas pero no se como cambiarlos. Si me puedes decir nada mas con que los arreglo, gracias. |
| ||||
![]() Prueba cambiando esto: Código PHP: Código PHP: Código PHP: Código PHP: Código PHP: Código PHP:
__________________ Por favor, antes de preguntar, revisa la Guía para realizar preguntas. |
| ||||
Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic. David muchas gracias, ahi tambien habia averiguado el de left, el ultimo que me diste muchas gracias de verdad. Este codigo me tiene loco ahora me hizo un error que no comprendo por que: ![]() Que podra ser? Inicialice titulo como "", el lenT = 0 por aquello de basura que quede en estas variables. Igual sin ser inicializados me da el error, no comprendo por que, claramente la funcion de Space dice que dentro llevara un integer y todo sera al final un String. Intente cambiar los valores Long, por Integer y al final me marca el mismo error pero en handle = GetWindow(0, GW_HWNDFIRST). Disculpa la insistencia, gracias. El numero que me da el handle es: 8975933078237085696 o sea necesariamente debe ser Long |
| ||||
![]() Prueba poniendo: Código PHP:
__________________ Por favor, antes de preguntar, revisa la Guía para realizar preguntas. |
| ||||
Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic. Gracias David por la respuesta. El valor de LenT de un inicio esta declarado como Long, trate de ver su valor pero me traba el programa: lenT = GetWindowTextLength(handle) TextBox1.Text = lenT El problema esta ahi, necesariamente una variable tipo Long debe obtener el valor de GetWindowTextLenght(Handle) ? Lo declare como string pero tampoco funciono, que seria? |