# Script, um alle 5 secs den Windows Title abzuspeichern



## dendrit (3. Jan 2014)

Hallo liebes Forum,

ich habe leider kaum Erfahrung in der Programmierung in Java. Ich brauche aber nur ein kleines Skript, dass nach seinem Start etwas sehr Einfaches tut: Den Titel eines bestimmten Windowsfensters alle 5 Sekunden auslesen und in einer ASCII-Datei row für row abspeichern. 

Hintergrund: Ich möchte gerne den zeitlichen Verlauf der Besucherzahlen in einem Chatraum analysieren, d.h. das Zeitsignal, wieviel User insgesamt zu einer bestimmten Uhrzeit im Raum sind und wie diese Kurve sich über die Zeit entwickelt. Ich nutze dazu das bekannte Programm mIRC, es zeigt in der Windows Titelleiste seines Fensters in Echtzeit die Gesamtzahl der user im aktiven Chatraum an. Ich möchte gerne wissen, ob diese Zeitkurven in Chatrooms zu unterschiedlichen Themen andere Verläufe haben und welche.

Für einen Java-Profi dürfte so ein kleines Programm in 2 Minuten geschrieben sein oder? Man müsste die Funktion getTitle() benutzen Frame (Java 2 Platform SE 5.0)) und den String alle 5 sec auslesen und abspeichern in einer ASCII-*.txt-Datei.

Könntet Ihr mir ein solche kleines Skript schreiben? Das würde mir sehr viel weiterhelfen. Vielleicht findet Ihr ja auch meine Anwendung spannend und wir könnten Ergebnisse austauschen ;-)

Happy New Year 2014!


----------



## ARadauer (3. Jan 2014)

Von einem fremden Programm Fenster oder von dem eigenen?
Von einem fremden ist es nicht so einfach, da braucht jni/jna aber geht auch


----------



## dendrit (3. Jan 2014)

Also, unter Windows7 benutze ich das eigenständige Programm "mIRC" und wenn man es ensprechend konfiguiert, zeigt es in seiner Titelleiste in Echtzeit den "Füllungszustand" eines Chat-Rooms an. Ich hab mal ein Bildschirmphoto gemacht (als *.JPEG angehängt) und die ständig wechselnde Zahl, die mich interessiert, mit einem roten Pfeil markiert.

Die gesamte Titelleiste soll alle 5 sec in eine ASCII-*.TXT-Datei abgespeichert werden. Später ist es dann ganz einfach per Texteditor etc. möglich, die interessierende Zahl zu isolieren.


----------



## ARadauer (3. Jan 2014)

mhn ok... ist ewas komplexer als "normales" java... die jna seite haben sie irgendwie auch nach github verschoben... keine ahnung finde da die alten dinge nicht mehr...
egal...

lad dir das mal runter
http://www.radauer.com/jna.jar
http://www.radauer.com/examples.jar

das gabs früher auf der jna homepage

die fügst du in den classpath deines projektes ein 

und dass ist der code um fenster titel auszulesen...


```
import java.awt.Rectangle;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;

import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.examples.win32.GDI32;
import com.sun.jna.examples.win32.User32;
import com.sun.jna.examples.win32.GDI32.RECT;
import com.sun.jna.examples.win32.User32.WNDENUMPROC;
import com.sun.jna.examples.win32.W32API.HWND;

public class WindowObserver {

	private static ArrayList<Window> window;
	
	public static void main(String[] args) {
		ArrayList<Window> window = WindowObserver.getOpenWindows();
		for(Window f: window)
			System.out.println(f.getName()+" "+f.getRectangle());
	}

	public static ArrayList<Window> getOpenWindows() {
		window = new ArrayList<Window>();
		User32B user32 = User32B.INSTANCE;
		user32.EnumWindows(new WNDENUMPROC() {

			public boolean callback(HWND hwnd, Pointer arg1) {
				User32B user32 = User32B.INSTANCE;
				if (user32.IsWindowVisible(hwnd)) {
					byte[] name = new byte[512];
					user32.GetWindowText(hwnd, name, name.length);
					Window f = new Window();
					f.setName(byte2String(name));
					RECT r = new GDI32.RECT();
					user32.GetWindowRect(hwnd, r);
					f.setRectangle(r.toRectangle());
					window.add(f);
				}
				return true;
			}
		}, null);
		return window;

	}

	public static String byte2String(byte[] array) {
		try {
			return new String(array, "UTF-16LE").trim();
		} catch (UnsupportedEncodingException e) {
			return null;
		}
	}

	public interface User32B extends User32 {

		User32B INSTANCE = (User32B) Native.loadLibrary("user32",
				User32B.class, DEFAULT_OPTIONS);

		boolean IsWindowVisible(HWND hWnd);

	}
}
```


```
import java.awt.Rectangle;

public class Window {
	String name;
	Rectangle rectangle;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Rectangle getRectangle() {
		return rectangle;
	}

	public void setRectangle(Rectangle rectangle) {
		this.rectangle = rectangle;
	}

}
```
wobei dass schon etwas ... "aussergewöhnlich" ist


----------



## turtle (3. Jan 2014)

Maven Repository: net.java.dev.jna » jna


----------

