Der Mouse-Wiggler

Der Mouse-Wiggler

Auch schon einmal geärgert, wenn man in einem Meeting sitzt, Teams auf "nicht stören" gestellt hat... und dann kommt dennoch ein Anruf durch?

Ich habe inzwischen oft bemerkt, dass Teams den Status auf "abwesend" setzt, wenn man den Rechner eine Weile nicht benutzt, weil man vielleicht am Telefon ist. Das ist grundsätzlich in Ordnung. Wenn es Leute davon abhalten würde, nicht trotzdem einen Anruf zu probieren.

Wenn sich der Status jedoch von "nicht stören" auf "abwesend" ändert, wird man dennoch wieder gestört.

Dieser Status wird über alle angemeldeten Systeme propagiert. Also auch zum Smartphone, mit dem man ja im Meeting sitzt. Wie kann man nun den gesetzten Status aufrecht erhalten?

Aktivität ist wichtig

Damit der Rechner mithilft, den Status auf dem Smartphone zu erhalten, habe ich folgenden Code für einen Arduino Micro Pro geschrieben:

#include <TimerOne.h>
#include <Mouse.h>

int interval = 100000; // Intervall in Millisekunden (1 Minute = 60.000 Millisekunden)
bool moveRight = true; // Variable zur Bestimmung der Richtung

void setup() {
  Timer1.initialize(interval);
  Timer1.attachInterrupt(moveMouse);
  Mouse.begin();
}

void loop() {
  // Der eigentliche Code wird im Timer-Interrupt ausgeführt
}

void moveMouse() {
  // Maus um einen Pixel nach rechts oder links bewegen, je nach Richtung
  if (moveRight) {
    Mouse.move(1, 0);
    moveRight = false; // Richtung umkehren
  } else {
    Mouse.move(-1, 0);
    moveRight = true; // Richtung umkehren
  }
}

Der vorliegende Arduino-Code verwendet die TimerOne-Bibliothek, um eine Mausbewegung in regelmäßigen Intervallen durchzuführen. Er macht im Prinzip folgendes:

  1. TimerOne-Bibliothek: Die Zeilen #include <TimerOne.h> und Timer1.initialize(interval); zeigen, dass die TimerOne-Bibliothek verwendet wird, um einen Timer-Interrupt einzurichten. Dieser Timer löst alle interval Millisekunden die Funktion moveMouse aus.
  2. Mouse-Bibliothek: Die Zeile #include <Mouse.h> zeigt, dass die Maus-Bibliothek verwendet wird, um die Mausbewegung zu steuern.

Variablen:

  • int interval = 100000;: Die Variable interval bestimmt das Zeitintervall in Millisekunden, nach dem die Funktion moveMouse aufgerufen wird. In diesem Fall ist es auf 10.000 Millisekunden (10 Sekunden) eingestellt.
  • bool moveRight = true;: Diese Variable wird verwendet, um die Richtung der Mausbewegung zu bestimmen. Wenn moveRight true ist, bewegt sich die Maus nach rechts, sonst nach links.

setup():

  • Timer1.initialize(interval);: Der Timer wird initialisiert und auf das angegebene Intervall gesetzt.
  • Timer1.attachInterrupt(moveMouse);: Die Funktion moveMouse wird dem Timer als Interrupt-Service-Routine (ISR) zugeordnet.
  • Mouse.begin();: Die Maus wird initialisiert.

loop():

  • Die loop()-Funktion ist leer, da der eigentliche Code in der Timer-Interrupt-Funktion moveMouse() ausgeführt wird.

moveMouse():

  • Diese Funktion wird alle interval Millisekunden aufgerufen.
  • Die Maus wird um einen Pixel nach rechts oder nach links bewegt, abhängig von der aktuellen Richtung (durch die Variable moveRight bestimmt).
  • Die Richtung wird nach jeder Bewegung umgekehrt, um die Maus abwechselnd nach rechts und links zu bewegen.

Zusammengefasst bewegt dieser Code die Maus alle 10 Sekunden um einen Pixel nach rechts und dann wieder nach links. Durch Verwendung der Interrupt-Steuerung kann die CPU die meiste Zeit schlafen, und verbraucht dadurch weniger Energie (als ob das hier eine Rolle spielen würde, ich weiß ;-) ).

Die nötige Hardware hatte ich vor vielen Jahren bereits für Brute-Force Angriffe lieben gelernt, als ich damit eine Tastatur emulierte. Wer den Arduino nicht bei Aliexpress bestellen möchte, findet ihn auch bei Amazon.

Wenn man den oben gezeigten Sketch mit der Arduino-IDE auf den Micro-Pro geschoben hat, wird dieser umgehend zur Maus und der Rechner bleibt aktiv.

Fazit

Endlich bleibt das Smartphone in Meetings stumm und man kann am Arbeitsplatz-Rechner arbeiten, ohne vom Büro-PC bei konzentrierter Arbeit gestört zu werden.

Eigentlich hatte ich dieses Projekt gestartet, um einen Rechner daran zu hindern den Bildschirmschoner zu starten. Dies war zur forensischen Analyse gelegentlich erforderlich, denn die Verdächtigen versuchen oft schnell noch den Rechner abzuschalten oder zu sperren.

Wenn man dieses Projekt umsetzt, sollte man daher daran denken, dass sich der Rechner nicht mehr von selbst sperren kann :-)