SendKeys "verschluckt" runde Klammern

Fehlerberichte, Hilfe und Anregungen zu BasicMaker 2016 für Windows

Moderator: SoftMaker Team

Antworten
rollovanoyten
Beiträge: 57
Registriert: 06.12.2014 09:14:51

SendKeys "verschluckt" runde Klammern

Beitrag von rollovanoyten » 08.08.2015 18:09:05

Ich habe mit SendKeys einen Pfad und Dateinamen übertragen wollen, der runde Klammern "()" enthält.
Die Klammern werden dabei unterdrückt, das empfangende Programm bekommt sie nicht mitgeliefert.

Das Beispiel-Script startet Notepad und liefert den Pfad/Namen einer Datei mit, die geöffnet werden soll.
Notepad kann die Datei nicht finden, weil im Dateinamen keine (runden) Klammern mehr vorhanden sind.
In der Fehlermeldung wird der Pfad so angezeigt: "D:\Meier Haus 3\EinText.txt".
Das läuft unter BasicMaker 2012 genauso.

Code: Alles auswählen

Sub KlammernFehlen

	n = shell("NotePad.exe", 1)
	SendKeys "%df" + "{Enter}", true
	SendKeys "D:\Meier (Haus 3)\(Ein)Text.txt {Enter}", true

End Sub
Da scheint etwas nicht zu stimmen...

MfG / rollovanoyten
(Windows 7 x64 SP 1, BM 2016 739.0630)

Panosis
SoftMaker Volunteers
SoftMaker Volunteers
Beiträge: 2594
Registriert: 24.04.2008 00:02:12

Re: SendKeys "verschluckt" runde Klammern

Beitrag von Panosis » 08.08.2015 19:38:20

Man könnte das Problem über einen Objektaufruf von Shell.ShellExecute lösen. Dessen Syntax ist allerdings etwas komplex.

Ich schlage einen einfacheren Weg vor:

Man lege im SoftMaker-Ordner die Datei "npstart.bat" an mit folgendem Inhalt:

Code: Alles auswählen

@notepad.exe "C:\Meier (Haus 3)\(Ein)Text.txt"
@exit
Dann setze man ins BM-Skript folgende Zeile:

Code: Alles auswählen

n=shell("npstart.bat")
Das funktioniert jedenfalls, anders als das notorisch unzuverlässige SendKeys.

Panosis
SoftMaker Volunteers
SoftMaker Volunteers
Beiträge: 2594
Registriert: 24.04.2008 00:02:12

Re: SendKeys "verschluckt" runde Klammern

Beitrag von Panosis » 08.08.2015 19:55:38

Nachtrag: Es geht noch eleganter, wir lassen die Hilfs-Bat-Datei von BM anlegen:

Code: Alles auswählen

Open "npstart.bat" For Output As #1
A$="@notepad.exe "
B$="C:\Meier (Haus 3)\(Ein)Text.txt"
C$="@exit"
Print #1, A$&CHR$(34)&B$&Chr$(34)
Print #1, C$
Close #1

n=shell("npstart.bat")
Ggf. kann man später, wenn die Bat-Datei nicht mehr benötigt wird, ins Skript noch einfügen:

Code: Alles auswählen

Kill "npstart.bat"

rollovanoyten
Beiträge: 57
Registriert: 06.12.2014 09:14:51

Re: SendKeys "verschluckt" runde Klammern

Beitrag von rollovanoyten » 09.08.2015 10:10:39

Danke für die Tipps; sie helfen, das Problem zu umgehen. Der Job, den ich abarbeiten will,
umfasst mehrere 100 solcher Schritte und dafür wäre die Lösung zu aufwändig.

Ich setze SendKeys erst seit Kurzem ein und habe auch den Eindruck, dass es etwas 'weich' ist.
Manchmal geht z.B. von einem String das erste Zeichen verloren. Intermittierende Fehler sind
besonders unangenehm, man kann sich nicht einmal darauf verlassen, dass es schief geht.

Dass aber Klammern paarweise verschwinden, deutet eher auf einen logischen Fehler hin und der
müsste doch wohl zu finden sein. Insofern hoffe ich darauf, dass sich jemand der Sache annimmt.

MfG / rollovanoyten

Panosis
SoftMaker Volunteers
SoftMaker Volunteers
Beiträge: 2594
Registriert: 24.04.2008 00:02:12

Re: SendKeys "verschluckt" runde Klammern

Beitrag von Panosis » 09.08.2015 11:03:30

Soweit mir bekannt ist, haben sich die Probleme mit SendKeys seit ca. Windows Vista vermehrt. Ein Einfluss von Windows scheint da mitzuspielen, weshalb sich die Probleme vermutlich auch nicht einfach so von SoftMaker "wegbügeln" lassen werden.

Somit gibt es eigentlich nur zwei Alternativen: Entweder man setzt weiterhin auf SendKeys mit allen damit verbundenen Problemen, oder man sucht nach einem anderen Weg.
Einen möglichen anderen Weg habe ich aufgezeigt, einen weiteren erwähnt: Ausweichen auf eine Windows-interne Funktion zum Aufruf von Programmen.
Weiter wäre natürlich auch denkbar, die bestehenden Pfade zu überdenken und ggf. eben so umzubenennen, dass sie ohne Klammern auskommen.
Auch das ist natürlich Arbeit, aber gerade wenn es um Hunderte von Aufrufen geht, scheint mir ein gewisser Mehraufwand am Anfang besser, wenn danach alles andere automatisch läuft.

Das sind meiner bescheidenen Meinung nach die Möglichkeiten. Welchen Weg man geht, muss man selbst entscheiden.

martin-k
SoftMaker Team
SoftMaker Team
Beiträge: 5398
Registriert: 03.12.2003 14:32:06
Kontaktdaten:

Re: SendKeys "verschluckt" runde Klammern

Beitrag von martin-k » 09.08.2015 11:36:25

Ich zitiere aus der Hilfe:

Die Tasten + ^ ~ % ( ) [ ] { und } sind Spezialzeichen, die deshalb von geschweiften Klammern umgeben werden müssen – zum Beispiel: "{%}" oder {(}.
Martin Kotulla
SoftMaker Software GmbH

rollovanoyten
Beiträge: 57
Registriert: 06.12.2014 09:14:51

Re: SendKeys "verschluckt" runde Klammern

Beitrag von rollovanoyten » 09.08.2015 14:56:26

Manchmal hilft ein kleiner Klaps - und dann läuft es ruckelfrei.

Mit einem kleinen Sub füge ich die geschweiften Klammern ein und das war's.
Wenn ich dann noch ein Leerzeichen vor den Pfad setze,
wird der Pfad - zumindest bis jetzt - nicht mehr verstümmelt.
Und das Leerzeichen vor dem Pfad stört übrigens auch nicht.

Danke / rollovanoyten

FFF
SoftMaker Volunteers
SoftMaker Volunteers
Beiträge: 1188
Registriert: 11.06.2013 22:30:18

Re: SendKeys "verschluckt" runde Klammern

Beitrag von FFF » 26.08.2015 10:41:26

rollovanoyten hat geschrieben:Manchmal hilft ein kleiner Klaps - und dann läuft es ruckelfrei.

Mit einem kleinen Sub füge ich die geschweiften Klammern ein und das war's.
Wenn ich dann noch ein Leerzeichen vor den Pfad setze,
wird der Pfad - zumindest bis jetzt - nicht mehr verstümmelt.
Und das Leerzeichen vor dem Pfad stört übrigens auch nicht.

Danke / rollovanoyten
Rein aus Neugier habe ich das mal probiert, am einfachsten ist, dem Programmaufruf direkt die Datei mitzugeben, also:
shell("notepad.exe C:\Users\ich\Desktop\ich(und)du.txt", 1)
Mit freundlichem Gruß
Karl
emC 7 & SM 2016 rev766.0331 @ W8.1/64 /// SM 2018 rev. 972/1023/64, klassisches Menu
16GB Ram; Core i5-3450 mit integriertem Intel HDGraphics 4000, Treiber 10.18.10.4276;
2560x1440 Monitor 100% Darstellungsgröße /// LaserJet 1200 per USB via Fritzbox 6490.

rollovanoyten
Beiträge: 57
Registriert: 06.12.2014 09:14:51

Re: SendKeys "verschluckt" runde Klammern

Beitrag von rollovanoyten » 26.08.2015 21:34:30

Hallo FFF,

Das stimmt - wenn man den Shell Command verwendet, kann man den Dateinamen übergeben
und der darf auch die zugelassenen Sonderzeichen enthalten.

Mein Problem war jedoch etwas komplizierter:
Unter Verwendung von Notepad sollte der Inhalt des Clipboards in eine neue Datei kopiert und die Datei dann gespeichert werden.
Das kann man m.W. nicht mit dem Shell Command lösen.

Dazu muss Notepad aktiviert und mit den Befehlen zum Kopieren und anschließenden Speichern 'beauftragt' werden
- so als würde man selbst die Befehle in Notepad eingeben.

Und dazu kann man SendKeys nutzen - natürlich unter Berücksichtigung der besonderen Behandlung von Sonderzeichen.

MfG / rollovanoyten

Antworten

Zurück zu „BasicMaker 2016 für Windows“