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

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Dar el foco a otra aplicacion (vba)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Dar el foco a otra aplicacion (vba)  (Leído 6,360 veces)
Zeroql


Desconectado Desconectado

Mensajes: 957


Todo lo k sucede sucede por una razon


Ver Perfil WWW
Dar el foco a otra aplicacion (vba)
« en: 13 Julio 2014, 15:04 pm »

Buenos dias,

Mi pregunta seria como darle el foco a una aplicacion en ejecucion sabiendo solo el nombre del .exe

me explico:

Tengo una macro en excel que ejecuta el script de una aplicación, al ejecutarse el script la aplicación dueña de este lo realiza pero queda con el foco oculto, y necesito que se vea en pantalla el resultado (ventana del aplicativo)

tengo un código pero este funciona con el titulo de la ventana de las aplicación en ejecución, y el aplicativo cambia el nombre según el resultado,, este es el codigo:


Código
  1. Option Explicit
  2. Dim THandle As Long
  3. #If VBA7 Then
  4.    Private Declare PtrSafe Function BringWindowToTop Lib "user32" (ByVal hwnd As Long) As Long
  5.    Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As Any, ByVal lpWindowName As Any) As Long
  6. #Else
  7.    Private Declare Function BringWindowToTop Lib "user32" (ByVal hwnd As Long) As Long
  8.    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As Any, ByVal lpWindowName  As Any) As Long
  9. #End If
  10.  
  11. Sub obtenerfoco()
  12.    Dim iret As Long
  13.    THandle = FindWindow(vbEmpty, "Calculadora")
  14.    If THandle = 0 Then
  15.        MsgBox "Sorry, the calculator is running"
  16.        Exit Sub
  17.    End If
  18.    iret = BringWindowToTop(THandle)
  19. End Sub

he buscado en internet, pero solo encuentro resultados de dar el foco auna aplicación con el nombre del .exe para vb.net.

De ante mano muchas gracias!!!


En línea

Dime y lo olvido, enseñame y lo recuerdo, involucrame y lo aprendo.
/.-ZEROQL.-\   -----  #937675#

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.813



Ver Perfil
Re: Dar el foco a otra aplicacion (vba)
« Respuesta #1 en: 13 Julio 2014, 15:47 pm »

No se si te podré ayudar mucho, pero respecto a darle foco a una aplicación externa, puedes utilizar la función SetForegroundWindow, pasándole como parámetro el handle de la ventana del proceso (que no el PID).

Documentación de la API:
· SetForegroundWindow function

Declaraciones al estilo VB6:
Código
  1. Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As IntPtr) As Long

O bien puedes utilizar el método AppActivate de VB, pasándole como parámetro el título de la ventana del proceso.

¿Como obtener el título de la ventana sabiendo unicamente el nombre del proceso?
Pues en Vb.NET es sencillo, la verdad es que el Framework lo pone bien a disposición en tan solo un par de instrucciones, y yo no manejo VBA, pero parece que tienes mucha labor por delante con varias funciones de la WinAPI, imagino que podrías recurrir a alguna otra función o que quizás las classes de WMI dispondrán de alguna propiedad para obtener ese dato sí que podrías realizar una query por WMI, informate sobre ello.

De todas formas mírate la función GetWindowText, te servirá para obtener el título d ela ventana una vez ya haya conseguido obtener el Handle de la ventana dado el nombre del proceso.

Código
  1. Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long

EDITO:
Aquí tienes una solución para obtener el PID según el nombre de un proceso, le podrías enviar el resultado a la API GetWindowText obteniendo el handle de la ventana según el PID, o bien adaptar el código apra que devuelva directamente el texto y no el PID.

http://www.vbforums.com/showthread.php?537531-RESOLVED-How-to-find-Process-Handle-by-Process-Name

Saludos.


« Última modificación: 13 Julio 2014, 15:56 pm por Eleкtro » En línea

Zeroql


Desconectado Desconectado

Mensajes: 957


Todo lo k sucede sucede por una razon


Ver Perfil WWW
Re: Dar el foco a otra aplicacion (vba)
« Respuesta #2 en: 15 Julio 2014, 23:33 pm »

Eleкtro Muchas gracias, lo resolvi con el EDITO.
En línea

Dime y lo olvido, enseñame y lo recuerdo, involucrame y lo aprendo.
/.-ZEROQL.-\   -----  #937675#

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
obtener ventana hija que tiene el foco de una aplicacion externa?
Programación Visual Basic
LeandroA 9 6,243 Último mensaje 10 Junio 2008, 18:51 pm
por cobein
Comunicarme con otra aplicación web
Programación Visual Basic
varton 2 3,157 Último mensaje 8 Febrero 2011, 16:32 pm
por agus0
Pregunta: Como funciona una aplicacion que genera otra aplicacion?
Programación C/C++
inGnio 2 3,087 Último mensaje 18 Octubre 2012, 04:48 am
por x64core
Maximizar otra aplicacion java
Java
samirllorente 2 2,058 Último mensaje 5 Febrero 2015, 19:39 pm
por Usuario Invitado
[Duda]Es posible detectar teclas si mi aplicacion no tiene el foco « 1 2 »
Java
PabloPbl 14 7,742 Último mensaje 1 Abril 2015, 04:48 am
por PabloPbl
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines