Powershellbefehle werden falsch am PC eingegeben

Hallo Zusammen,

ich bastle gerade an einem kleinen Tool um mir die Arbeit etwas zu erleichtern.

Auf Knopfdruck sollen sämtliche gespeicherte Wifi Passwörter vom PC ausgelesen werden und im EEPRom gespeichert werden. Mit einem Druck auf den nächsten Knopf wird der Inhalt des EEPRom's in eine Textfile gespeichert.

Verwendete Hardware ist eine Arduino Pro Micro 5V, IDE ist 1.8.19.

Mein Problem ist, das die Powershellbefehle falsch am PC eingegeben werden.

 Keyboard.println(F("(netsh wlan show profiles) | Select-String \"\\:(.+)$\" | %{$name=$_.Matches.Groups[1].Value.Trim(); $_} | %{(netsh wlan show profile name=\"$name\" key=clear)}  | Select-String \"Key Content\\W+\\:(.+)$\" | %{$pass=$_.Matches.Groups[1].Value.Trim(); $_} | %{[PSCustomObject]@{ PROFILE_NAME=$name;PASSWORD=$pass }} | Format-Table -AutoSize | Out-String -OutVariable dataCaptured"));

In der Powershell kommt allerdings das hier an:

)netsh wlan show profiles= ' SelectßString Ä#Ö).`=$Ä ' %Ü$name$?.Matches.Groupsü1+.Value.Trim)=ö $?* ' %Ü)netsh wlan show profile nameÄ$nameÄ kez´clear=*  ' SelectßString ÄKez Content#W`#Ö).`=$Ä ' %Ü$pass$?.Matches.Groupsü1+.Value.Trim)=ö $?* ' %ÜüPSCustomObject+"Ü PROFILE?NAME$nameöPASSWORD$pass ** ' FormatßTable ßAutoSiye ' OutßString ßOutVariable dataCaptured
>> $comPort ´))GetßWmiObject ßquerz ÄSELECT ( FROM Win32?PnPEntitzÄ ' Where Ü$?.Name ßMatch ÄCOM#d`Ä*=.name=.Split)ÄCOMÄ=
>> $comPort ´üint+$comPortü$comPort.length ß 1+.replace)Ä=Ä, ÄÄ=
>> $serialObject ´newßObject Szstem.IO.Ports.SerialPort COM$comPort, 9600, None, 8, one
>> $serialObject.Open)=
>> $serialObject.Write)Ä$dataCapturedÄ=
>> $serialObject.close)=
>> exit

Wie Ihr sehen könnt, wird z.b. aus - ein ß oder aus y ein z.
Vermuten tue ich ein Sprach oder Tastaturlayoutproblem.

Ich probiere jetzt schon mehrere Stunden herum, finde aber keine Lösung.

Kann mir von euch eventuell wer weiterhelfen?

Lies mal den Thread

Codepage.
Für das deutsche Layout gibt es diverse Anpassungen.
Kommt drauf an, wie fit Du bist.
https://github.com/BesoBerlin/Arduino-German-Keyboard
https://github.com/MichaelDworkin/Arduino-Leonardo-USB-Keyboard-Deutsch-library
oder was auch immer...

Danke, werde ich gleich ausprobieren.

Gibt es eine Möglichkeit mit Arduino Boardmitteln abzufragen ob DE oder EN Tastatur?

Wenn Du ein z (deutsche Tastatur) sendest und ein y bekommst, ist das ganz sicher nicht DE.
Die beiden Buchstaben sind vertauscht.

Alternativ, könntest Du auch die Scancodes schicken.
Dann brauchst Du keinerlei lib. Für Deine zwei Schalterstellungen evtl. die bessere Variante.

Vielleicht möchtest Du Dich ab hier einlesen. Wir haben da was ganz grosses gebaut.

Meine nein es werden doch nur die Kappen drauf gesetzt, Rest macht Software.
Erste IBM Tastaturen hatten echten Intel8008 verbaut. Heutige nur ein Logik Chip deshalb gibt's die schon ab 10€

Da es sich hier um Windows handelt, wird die Sprache der Tastatur übers OS gehandelt.

Ich dachte eher an so was wie

if(keyboard.languagecode("de_DE"){
deutsche Tastatur
}else{
englische Tastatur
}

Wie macht man das und funktioniert das mit jeder Tastatursprache?

Ja.
Trotzdem werden die Scancodes benutzt.
Deine Tastatur ist ein "dummes" Stück.

Das was Du willst, musst Du in der lib als Auswahlmöglichkeit erweitern. Ginge auch, aber dazu braucht es schon etwas mehr als 3 Zeilen Code :wink:

Ich habe es Dir oben verlinkt. Lesen musst Du selbst.
Wenn Du dazu inhaltliche Fragen hast, dann gerne.

Hab's gefunden.

Dafür bin ich definitiv momentan noch nicht wieder Fit genug punkto Coden.

Ich versuchs erstmal mit der Deutschen Keyboard Bibliothek. Englische Rechner kann ich ja auf Deutsch umstellen, sind nur ja nur eine Handvoll.

Trotzdem Danke für die Hilfe

Andere Variante: Du baust (wenn Du noch einen freien Eingang hast) einen Schalter dran, mit dem der User zwischen beiden Zeichensätzen umschalten kann.

Gruß Tommy

Eingang wäre nicht das Problem.

Das Problem ist eher, das der Pro Micro nicht genügend Speicher hat für alle 6 Knöpfe in 2 Sprachen. Ich bin jetzt schon über 50% Speicher.

Das ist kein Kriterium. Du verwendest ja alles immer wieder, nur in anderer Konstellation.
Der Speicherverbrauch steigt nicht linear zu den verwendeten Codezeilen.
Dieser Code:

void setup()
{
  Serial.begin(115200);
  Serial.println(F("Start..."));
}

void loop()
{

}

verwendet auf nem UNO:

Der Sketch verwendet 1494 Bytes (4%) des Programmspeicherplatzes. Das Maximum sind 32256 Bytes.
Globale Variablen verwenden 188 Bytes (9%) des dynamischen Speichers, 1860 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes.

:slight_smile:

@my_xy_projekt
Ich hab jetzt beide Bibliotheken versucht die du weiter oben verlinkt hast.

Die von BesoBerlin sieht am einfachsten aus. Leider läuft das Pythonscript bzw. die exe Datei endlos ohne die Finish.ino zu generieren.

Hast du zufällig eine Idee wie lange das laufen soll?

Woher? Ich weiss nicht, was Du da versuchst.

Ich hab das sketch in input.ino umbenannt.
Danach habe ich die Datei in den gleichen Ordner wie die Python bzw. .exe Datei kopiert.
Sowohl das Pythonscript als auf die .exe Datei wird beim Aufruf zwar ausgeführt, aber selbst nach einer halben Stunde ist der Vorgang nicht abgeschlossen.

Es gibt keine Fehlermeldung oder dergleichen.

Mir ist bewusst, dass das hier nicht der richtig Platz ist für eine Fehlerhafte Librairy und deren Tools. Ihr habt aber definitiv mehr Erfahrung mit Arduino und allem drumherum.

Und nochmal: Ich habe keine Glaskugel, die ist gerade zur Reinigung.
Zeige Deinen Sketch, wenn Du willst das man Dir hilft.
Ich mache nichts mit python oder sonst welchem Kram.
IDE, Sketch schreiben, kompilieren lassen, aufspielen lassen, geht. Oder eben nicht. Dann Fehler suchen oder anders machen.
Wir sind jetzt bei #16 und bis auf den zu sendenden String sehe ich nichts.

Aso, das hast gemeint, Sorry.

Ich hab den Sketch hochgeladen.

Ist mit Sicherheit nicht der schönste Code.

sketch_sep07a.ino (7,8 KB)

Ich möchte, das Du mal was ausprobierst.
Hole Dir bitte die originale keyboard-lib als zip-File von Github

Dann gehst Du in Deinen Arduino-Ordner. Unter /Arduino-IDE/libraries/ findest Du einen Ordner Keyboard.
Den Ordner einfach mal sichern.
Dann den Inhalt des .zip-Files dorthin entpacken.

Dann einmal probieren, ob der Sketch noch immer kompiliert.
Wenn nicht, dann ist hier Schluß und Du kannst die Sicherung wieder einspielen.
Wenn es geht;

Suche bitte nach der Datei Keyboard.cpp Sie soll unter /Arduino-IDE/libraries/Keyboard/src liegen.
Die wird jetzt in Zeile 23 geändert von:

#include "KeyboardLayout.h"

neu:

#include "Keyboard_de_DE.h"

IDE starten, kompilieren und probieren, was geht.

Habe ich gemacht.

Wenn ich die Library nur einbinde, funktioniert der Code.

Sobald ich den include ändere, kommen diese Fehler:

C:\Program Files (x86)\Arduino\libraries\Keyboard\src\Keyboard.cpp: In member function 'size_t Keyboard_::press(uint8_t)':
C:\Program Files (x86)\Arduino\libraries\Keyboard\src\Keyboard.cpp:106:12: error: 'ALT_GR' was not declared in this scope
   if ((k & ALT_GR) == ALT_GR) {
            ^~~~~~
C:\Program Files (x86)\Arduino\libraries\Keyboard\src\Keyboard.cpp:109:19: error: 'SHIFT' was not declared in this scope
   } else if ((k & SHIFT) == SHIFT) {
                   ^~~~~
C:\Program Files (x86)\Arduino\libraries\Keyboard\src\Keyboard.cpp:109:19: note: suggested alternative: 'SPIF'
   } else if ((k & SHIFT) == SHIFT) {
                   ^~~~~
                   SPIF
C:\Program Files (x86)\Arduino\libraries\Keyboard\src\Keyboard.cpp:113:12: error: 'ISO_REPLACEMENT' was not declared in this scope
   if (k == ISO_REPLACEMENT) {
            ^~~~~~~~~~~~~~~
C:\Program Files (x86)\Arduino\libraries\Keyboard\src\Keyboard.cpp:114:8: error: 'ISO_KEY' was not declared in this scope
    k = ISO_KEY;
        ^~~~~~~
C:\Program Files (x86)\Arduino\libraries\Keyboard\src\Keyboard.cpp:114:8: note: suggested alternative: 'ISR_NAKED'
    k = ISO_KEY;
        ^~~~~~~
        ISR_NAKED
C:\Program Files (x86)\Arduino\libraries\Keyboard\src\Keyboard.cpp: In member function 'size_t Keyboard_::release(uint8_t)':
C:\Program Files (x86)\Arduino\libraries\Keyboard\src\Keyboard.cpp:155:12: error: 'ALT_GR' was not declared in this scope
   if ((k & ALT_GR) == ALT_GR) {
            ^~~~~~
C:\Program Files (x86)\Arduino\libraries\Keyboard\src\Keyboard.cpp:158:19: error: 'SHIFT' was not declared in this scope
   } else if ((k & SHIFT) == SHIFT) {
                   ^~~~~
C:\Program Files (x86)\Arduino\libraries\Keyboard\src\Keyboard.cpp:158:19: note: suggested alternative: 'SPIF'
   } else if ((k & SHIFT) == SHIFT) {
                   ^~~~~
                   SPIF
C:\Program Files (x86)\Arduino\libraries\Keyboard\src\Keyboard.cpp:162:12: error: 'ISO_REPLACEMENT' was not declared in this scope
   if (k == ISO_REPLACEMENT) {
            ^~~~~~~~~~~~~~~
C:\Program Files (x86)\Arduino\libraries\Keyboard\src\Keyboard.cpp:163:8: error: 'ISO_KEY' was not declared in this scope
    k = ISO_KEY;
        ^~~~~~~
C:\Program Files (x86)\Arduino\libraries\Keyboard\src\Keyboard.cpp:163:8: note: suggested alternative: 'ISR_NAKED'
    k = ISO_KEY;
        ^~~~~~~
        ISR_NAKED
exit status 1
Fehler beim Kompilieren für das Board Arduino Leonardo.

Ok, ich schau mal rein. Ich glaub ich hatte vorhin was gesehen, das der Aufruf anders sein muss.

Das #include also erstmal wieder zurück auf Original. Ich versuch mal zu lesen.