¿Qué fichero está abierto en la ventana activa?

El problema es que puedo obtener la ventana activa (con foco), la lista de procesos en funcionamiento, etc. Un proceso puede tener varios archivos abiertos (ejemplo Word abre varios documentos). Pero no se dar el paso que va de la ventana activa al fichero que está abierto en dicha ventana (si tiene abierto alguno) lo que me permitiría saber con qué fichero está trabajando un usuario.

4 Respuestas

Respuesta
1
Tendrías que fijarte algún manual o ayuda de windows. Dependiendo que windows tengas va ser diferente en internet puedes conseguir decena de tutoriales sobre procesos activos de windows.
Sí, lo de obtener el fichero asociado a una ventana parece ser un dato no disponible, me serviría obtener los handles de los ficheros asociados a un proceso, ¿sabes cómo puedo obtener esta información?
Respuesta
1
Puedes poner lo que tienes hecho para que vea por donde encaminarte.
Ante todo gracias por responder. Lo que tengo es una aplicación en C# que va a funcionar como un servicio y que debe poder saber en cualquier momento la aplicación con la que está trabajando el usuario y el fichero que tiene abierto en la ventana activa de esa aplicación.
La ventana actual me la proporciona la función GetForegroundWindow del API de Windows, pero no se como averiguar el fichero con el que estaría trabajando en esa ventana activa, es más ni siquiera he podido averiguar como obtener una lista con los IDs de los ficheros abiertos (sí de otros recursos como procesos y servicios) solo encuentro referencias a una librería llamada NtQuerySystemInformation y poco más. Tampoco encuentro una forma de detectar cuando un fichero es abierto o cerrado, sí cuando se modifica de algún modo (System.IO.FileSystemWatcher).
La idea es llevar contadores de tiempos para los ficheros con los que el usuario está trabajando.
Muchas gracias por tu tiempo mackmig.
Con GetwindowText puedes recuperar el Caption de la ventana activa con el que obtendrás el nombre del fichero que utiliza el usuario.
Otra vez gracias mackmig, entre las posibilidades que había analizado esa es la más fiable, porque la que yo pretendía que consistiría en enviar un mensaje a la aplicación para que ella lo proporcione es posible en linux pero parece que no en windows, un gran inconveniente, ¿no crees? Tu respuesta me lo confirma, yo no había profundizado tanto como para estar segura.
Un saludo y me repito en darte las gracias.
Respuesta
1
Tendrías que decir que programa es, porque no hay una forma para todos los programas, en algunos casos el nombre está en el titulo de la ventana, y en otros casos tenés que mandarle un mensaje al programa (solo en linux).
Si es con word también podes probar con el registro de windows, Word graba ahí los archivos con los que trabajó, fíjate si encontrás donde es.
Muchas gracias, la verdad es que se trata de saberlo para cualquier programa, por lo que me cuentas veo que no hay una forma programable de averiguar esta información, pena que no sea como linux que era la solución que yo estaba buscando pero para windows. Un saludo
Respuesta
1
http://www.netveloper.com/contenido2.aspx?IDC=267_0&IDP=3&P=265
Este es un buen articulo de procesos en 3 páginas, igualmente yo mañana trato de pasarte un pequeño código como para hacer lo que quieres.
Gracias por todo, el artículo está genial, con respecto a lo que necesito creo que no se puede hacer en Windows, si en Linux donde se puede mandar un mensaje a la aplicación para obtener esta información.
Un saludo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas