Programm auf Computer starten

uxomm:
Um eine Datei auf einem (Windows-) PC mithilfe eines Arduino Micro (oder Leonardo), der sich als HID (Tastatur) "ausgibt" zu starten gibt es mehrere Möglichkeiten. Hier 2 davon:

1. Dateiname mit Arduino übertragen
Eine (zum Beispiel) Bat-Datei kann über die "Windows-Run-Anweisung" (WinTaste + R) direkt aufgerufen werden. Allerdings stößt man beim Übergeben eines Dateipfades auf ein paar kleine Hindernisse.
Aufgerufen werden soll zum Beispiel: C:\meineBatDateien\start.bat

Der Backslash ist in C++ ein Escape-Zeichen und müsste deshalb verdoppelt werden.
Ein Versuch mit folgendem Code funktioniert aber (noch) nicht:

#include <Keyboard.h>

const byte tasterPin = 6;

void setup() {
 Keyboard.begin();
 pinMode(tasterPin, INPUT_PULLUP);
}

void loop() {
 if (!digitalRead(tasterPin)) {           // Taster wurde gedrückt
   Keyboard.press(KEY_LEFT_GUI);     // Windows-Taste
   Keyboard.press('r');
   delay(100);
   Keyboard.releaseAll();
   delay(200);
   Keyboard.print("C:\meineBatDateien\start.bat");
   Keyboard.write(KEY_RETURN);
 }
}



Die Probleme im Dateipfad sind Doppelpunkt und Backslash. Arduino Micro/Leonardo gehen von einem Englischen Tastatur-Layout aus. Wenn aber bei deinem System ein Deutsches Tastatur-Layout eingestellt ist, dann werden weder Doppelpunkt noch Backslasch übertragen sondern andere Zeichen: 
CÖ#meineBatDateien#start.bat

(Hintergrund: Eine Tastatur überträgt ja keine Buchstaben oder Zeichen wie "a, b, c" sondern - vereinfacht ausgedrückt - nur welche Taste gedrückt oder losgelassen wurde. Also etwa "Dritte Taste in der zweiten Reihe wurde hinuntergedrückt". Dein Betriebsystem interpretiert das dann in Verbindung mit dem eingestellten Tastatur-Layout als bestimmtes Zeichen. Im konkreten Fall könnte das ein "Z" sein, bei Layout EN oder ein "Y" bei Layout DE).

Der Doppelpunkt kann bei DE-Tastatur ersetzt werden durch > oder \u003E.
Beim Backslash geht das leider nicht so einfach.
Zwar gibt es Möglichkeiten den Backslash zu erzeugen, aber es geht viel einfacher, denn der Backslash ist gar nicht nötig. 
Windows akzeptiert (~~zumindest seit Windows 8~~ schon ziemlich lange) statt dem Backslash auch den „normalen“ Schrägstrich ( / ) in Dateipfaden. Aber auch dieser Schrägstrich braucht einen Workaround.
Der Schrägstrich kann bei einer DE-Tastatur-Layout ersetzt werden durch & oder \u0026.
Folgendes sollte also funktionieren:



...
Keyboard.press(KEY_LEFT_GUI);   // Windows-Taste
Keyboard.press('r');
delay(100);
Keyboard.releaseAll();
delay(200);
Keyboard.print("C\u003E\u0026meineBatDateien\u0026start.bat");  // Variante a)
// Keyboard.print("C>&meineBatDateien&start.bat");                 // Variante b)
Keyboard.write(KEY_RETURN);
...




Aber es geht noch viel einfacher…
Denn die „Windows-Run-Anweisung“ startet im „Home-Verzeichnis“. Wenn der angemeldetet User etwa „Hans“ heißt, so ist es folgender Pfad:
C:\Users\Hans
Wenn also die zu startende Datei in *diesem* Verzeichnis liegt, so ist eine "ausführliche" Pfadangabe nicht nötig und die Datei kann einfach gestartet werden mit
start.bat


**2. Verknüpfungsoption (Windows Boardmittel)** 

- Den Leonardo/Micro so programmieren, dass eine Tastenkombination erzeugt wird, die von (voraussichtlich) keinem anderen Programm verwendet wird (z.B. Ctrl + Alt + Shift + F1).
- Eine Verknüpfung der auszuführenden Datei (z.B. eine Bat-Datei) erstellen: Rechtsklick, Verknüpfung erstellen.
- Rechtsklick auf die Verknüpfung: Eigenschaften wählen.
- Im Reiter „Verknüpfung“ zum Feld „Tastenkombination“ gehen.
- Die gewünschte Tastenkombination ausführen.
- Bestätigen mit Klick auf OK.

siehe: [Physical Button press to kick off bat file.](https://forum.arduino.cc/index.php?topic=542720.msg3699190#msg3699190)

Hi uxomm,

super vielen vielen Dank für diesen Tipp.
Mit deinem Sketch funktioniert das nun so wie wir das uns vorstellen.

Danke Danke danke....

Gruß,
Tobias