Foros del Web » Programación para mayores de 30 ;) » Java »

Como obtener el titulo de la ventana activa??

Estas en el tema de Como obtener el titulo de la ventana activa?? en el foro de Java en Foros del Web. Hola a todos. Vengo hoy con una duda sobre Java, necesito saber el titulo de la ventana que se tiene el usuario activa, es decir ...
  #1 (permalink)  
Antiguo 27/04/2015, 07:59
 
Fecha de Ingreso: agosto-2011
Mensajes: 73
Antigüedad: 12 años, 8 meses
Puntos: 0
Pregunta Como obtener el titulo de la ventana activa??

Hola a todos.

Vengo hoy con una duda sobre Java, necesito saber el titulo de la ventana que se tiene el usuario activa, es decir que si mi programa esta corriendo y abre por decir firefox obtener el titulo de la ventana, y si cambia a otra o abre otra pestaña obtener capturar ese titulo tambien.

Mi pregunta, como puedo saber el titulo de la ventana que se encuentra activa actualmente ?? Existe alguna libreria ?? Y Necesito que funcione en windows linuz y mac.

Gracias.
  #2 (permalink)  
Antiguo 27/04/2015, 09:34
(Desactivado)
 
Fecha de Ingreso: marzo-2012
Mensajes: 366
Antigüedad: 12 años
Puntos: 31
Respuesta: Como obtener el titulo de la ventana activa??

He encontrado esto:
Código:
import static enumeration.EnumerateWindows.Kernel32.*;
import static enumeration.EnumerateWindows.Psapi.*;
import static enumeration.EnumerateWindows.User32DLL.*;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.platform.win32.WinDef.HWND;
import com.sun.jna.ptr.PointerByReference;
 
public class EnumerateWindows {
private static final int MAX_TITLE_LENGTH = 1024;
 
public static void main(String[] args) throws Exception {
char[] buffer = new char[MAX_TITLE_LENGTH * 2];
GetWindowTextW(GetForegroundWindow(), buffer, MAX_TITLE_LENGTH);
System.out.println("Active window title: " + Native.toString(buffer));
 
PointerByReference pointer = new PointerByReference();
GetWindowThreadProcessId(GetForegroundWindow(), pointer);
Pointer process = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, false, pointer.getValue());
GetModuleBaseNameW(process, null, buffer, MAX_TITLE_LENGTH);
System.out.println("Active window process: " + Native.toString(buffer));
}
 
static class Psapi {
static { Native.register("psapi"); }
public static native int GetModuleBaseNameW(Pointer hProcess, Pointer hmodule, char[] lpBaseName, int size);
}
 
static class Kernel32 {
static { Native.register("kernel32"); }
public static int PROCESS_QUERY_INFORMATION = 0x0400;
public static int PROCESS_VM_READ = 0x0010;
public static native int GetLastError();
public static native Pointer OpenProcess(int dwDesiredAccess, boolean bInheritHandle, Pointer pointer);
}
 
static class User32DLL {
static { Native.register("user32"); }
public static native int GetWindowThreadProcessId(HWND hWnd, PointerByReference pref);
public static native HWND GetForegroundWindow();
public static native int GetWindowTextW(HWND hWnd, char[] lpString, int nMaxCount);
}
}
Y también esto:

Código:
import com.sun.jna.Native;
import com.sun.jna.platform.win32.User32;
import com.sun.jna.platform.win32.WinDef.HWND;
import com.sun.jna.platform.win32.WinDef.RECT;

// see http://twall.github.io/jna/4.0/javadoc/

public class EnumerateWindows {
    private static final int MAX_TITLE_LENGTH = 1024;

    public static void main(String[] args) throws Exception {
        char[] buffer = new char[MAX_TITLE_LENGTH * 2];
        HWND hwnd = User32.INSTANCE.GetForegroundWindow();
        User32.INSTANCE.GetWindowText(hwnd, buffer, MAX_TITLE_LENGTH);
        System.out.println("Active window title: " + Native.toString(buffer));
        RECT rect = new RECT();
        User32.INSTANCE.GetWindowRect(hwnd, rect);
        System.out.println("rect = " + rect);
    }
 }
Fuente: https://foro.hackxcrack.net/java/obt...ctiva-en-java/

No se si funciona o no, pero ahí dan la respuesta por válida.
  #3 (permalink)  
Antiguo 27/04/2015, 10:50
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Como obtener el titulo de la ventana activa??

Buenas,

Lo de esa página es un copy&paste de esta de stackoverflow:
http://stackoverflow.com/questions/6...mation-in-java

No se tampoco si funciona en windows, pero lo que es claro es que en Linux o mac no funcionará, ya que las llamadas se basan en la api win32 de windows.

Al parecer no hay fórmula mágica multiplataforma y hay que hacer una solución para cada una de ellas:
http://stackoverflow.com/questions/1...-title-in-java

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #4 (permalink)  
Antiguo 27/04/2015, 14:51
 
Fecha de Ingreso: agosto-2011
Mensajes: 73
Antigüedad: 12 años, 8 meses
Puntos: 0
Respuesta: Como obtener el titulo de la ventana activa??

Muchas gracias por sus respuestas he probado ambas soluciones, pero no he logrado que funcione en linux. En windows funciona bien.

Sin embargo cuadno intento el linux, usadno el xwininfo, sigue sin funcionar, no encontre una forma de hacer esto en jna así que decidír ejecutar un comando linux para obtener la info desde proc, pero tampoco funciono xwininfo, funciona desde eclipse pero desde el jar no retorna nada.

esto es lo que hago

Código Java:
Ver original
  1. File f = new File(this.getClass().getResource("/org/systrix/timetracker/util/processName.sh").getPath());
  2.    Process p = Runtime.getRuntime().exec(f.getAbsolutePath());

Etiquetas: linux, mac, title, windows
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 05:49.