Código PHP:
handle = GetWindow(Me.hWnd, GW_HWNDFIRST)
| ||||
![]() 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:
__________________ Por favor, antes de preguntar, revisa la Guía para realizar preguntas. |
| ||||
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? |
| ||||
![]() 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. |
| ||||
Respuesta: Visual Basic 2005. Salvar archivos desde Visual Basic. Mira hice algo asi:
Código:
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: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) 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. |
| ||||
![]() 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. |
| ||||
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. |
| ||||
![]() 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. |
| ||||
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. |
| ||||
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. |
| ||||
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? |
| ||||
![]() 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. |
| ||||
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. |
| ||||
![]() 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. |
| ||||
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! |
| ||||
![]() Bueno, modifica el código 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. 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? |
| ||||
![]() 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:
__________________ Por favor, antes de preguntar, revisa la Guía para realizar preguntas. |
| ||||
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 |
| ||||
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 |
| ||||
![]() 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. |
| ||||
![]() 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 |