Hallo,
ich hatte dies in meinem vorherigen Thread schon einmal angesprochen:
Ich hatte anfangs ein Programm gebaut, das aus einer Klasse mit über 700 Zeilen Code bestand.
Weil unübersichtlich wie nochwas, habe ich es anschließend unterteilt in 8 Klassen wie später folgend.
"Realspiel" ist die Hauptklasse, deren main methode auch in der Konsole ausgeführt wird.
Alle anderen Klassen haben, wie ersichtlich, nur static Methoden, die in der Hauptmethode aufgerufen werden
und die aber Attribute des Realspiel objekts ändern sollen.
Da sie dazu auf das objekt zugreifen können müssen, wird derzeit mit vielen "this" das Objekt an die aufgerufene Methode übergeben.
Randbemerkung: Dass die imports derzeit nciht sinnhaft sind, ist mir klar, ich muss die mal noch verteilen und in der klasse die import sachen einfügen die benötigt werden.
Ausser den Klassen gibt es noch eine exceldatei, die eingelesen wird.
Beim Aufrufen der konsole wird übrigens eine ebenso vorhandene .jar datei benutzt (auf faulem wege setze ich einfach den classpath auf die datei, bevor ich die ganzen klassen kompiliere und die realspielklassen main methode ausführe).
Bei dem Ganzen geht es drum dass der Browser mit einer bestimmten Casinoseite geöffnet wird, eingeloggt wird und dann rinse and repeat runde für runde immr weder dieselbe strategie angewandt wird.
An bestimmten punkten in der Endlosschleife (wenn gerade leergedreht wurde, wenn gerade gewonnen wurde) wird ein zeitcheck gemacht und wenn die vergangene zeit größer 51 minuten ist, wird abgebrochen durch schließen von browser und konsole.
Hier nun die Klassen, mein hauptanliegen ist die grundsätzliche OOP Programmierung des Ganzen, an der sich ja scheinbar die Geister scheiden...
Die Hauptklasse Realspiel:
Die anderen 7 "Hilfsklassen":
Nun darf gerne das Maul zerrissen werden wie mies der Code ist :-D
ich hatte dies in meinem vorherigen Thread schon einmal angesprochen:
Ich hatte anfangs ein Programm gebaut, das aus einer Klasse mit über 700 Zeilen Code bestand.
Weil unübersichtlich wie nochwas, habe ich es anschließend unterteilt in 8 Klassen wie später folgend.
"Realspiel" ist die Hauptklasse, deren main methode auch in der Konsole ausgeführt wird.
Alle anderen Klassen haben, wie ersichtlich, nur static Methoden, die in der Hauptmethode aufgerufen werden
und die aber Attribute des Realspiel objekts ändern sollen.
Da sie dazu auf das objekt zugreifen können müssen, wird derzeit mit vielen "this" das Objekt an die aufgerufene Methode übergeben.
Randbemerkung: Dass die imports derzeit nciht sinnhaft sind, ist mir klar, ich muss die mal noch verteilen und in der klasse die import sachen einfügen die benötigt werden.
Ausser den Klassen gibt es noch eine exceldatei, die eingelesen wird.
Beim Aufrufen der konsole wird übrigens eine ebenso vorhandene .jar datei benutzt (auf faulem wege setze ich einfach den classpath auf die datei, bevor ich die ganzen klassen kompiliere und die realspielklassen main methode ausführe).
Bei dem Ganzen geht es drum dass der Browser mit einer bestimmten Casinoseite geöffnet wird, eingeloggt wird und dann rinse and repeat runde für runde immr weder dieselbe strategie angewandt wird.
An bestimmten punkten in der Endlosschleife (wenn gerade leergedreht wurde, wenn gerade gewonnen wurde) wird ein zeitcheck gemacht und wenn die vergangene zeit größer 51 minuten ist, wird abgebrochen durch schließen von browser und konsole.
Hier nun die Klassen, mein hauptanliegen ist die grundsätzliche OOP Programmierung des Ganzen, an der sich ja scheinbar die Geister scheiden...
Die Hauptklasse Realspiel:
Java:
import java.util.HashMap;
import java.util.Map;
import java.util.Iterator;
import java.util.Set;
import java.awt.event.InputEvent;
import java.awt.Color;
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.PointerInfo;
import java.awt.Robot;
import java.lang.*;
//Kram für robot und Farbablesen
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.io.*;
import java.awt.Rectangle;
import java.awt.Dimension;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferByte;
import java.io.IOException;
import javax.imageio.ImageIO;
public class Realspiel {
int LeerDrehen=7;
final long ScriptStartTime = System.nanoTime();
long CurrTimeStamp=ScriptStartTime;
int winnings=0;
int betet=0;
int betft=0;
String betcolor=null;
String[] Colors=new String[16]; //Array der letzten 16 gezogenen Farben
public int NewIndex=15;//index of the last drawn color
int[] et,ft; //nächste Einsätze et=Farbe, ft=Null
int[] einsbut={10,50,100,200,500,1000,2500,5000,10000,50000,100000};
//entspricht {0.1,0.5,1,2,5,10,25,50,100,500,1000}; in Cents
Robot bot = new Robot();
long dummyTime=0;
Map EZP = new HashMap(); //einsätze->index
Map VTK = new HashMap(); //index->einsätze
int currwheelpos=2;//left most position of the visible wheel right now, 5 pos visible at once
public static void main(String[] args)throws AWTException, InterruptedException, Exception{
//Disbale scaling??
//System.setProperty( "sun.java2d.uiScale", "1.0" );
//Start Timetracking
Realspiel a=new Realspiel();
}
public Realspiel() throws InterruptedException, AWTException, Exception{
et=new int[17];
ft=new int[17];
LoginLogout.preparations(this);
System.out.println("Vorbereitungen komplett!");
TimeFunctions.TimeInfo(this);
Thread.sleep(3000);
run();
}
public void run() throws InterruptedException, AWTException, Exception{
while(true){
RundenManagement.EineRunde(this);
}
}
}
Die anderen 7 "Hilfsklassen":
Java:
public class Klickmanagement{
//Alles was Klicken angeht
//Hilfsfunktion
//fertig
public static void einsatzclick(Realspiel respi, int pos) throws Exception{
int diff=pos-respi.currwheelpos;
if((diff<0)&&(respi.currwheelpos==respi.einsbut.length-5)){
Click("linksdreh");
//Linksdreh;
respi.currwheelpos--;
diff++;
}
while((respi.currwheelpos<respi.einsbut.length-5)&&(diff!=0)){
if(diff<0){
Click("linksdreh");
//Linksdreh;
respi.currwheelpos--;
diff++;
}
if(diff>0){
Click ("rechtsdreh");
//Rechtsdreh;
respi.currwheelpos++;
diff--;
}
}
diff=pos-respi.currwheelpos;//now diff tells us which of the buttons 0-4 should be used
Click("eins"+diff);
}
public static void Click(Realspiel respi, String a) throws Exception{
int x=0;
int y=0;
switch(a){
case "linksdreh":
x=570;y=675;
break;
case "rechtsdreh":
x=950;y=675;
break;
case "eins0":
x=630;y=675;
break;
case "eins1":
x=695;y=675;
break;
case "eins2":
x=760;y=675;
break;
case "eins3":
x=825;y=675;
break;
case "eins4":
x=890;y=675;
break;
case "R"://rot
x=995;y=460;
break;
case "S"://schwarz
x=1010;y=615;
break;
case "Z"://null
x=350;y=530;
break;
case "del"://Einatz löschen
x=1110;y=675;
break;
case "dreh"://drehen button
x=1207;y=680;
break;
default:
System.out.println("Default Case erreicht!");
throw new Exception("We somehow got into the Click default case! This was the input: "+a+" !");
}
//add random offset
x=x+((int) (Math.random() * 7-3));
y=y+((int) (Math.random() * 7-3));
//hier eigentlichen click ausführen
respi.bot.mouseMove(x, y); //ggbfls. mit custom funktion ersetzen
respi.bot.delay(100);
respi.bot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
respi.bot.delay(100);
respi.bot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
//System.out.println("string a="+a+"; x="+x+"; y="+y);
Thread.sleep(100);
}
}
Java:
import java.io.File;
import java.io.IOException;
import org.jopendocument.dom.spreadsheet.MutableCell;
import org.jopendocument.dom.spreadsheet.Sheet;
import org.jopendocument.dom.spreadsheet.SpreadSheet;
public class ExcelReader{
// Alles zum Einlesen der Exceldatei
//Ab hier ODS Kram (Einsätze aus Openoffice Tabelle ablesen)
//#GameVorbereitung
public static void EinsaetzeEinlesen(Realspiel respi){
File file = new File("C:\\Users\\blablabla\\Exceldateiname.ods");
Sheet sheet;
try {
//Getting the 0th sheet for manipulation| pass sheet name as string
sheet = SpreadSheet.createFromFile(file).getSheet(0);
//Get row count and column count
int nColCount = sheet.getColumnCount();
int nRowCount = sheet.getRowCount();
System.out.println("Rows :"+nRowCount);
System.out.println("Cols :"+nColCount);
//Iterating through each row of the selected sheet
MutableCell cell = null;
//bei 7 mal leerdrehen
for (int i=0;i<respi.Leerdrehen;i++){
respi.et[i]=0;
respi.ft[i]=0;
}
for(int i=respi.Leerdrehen;i<17;i++){
cell = sheet.getCellAt(3, i-respi.Leerdrehen+3);
respi.et[i]=(int)(100*Double.parseDouble((cell.getValue()+"")));
cell = sheet.getCellAt(4, i-respi.Leerdrehen+3);
respi.ft[i]=(int)(100*Double.parseDouble((cell.getValue()+"")));
}
} catch (IOException e) {
e.printStackTrace();
}
return;
}
}
Java:
public class TimeFunctions{
// Alles rund um Zeitchecks und Sleeping
public static void TimeInfo(Realspiel respi){
long diff=System.nanoTime()-respi.CurrTimeStamp;
int milliseconds = (int) (diff / 1000000.0);
System.out.println("About "+milliseconds+" milliseconds have passed since the last time we checked!");
return;
}
public static void sleeptilltarget(long ScriptStartTime, long targetmilliTime){
long tosleep=1000000*targetmilliTime-(System.nanoTime()-ScriptStartTime);
if(tosleep>10000000){//10 milliseconds
try{
long millis= (long) (tosleep / 1000000.0);
Thread.sleep(millis);
}
catch(Exception e){}
}
return;
}
}
Java:
public class RundenManagement{
//Managed Alles was in einer Runde passiert
public static void EineRunde(Realspiel respi) throws Exception{
RundebisDreh(respi);
try{
Thread.sleep(2200);
}
catch (Exception e){}
respi.CurrTimeStamp=System.nanoTime();
//WarteBisDrehEnde();
DoUpdatesAfterRoll(respi);
System.out.println("Die Gewinne betragen nach dieser Runde insgesamt "+respi.winnings+" Cent!");
TimeFunctions.TimeInfo(respi);
}
public static void RundebisDreh(Realspiel respi) throws InterruptedException, AWTException, Exception{
respi.CurrTimeStamp=System.nanoTime();
//einsätze für aktuelle runde auffarbfelder und null platzieren
//einsätze leeren sicherheitshalber
int l=ColorManagement.GetStreakLength(respi);
String color="R";
if(ColorManagement.getCurrColor(respi).equals("R")){color="S";}//only change color if it is red
respi.betcolor=color;
int etemp= respi.et[l];
int ftemp= respi.ft[l];
respi.betet=etemp;
respi.betft=ftemp;
//nur für Testzwecke eingefügt, wieder löschen!!!!
//etemp=290;
//ftemp=120;
System.out.println("Einsätze für diese Runde sind: Farbe="+etemp+", Null="+ftemp);
//bet on zero with ftemp
// bet with etemp on the opposite of what col is
//dont bet at all if etemp and ftemp are equal to zero, aka their product is zero
//einsätze leeren
Klickmanagement.Click(this,"del");
//falls es eine nullrunde ist
if(etemp*ftemp==0){
//rollbutton klicken
Klickmanagement.Click(this,"dreh");
LoginLogout.TimeEndGameCheck(respi);
return;
}
//place the bets and press the roll button
int temp=0;
System.out.println("etemp="+etemp+", ftemp="+ftemp+", temp="+temp);
TimeFunctions.TimeInfo(respi);
for(int i=respi.einsbut.length-1;i>=0;i--){
temp=Integer.parseInt (respi.VTK.get(i)+"");
//System.out.println("Vor einsatzclick!");
//click einsatzclick(i)
if((etemp>=temp)||(ftemp>=temp)){
Klickmanagement.einsatzclick(this,i);
}
else{
continue;
}
//System.out.println("Nach einsatzclick!");
while(etemp>=temp){
//farbe klicken
//System.out.println("etemp Schleife!");
Klickmanagement.Click(this,color);
etemp=etemp-temp;
//System.out.println("Placed "+temp+" on "+color+"!");
//System.out.println("etemp now only "+etemp);
}
while(ftemp>=temp){
//null klicken
Klickmanagement.Click(this,"Z");
ftemp=ftemp-temp;
//System.out.println("Placed "+temp+" on Z!");
//System.out.println("ftemp now only "+ftemp);
}
}
if(etemp*ftemp!=0){
System.out.println("Something went horribly wrong while placing the bets!");
}
TimeFunctions.TimeInfo(respi);
Klickmanagement.Click(respi,"dreh");
TimeFunctions.sleeptilltarget(respi.CurrTimeStamp,3000);
Thread.sleep(300);
}
public static void DoUpdatesAfterRoll(Realspiel respi) throws InterruptedException{
ColorManagement.addColor(respi,ColorManagement.GetResult(respi));
//do the winning math
String a=ColorManagement.getCurrColor(respi);
respi.winnings=respi.winnings-respi.betet-respi.betft;
if(a.equals("Z")){
respi.winnings=respi.winnings+36*respi.betft;
System.out.println("Gewonnen mit Z und "+(35*respi.betft)+" Gewinn!");
TimeFunctions.TimeInfo(respi);
LoginLogout.TimeEndGameCheck(respi);
}
else if((a.equals(respi.betcolor))){
respi.winnings=respi.winnings+2*respi.betet;
System.out.println("Gewonnen mit "+respi.betcolor+" und "+respi.betet+" Gewinn!");
TimeFunctions.TimeInfo(respi);
LoginLogout.TimeEndGameCheck(respi);
}
TimeFunctions.sleeptilltarget(respi.CurrTimeStamp,2500);
}
}
Java:
public class Hilfskram{
public static void PrintEinsaetze(Realspiel respi){
for(int i=0;i<respi.et.length;i++){
System.out.println();
System.out.println();
System.out.println("et["+i+"]="+respi.et[i]+", ft["+i+"]="+respi.ft[i]);
System.out.println();
System.out.println(); }
}
private static String toString(long nanoSecs) {
int minutes = (int) (nanoSecs / 60000000000.0);
int seconds = (int) (nanoSecs / 1000000000.0) - (minutes * 60);
int millisecs = (int) ( ((nanoSecs / 1000000000.0) - (seconds + minutes * 60)) * 1000);
if (minutes == 0 && seconds == 0)
return millisecs + "ms";
else if (minutes == 0 && millisecs == 0)
return seconds + "s";
else if (seconds == 0 && millisecs == 0)
return minutes + "min";
else if (minutes == 0)
return seconds + "s " + millisecs + "ms";
else if (seconds == 0)
return minutes + "min " + millisecs + "ms";
else if (millisecs == 0)
return minutes + "min " + seconds + "s";
return minutes + "min " + seconds + "s " + millisecs + "ms";
}
}
Java:
public class ColorManagement{
public static void initColors(Realspiel respi){
for(int i=0;i<respi.Colors.length;i++){
respi.Colors[i]="U";
}
}
//fertig
public static void addColor(Realspiel respi,String color){
respi.NewIndex= (respi.NewIndex>=1) ? (respi.NewIndex-1) : (respi.NewIndex+respi.Colors.length-1);
respi.Colors[respi.NewIndex]=color;
}
//fertig
public static String getCurrColor(Realspiel respi){
return respi.Colors[respi.NewIndex];
}
//fertig?
public static int GetStreakLength(Realspiel respi){
int length=0;
String a=getCurrColor(respi);
int index=respi.NewIndex;
if(a.equals("U")){
return 0;
}
while(length<respi.Colors.length){
//indexnext=(index+1) mod 16;
if(respi.Colors[index].equals(a)){
length++;
}
else{
break;
}
index=(index<=respi.Colors.length-2) ? (index+1) : (index-respi.Colors.length+1);
}
return length;
}
//fertig?
//Farbe von Bildschirm ablesen
public static String GetResult(Realspiel respi) throws InterruptedException {
respi.CurrTimeStamp=System.nanoTime();
String res="U";
for(int i=0;i<300;i++){
res=ResultHelp(respi);
if(!(res.equals("U"))){
System.out.println("Farbe "+res+" erkannt!");
TimeFunctions.TimeInfo(this);
return res;
}
Thread.sleep(10);
}
System.out.println("Error in getResult!Nach 300 Versuchen nichts gefunden!");
return "";
}
public static String ResultHelp(Realspiel respi) throws InterruptedException{
//BufferedImage img = bot.createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
//final byte[] pixels = ((DataBufferByte) image.getRaster().getDataBuffer()).getData();
//final int width = img.getWidth();
//final int height = img.getHeight();
//final boolean hasAlphaChannel = image.getAlphaRaster() != null;
int R=0;
int G=0;
int B=0;
Color color=null;
//final int pixelLength = hasAlphaChannel?4:3;
//final int fac=pixelLength-3;
//int x=1370;
//int y=105;
//1200,210 bis 1236,210
for(int x=1200, y=210; x<=1236;x++){
color = respi.bot.getPixelColor(x,y);
// System.out.println("x="+x+"; y="+y+"; green="+color.getGreen()+"; blue="+color.getBlue()+"; red="+color.getRed());
//color = img.getRGB(x, y);
B=color.getBlue();
G=color.getGreen();
R=color.getRed();
// Components will be in the range of 0..255:
//B = color & 0xff;
//G = (color & 0xff00) >> 8;
//R = (color & 0xff0000) >> 16;
/*
int pixel=y*(width*pixelLength)+x*pixelLength;
B= ((int) pixels[pixel + fac] & 0xff); // blue
G= (((int) pixels[pixel + fac+1] & 0xff) << 8); // green
R= (((int) pixels[pixel + fac+2] & 0xff) << 16); // red
*/
if(B>=80){
//TimeFunctions.TimeInfo(this);
return "S";
}
else if(R>=80){
//TimeFunctions.TimeInfo(this);
return "R";
}
else if(G<80){
//Fall ohne Treffer
continue;
}
else{
//TimeFunctions.TimeInfo(this);
return "Z";
}
//1370,105 bis 1418,105
//RGB alle unter 30->nichts
//R>80, bg<80->rot
//rgb alle >80->schwarz aka B>80
//g>80, br<80->Null
}
return "U";
}
public static void PrintColors(Realspiel respi){
int length=0;
int index=respi.NewIndex;
String colors="";
while(length<respi.Colors.length){
colors=colors+respi.Colors[index]+" ";
index=(index+1<=respi.Colors.length-1) ? (index+1) : (index-respi.Colors.length+1);
length++;
}
System.out.println("aktuelle Farben: "+colors);
}
}
Java:
//for opening Browser
import java.lang.Runtime;
public class LoginLogout{
// Alles was vor dem eigentlichen Spiel oder danach passiert
/********************************
Ab hier Vorbereitungen***********
*********************************/
public static void preparations(Realspiel respi)throws InterruptedException, AWTException, Exception{
respi.CurrTimeStamp=System.nanoTime();
ColorManagement.initColors(this);
ExcelReader.EinsaetzeEinlesen(this);
einsaetzeposprep(this);
openbrowser(this);
//Do Login
LoginCheck(this);
TimeFunctions.sleeptilltarget(CurrTimeStamp,40000);
}
//#GameVorbereitung
public static void einsaetzeposprep(Realspiel respi){//bei Spielstart alle möglichen Einsätze hinterlegen
for(int i=0;i<respi.einsbut.length;i++){
respi.EZP.put(respi.einsbut[i],i);
respi.VTK.put(i,respi.einsbut[i]);
}
/*
EZP.put(0.1,0);
EZP.put(0.5,1);
EZP.put(1,2);
EZP.put(2,3);
EZP.put(5,4);
EZP.put(10,5);
EZP.put(25,6);
EZP.put(50,7);
EZP.put(100,8);
EZP.put(500,9);
EZP.put(1000,10);
*/
}
/********************************
Ab hier Loginkram****************
*********************************/
//Browser öffnen
//GameVorbereitung
public static void openbrowser(Realspiel respi){//Browser öffnen duh
respi.CurrTimeStamp=System.nanoTime();
try{
String[] a=new String[]{"cmd", "/c","start chrome https://geilecasinoschlampen.com"};
//String[] a=new String[]{"cmd", "/c","start chrome"};
Runtime.getRuntime().exec(a);
TimeFunctions.sleeptilltarget(respi.CurrTimeStamp,6000);
}
catch(Exception e){
}
}
public static void Login(Realspiel respi){
try{
//Passwort eingeben
int x=760+((int) (Math.random() * 7-3));
int y=476+((int) (Math.random() * 7-3));
//klick in passwortfeld
respi.bot.mouseMove(x, y);
respi.bot.delay(100);
respi.bot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
respi.bot.delay(100);
respi.bot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
Thread.sleep(100);
//alte Eingabe löschen
//select all
respi.bot.keyPress(KeyEvent.VK_CONTROL);
respi.bot.delay(100);
respi.bot.keyPress(KeyEvent.VK_A);
respi.bot.keyRelease(KeyEvent.VK_A);
respi.bot.delay(100);
respi.bot.keyRelease(KeyEvent.VK_CONTROL);
respi.bot.delay(100);
//delete content
respi.bot.keyPress(KeyEvent.VK_DELETE);
respi.bot.keyRelease(KeyEvent.VK_DELETE);
respi.bot.delay(100);
//enter new passwort
//hier wird Passwort eingegeben, aus offensichtlichen gründen gelöscht
//passwort=ShrekIsLoveShrekIsLife
//login Button anklicken
x=770+((int) (Math.random() * 7-3));
y=580+((int) (Math.random() * 7-3));
respi.bot.mouseMove(x, y);
respi.bot.delay(100);
respi.bot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
respi.bot.delay(100);
respi.bot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
Thread.sleep(100);
}
catch(Exception e){
}
TimeFunctions.sleeptilltarget(respi.CurrTimeStamp,5000);
}
public static void LoginCheck(Realspiel respi){
respi.CurrTimeStamp=System.nanoTime();
try{
Thread.sleep(2000);
}
catch(Exception e){}
//check if login needed
Color color=respi.bot.getPixelColor(120,115);
int B=color.getBlue();
int G=color.getGreen();
int R=color.getRed();
if(B<100&&G<100&&R<100){
Login(respi);
}
return;
}
/********************************
Ab hier EndGame Kram*************
*********************************/
public static void TimeEndGameCheck(Realspiel respi) {
long diff=System.nanoTime()-respi.ScriptStartTime;
int minutes = (int) (diff / 60000000000.0);
if(minutes>=51){
System.out.println("minutes="+minutes);
//End It All!
DoEndGameStuff(respi);
}
return;
}
public static void DoEndGameStuff(Realspiel respi){
//switch to other window
/*
try
{
bot.keyPress(KeyEvent.VK_ALT);
bot.delay(300);
bot.keyPress(KeyEvent.VK_TAB);
bot.delay(300);
bot.keyRelease(KeyEvent.VK_TAB);
bot.delay(300);
bot.keyRelease(KeyEvent.VK_ALT);
bot.delay(300);
}
catch(Exception exception){}
*/
//close chrome window
//automatically switches focus to console afterwards
try
{
respi.bot.keyPress(KeyEvent.VK_ALT);
respi.bot.delay(300);
respi.bot.keyPress(KeyEvent.VK_F4);
respi.bot.delay(300);
respi.bot.keyRelease(KeyEvent.VK_F4);
respi.bot.delay(300);
respi.bot.keyRelease(KeyEvent.VK_ALT);
respi.bot.delay(300);
}
catch(Exception exception){}
//close script via closing cmd
try
{
respi.bot.keyPress(KeyEvent.VK_ALT);
respi.bot.delay(300);
respi.bot.keyPress(KeyEvent.VK_F4);
respi.bot.delay(300);
respi.bot.keyRelease(KeyEvent.VK_F4);
respi.bot.delay(300);
respi.bot.keyRelease(KeyEvent.VK_ALT);
respi.bot.delay(300);
}
catch(Exception exception){}
//now both chrome and this script are gone and done
}
}
Nun darf gerne das Maul zerrissen werden wie mies der Code ist :-D