# Tastendruck simulieren | SendKeys



## Hutmacher (1. Apr 2009)

In VB.NET gibt es die SendKeys-Methode, die einen Tastaturanschlag simuliert.

Für ein kleines Spaßprogramm für die übermorgige LAN wollte ich ein kleines Programm erstellen, welches alle 5 Minuten die Windows-taste drückt ^^

Aber wie realisiere ich, dass der Druck simuliert wird?

PS: Gibt es in Java irgendwie einen JTimer? ;P


----------



## Der Müde Joe (1. Apr 2009)

Robot (Java Platform SE 6)
Timer (Java Platform SE 6)

EDIT:
optimal natürlich
Quartz - Quartz Overview
..aber wenig heftig für dein vorhaben


----------



## 0x7F800000 (1. Apr 2009)

Hutmacher hat gesagt.:


> In VB.NET gibt es die SendKeys-Methode, die einen Tastaturanschlag simuliert.


In java instanziiere man ein exemplar der Klasse Robot (einfach ein leerer Konstruktor, nichts zu beachten) und rufe dann die Methoden keyPress() und keyRelease() auf.



> PS: Gibt es in Java irgendwie einen JTimer? ;P


Let me google that for you

Allerdings finde ich die Klasse irgendwie unnötig, mach einen stinknormalen Thread der alle fünf Minuten auf diese komische Taste drückt, und gut ist.

[edit] Ich sehe: man kann's auch anders sehen^^ 


> optimal natürlich
> Quartz - Quartz Overview
> ..aber wenig heftig für dein vorhaben


[/edit]
Übrigens: da java so BS-unabhängig ist.... Was ist da die "windows-taste" denn? ???:L


----------



## Der Müde Joe (1. Apr 2009)

>Was ist da die "windows-taste" denn? 

Bei mir heissen die: Super R und Super L ;-)

EDIT:
>Ich sehe: man kann's auch anders sehen^^ 

Sollte mehr eine Info sein, was es alles noch so gibt im grösseren Stil


----------



## Hutmacher (1. Apr 2009)

Und wie mache ich einen Thread, der alle 5 Minuten reagiert?
(ich habe mir so eine vage Klasse erstellt :bahnhof

Übrigens zum Robot ... nichts zu beachten?^^






Hierzu steht in der API:


> Note that some platforms require special privileges or extensions to access low-level input control. If the current platform configuration does not allow input control, an AWTException will be thrown when trying to construct Robot objects.



Und was soll ich jetzt machen????:L


*EDIT:*
Um noch einen draufzusetzen:




Wieso geht das schon wieder nicht?


----------



## 0x7F800000 (1. Apr 2009)

________________________________________________________________________________________




________________________________________________________________________

 Noch nicht mal mit dem kapitel über Exceptions durch, aber erstmal mit Robots und Threads rumballern oder wie?:autsch:


----------



## Hutmacher (1. Apr 2009)

Wtf >.<
Sorry, das kommt davon, wenn man X Seiten Theorie macht und dann proggt ...
Das heißt also, ich könnte gleich die ganze run-Methode in try-catch-Blöcke setzen ... verdammt, ich hasse die.

Der letztendlich funktionierende Code, falls es jemanden interessieren sollte, ist:
[HIGHLIGHT="Java"]import java.awt.Robot;
import java.awt.event.KeyEvent;

public class Main
{
	public static void main(String[] args)
	{
		Thread t1 = new WindowsKeySenderThread(5000);
		t1.start();
	}
}

class WindowsKeySenderThread extends Thread
{
	private static final short windowsTaste= KeyEvent.VK_WINDOWS; //Klassenvariablen
	private int interval; //Instanzvariablen

	WindowsKeySenderThread(int interval) //Konstruktor
	{
		this.interval = interval;
	}

	public void setInterval(int interval) //Setter & Getter
	{
		this.interval = interval;
	}
    public int getInterval()
    {
    	return this.interval;
    }

    @Override
    public void run()
    {
    	try 
    	{
			Robot keySender = new Robot();
			keySender.keyPress(windowsTaste);
			keySender.keyRelease(windowsTaste);

			sleep(this.getInterval());

			run(); //Rekursive Wiederholung
		} 
    	catch (Exception e) 
		{
    		System.out.print(e);
		}
    }
}[/HIGHLIGHT]


----------



## musiKk (1. Apr 2009)

Mach mal die "rekursive Wiederholung" weg und lieber ein while oder sowas drum. Sieht sehr funktional aus, aber Java hat keine Endrekur... ach egal, einfach weg.
Die Robot-Klasse hat übrigens ein eingebautes sleep. Das heißt da nur delay.


----------



## 0x7F800000 (2. Apr 2009)

Hutmacher hat gesagt.:


> //Rekursive wiederholung


Ich mag deklarative/funktionale sprachen auch, aber sowas hat in java wirklich nichts verloren :noe: Meisten Compiler unterstützen wirklich keine Endrekursion, da hat musiKk vollkommen recht. Aber auch einfach nur weil man in Java mit solchen Stunts nicht rechnet, wäre es schon "schlechter codestil", der den sinn verschleiert.


----------



## diggaa1984 (2. Apr 2009)

frag mich nur warum man das auf ner LAN will ... hast bestimmt noch n Parameter den du auf deinem Rechner beim Aufruf mitgibst, der genau dann nicht diese Events triggern lässt .. und alle andern müssen sich damit rumschlagen ... als Tarnmantel steckst noch irgendne komische Funktionalität rein (Stoppuhr oder so ^^). Und immer wenn bei denen der Desktop aufblitzt, springst du um die Ecke und erledigst gemäß Gaming-Convention deine Widersacher, welche dann grad mal 5s still stehen ???:L

Wann das soweit ist, hörst ja dann aum Raunen im Raum :lol:


----------



## 0x7F800000 (2. Apr 2009)

diggaa1984 hat gesagt.:


> frag mich nur warum man das auf ner LAN will ... hast bestimmt noch n Parameter den du bei deinem Rechner beim aufruf mitgibst, der genau dann nicht diese Events triggern lässt .. und alle andern müssen sich damit rumschlagen ... als Tarnmantel steckst noch irgendne komische Funktionalität rein (Stoppuhr oder so ^^). Und immer wenn bei denen der Desktop aufblitzt, springst du um die Ecke und erledigst gemäß Gaming-Convention deine Widersacher, welche dann grad mal 5s still stehen?! :lol:


sowas ist schon extrem tödlich  habe aus diesem grund früher immer diese verfluchten windows-tasten aus den tastaturen rausgerissen. Ebenso die "power"-taste, die ich mal auf einer tastatur hatte... War auch noch direkt neben der Screenshot-taste :autsch: 
_"Yuhu, ein glänzender Sieg, mach ich nochmal schnell ein Screenshot bevor das spiel zu ende ist"_-...pc fährt runter...-_"öhm? O_O "_-...-_"wtf? Ò_ó "_

...schon gut mitgedacht, wer auch immer die tastatur entworfen hat :autsch:


----------



## diggaa1984 (2. Apr 2009)

jo hab bei mir auch gaaaaanz rechts oben nen "suspend"-knopf .. meist bin ich da beim getränk abstellen hängen geblieben .. blub rechner geht in standby 
fatal-fail


----------



## Hutmacher (2. Apr 2009)

Verspätetes April-Paril … ^^


----------

