Script, um alle 5 secs den Windows Title abzuspeichern

dendrit

Neues Mitglied
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!
 
Zuletzt bearbeitet:

ARadauer

Top Contributor
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

Neues Mitglied
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.
 

Anhänge

  • mirc_title.jpg
    mirc_title.jpg
    107,8 KB · Aufrufe: 29
Zuletzt bearbeitet:

ARadauer

Top Contributor
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...

Java:
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);

	}
}

Java:
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
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K HSQLDB .sql Script Aufruf über Java Datenbankprogrammierung 7
M HSQLDB .Script-Datei entfernen oder sperren Datenbankprogrammierung 18
M HSQLDB oder DERBY - warum SCRIPT Datei? Datenbankprogrammierung 0
H CSV Datei in MSSQL DB oder doch SQL Script Datenbankprogrammierung 11
E SQL-Blockbefehl / Script Datenbankprogrammierung 14
I SaaS Applikation: pro Kunde eine Datenbank / Schema oder eine DB für alle Kunden? Datenbankprogrammierung 76
B SQlite Datenbank, trotz Statements wurden nicht alle Zeilen erzeugt? Datenbankprogrammierung 35
berserkerdq2 database is closed, obwohl ich alle statements in try catch blöcken habe? Datenbankprogrammierung 5
M Alle Records Felder kriegen für DB Abfrage Datenbankprogrammierung 14
L Java- Zähle alle Werte aus der Tabelle von aktiver Zelle Datenbankprogrammierung 12
V SQLite 2 Tabelle vergleichen und alle unterschiede rausgeben Datenbankprogrammierung 1
S select: alle ergebnisse ermitteln Datenbankprogrammierung 5
S Fast alle \ verschwinden Datenbankprogrammierung 4
A Sql Statement - Alle Zahlen größer 9 Datenbankprogrammierung 3
D Alle Werte aus DB auslesen und in Chart darstellen Datenbankprogrammierung 6
C ResultSet enthält nicht alle Daten Datenbankprogrammierung 4
0 Alle Tabellen aus DB lesen Datenbankprogrammierung 2
brainray Bei MySQL alle Datenbanken eines Servers abfragen Datenbankprogrammierung 3
N Oracle DB liefert nicht alle Datensätze Datenbankprogrammierung 3
T SQL Abfrage: Zeige alle Values von bestimmten Tabellen Datenbankprogrammierung 11
S Alle Kunden mit ihren Adressen mit JPQL ausgeben Datenbankprogrammierung 2
A JList nimmt nicht alle Werte aus der DB auf Datenbankprogrammierung 3
G Hilfe: Werte sind alle x2 (oder mehr) nach JOIN Datenbankprogrammierung 13
J Alle Spalten und Zeilen eines ResultSets ausgeben ? Datenbankprogrammierung 2
clemson [SQL] Abfrage --> alle Gruppen, ohne MailConfig Datenbankprogrammierung 10
R JDBC-ODBC: Alle ODBC-Datenquellen ermitteln? Datenbankprogrammierung 4
B Möglichkeit an alle ODBC Namen zu kommen? Datenbankprogrammierung 4

Ähnliche Java Themen

Neue Themen


Oben