Haben Sie schon mal versucht einfach ein Makro in SWX aufzuzeichnen und anschließend wieder abzuspielen, nur um zu sehen, dass es leider überhaupt nicht funktioniert hat? Ist mir auch passiert, vor allem als ich bemerkte, dass dabei keine Tastatureingaben mit aufgezeichnet werden. Aber dieses Kurztutorial zeigt Ihnen, wie Sie mit dem SendKeys Kommando aus VB in einem knappen 5-Zeiler einfache Aufgaben automatisieren können. |
Es ist (leider) ein weit verbreiteter Irrtum zu glauben, dass der Makrorekorder in SolidWorks auch die ganzen Tastatureingaben aufzeichnet und anschließend genau so wiedergibt. Dies ist nicht so! Die folgende Kurzbeschreibung hilft Ihnen hoffentlich dabei diese Eigenheit zu umgehen und einfache Makros zu erstellen.
Makros haben im programmiertechnische Sinn einige Einschränkungen, aber sie sind trotzdem äußerst nützlich, wenn es darum geht, einfache Aufgaben zu automatisieren. Eigentlich kann man diese Art der Automation mit Hilfe des SendKeys-Befehl nicht so richtig "programmieren" nennen :-))
Anmerkung: Um eines der Hauptmenus von SolidWorks zu öffnen, drücken Sie die Alt-Taste zusammen mit dem unterstrichenen Buchstaben des Menus. Also Alt+D für das Datei-Menu, Alt+F für das Fenster-Menu usw. Um einen Eintrag in einem offenen Menu zu wählen reicht es einfach nur die entsprechende Taste zu drücken. Aber Achtung: in der deutschen Version gibt es in bestimmten Situationen auch mal zwei Einträge, die dieselbe Taste haben (z.B. im Bearbeiten-Menu die Punkte Einfügen und Eigenschaften).
In Dialogboxen ist es ähnlich. Hier gibt es die Besonderheit, das Sie mit der TAB-Taste nacheinander die ganzen Optionen anspringen können, mit der LEERTASTE einen Haken bei einer Optionen setzen oder wieder wegnehmen, bei Auswahl-Optionen mit den Cursortasten eine auswählen können und zwischen verschiedenen Reitern mit Strg+Bild hoch bzw. Strg-Bild Runter wechseln können. Dies ist aber die ganz normale Windows-Funktionalität.
Wenn ich irgendwas wichtiges vergessen habe, lassen Sie es mich wissen.
Für die Leute, die jetzt schon wissen, wie es funktionieren könnte ein kleines Beispiel:
Sub main()
' Wenn Sie das Makro aus SolidWorks heraus starten, muss vorher
' ein anderes Fenster den Focus haben, damit es funktioniert.
' Am einfachsten erledigen wir das mit einer Messagebox
MsgBox "Makro geladen und bereit ..."
'
AppActivate "SolidWorks 98Plus"
SendKeys "%be%m<+(MOD)-+(DIAM>){ENTER}{ENTER}",True
End Sub
Das Beispiel oben hat folgende Funktion: es trägt vor eine ausgewählte Bemaßung ein Durchmesserzeichen ein. Wenn Sie sich das Makro auch noch mit einem Tastaturkürzel versehen (wie das geht können Sie im Kapitel 02 des API-Tutorials lesen) brauchen Sie nur noch eine Bemaßung auswählen, eine Tastenkombination drücken und den Rest macht SolidWorks.
Aber zurück zum How-To. Sie haben sich im Schritt 1 die Tastenfolge aufgeschrieben oder gemerkt und müssen nur noch das Macro schreiben. Rufen Sie einen Texteditor auf und geben schon mal den Rumpf eines solchen Makros ein:
Sub Main ()
' Wenn Sie das Makro aus SolidWorks heraus starten, muss vorher
' ein anderes Fenster den Focus haben, damit es funktioniert.
' Am einfachsten erledigen wir das mit einer Messagebox
MsgBox "Makro geladen und bereit ..."
End Sub
Als erstes kommt jetzt direkt eine Besonderheit: ich habe es nicht geschafft, diese Makros direkt abzuspielen, ohne vorher auf ein anderes Fenster umzuschalten, deswegen die komische Messagesbox. Hat selbst keine Funktion, aber ohne die hbe ich die Sache nicht ans Laufen bekommen, Wenn da jemand einen Tip hat, wäre ich sehr dankbar ...
Anschließend muß noch das Programm bestimmt werden, das die ganzen Tastenkommandos empfangen soll; diese geschieht mit der Funktion AppActivate "Name des Programms".
Dann kommt der eigentliche Zauber: mit dem Kommandos Sendkeys schicken Sie jetzt die gewünschten Tasten an das zuvor bestimmte Programm. Zum besseren Verständnis der Funktion steht unten ein Auszug aus der Beschreibung aus der MSDN-Dokumentation. Sie können anhand der Dokumentation nachvollziehen, was die SendKeys-Funktion an Tasten sendet. Zum einfacheren Nachschauen nochmal die Zeile und dann der Klartext:
SendKeys "%be%m<+(MOD)-+(DIAM>){ENTER}{ENTER}",True
SendKeys-Kürzel | Tastaturbefehl | Bedeutung |
---|---|---|
%b | ALT+B | Bearbeiten Menu aufrufen |
e | e | Eigenschaften aus dem Bearbeiten-Menu aufrufen, daraufhin geht die Dialogbox mit den Eigenschaften des aktuellen Elementes (also der Bemaßung) auf |
%m | ALT-M | Aufruf des Button "Text modifizieren ..." Die nächste Dialogbox mit den ganzen texteinstellungen klaptt auf und der Cursor sthet im Eigabefeld für den Text. |
< | < | um das Durchmesserzeichen vor die Bemaßung zu bekommen, muss in dem Text <MOD-DIAM> vor dem <DIM> stehen. Also erstmal das < eintragen ... |
+(MOD) | SHIFT+"MOD" | ... und dann nacheinander die Großbuchstaben MOD. Sendkeys kennt aber keine Großbuchstaben, darum muss das Halten der SHIFT-Taste simulier werden (das ist das +). Und weil das für ein paar Zeichen gilt, kommen diese Zeichen dann in Klammern ... |
-+(DIAM>) | - SHIFT(DIAM>) | ... die SHIFT-Taste "loslassen", einfach den Bindestrich und dann wieder die Großbuchstaben DIAM, gefolgt von dem >-zeichen, das ja auch zusammen mit der SHIFT-Taste gedrückt werden muss, deswegen auch noch in der Klammer ... |
{ENTER} | RETURN | Bestätigen des Ok-Button (der reagiert ja als Default auf RETURN). BTW, Sie könnten es auch kürzer als ~ schreiben, ich bevorzuge allerdings diese Schreibweise, damit ich mir nicht merken muss, welche Taste gemeint ist ... |
{ENTER} | RETURN | ... und den Eigenschaftdialog bestätigen. That's it. |
Sie sehen, keine Hexerei, aber zumindest gewöhnungsbedürftig.
Speichern Sie anschließend diese Textdatei mit der Endung swb ab, damit SolidWorks dies auch als Makro erkennt. Jetzt können Sie das mal ausprobieren: Markieren Sie eine Bemaßung (egal ob in einer Skizze, Teil, Baugruppe oder Zeichnung), gehen Sie unter Extras/Makros/Ausführen ... und wählen in dem Öffnen-Dialog Ihr Makro aus und voila, jetzt sollte ein Durchmesserzeichen vor Ihrem Maß stehen.
Sendet eine Tastenfolge (die aus einem oder mehreren Tastenanschlägen bestehen kann) an das aktive Fenster, als ob sie über die Tastatur eingegeben worden wäre.
Die Syntax der SendKeys-Anweisung verwendet die folgenden benannten Argumente:
Teil | Beschreibung |
---|---|
string | Erforderlich. Ein Zeichenfolgenausdruck, der die zu sendende Tastenfolge angibt. |
wait | Optional. Ein Wert vom Typ Boolean, der den Wartemodus angibt. Wenn der Wert False ist (Voreinstellung), setzt die Prozedur die Ausführung fort, unmittelbar nachdem die Tastenfolge gesendet wurde. Wenn der Wert True ist, muß die Tastenfolge verarbeitet werden, bevor die Prozedur die Ausführung fortsetzen kann. |
Jede Taste wird durch mindestens ein Zeichen repräsentiert. Ein einzelnes Zeichen auf
der Tastatur kann mit dem Zeichen selbst angegeben werden. "A"
für
das Argument string repräsentiert beispielsweise den Buchstaben A. Sie
geben mehrere Zeichen an, indem Sie die Zeichen aneinanderhängen. "ABC"
für string repräsentiert zum Beispiel die Buchstaben A, B und C.
Das Pluszeichen (+), Caret-Zeichen (^), Prozentzeichen (%), die
Tilde (~) und die Klammern ( ) haben bei der SendKeys-Anweisung eine
spezielle Bedeutung. Sie müssen jedes dieser Zeichen in geschweifte Klammern
einschließen ({}
), um es verwenden zu können. Für das Pluszeichen geben
Sie beispielsweise {+}
an. Eckige Klammern ([ ]) haben bei der SendKeys-Anweisung
zwar keine spezielle Bedeutung, müssen aber auch in geschweifte Klammern eingeschlossen
werden, da sie in anderen Anwendungen eine spezielle Bedeutung haben, insbesondere im
Zusammenhang mit dynamischem Datenaustausch (DDE). Die Zeichen für die geschweiften
Klammern legen Sie unter Verwendung von {{}
und {}}
fest.
Für Zeichen, die beim Drücken einer Taste nicht angezeigt werden (z.B. die EINGABETASTE oder TAB-TASTE) und für bestimmte Aktionstasten können Sie die folgenden Codes verwenden:
Taste | Code |
---|---|
RÜCKTASTE | {BACKSPACE} , {BS} oder {BKSP} |
PAUSE | {BREAK} |
FESTSTELLTASTE | {CAPSLOCK} |
ENTF | {DELETE} oder {DEL} |
NACH-UNTEN | {DOWN} |
ENDE | {END} |
EINGABETASTE | {ENTER} oder ~ |
ESC | {ESC} |
HILFE | {HELP} |
POS 1 | {HOME} |
EINFG | {INSERT} oder {INS} |
NACH-LINKS | {LEFT} |
NUM-FESTSTELL | {NUMLOCK} |
BILD-AB | {PGDN} |
BILD-AUF | {PGUP} |
DRUCK | {PRTSC} |
NACH-RECHTS | {RIGHT} |
ROLLEN-FESTSTELL | {SCROLLLOCK} |
TAB | {TAB} |
NACH-OBEN | {UP} |
F1 | {F1} |
F2 | {F2} |
F3 | {F3} |
F4 | {F4} |
F5 | {F5} |
F6 | {F6} |
F7 | {F7} |
F8 | {F8} |
F9 | {F9} |
F10 | {F10} |
F11 | {F11} |
F12 | {F12} |
F13 | {F13} |
F14 | {F14} |
F15 | {F15} |
F16 | {F16} |
Sie können Tastenkombinationen mit der UMSCHALTTASTE, STRG-TASTE oder ALT-TASTE angeben, indem Sie vor dem normalen Tasten-Code einen oder mehrere der folgenden Codes angeben:
Taste | Code |
UMSCHALT | + |
STRG | ^ |
ALT | % |
Wenn UMSCHALT, STRG und ALT gleichzeitig mit anderen Tasten gedrückt werden müssen,
schließen Sie die Codes für die Tasten in Klammern ein. Wenn zum Beispiel die
UMSCHALTTASTE gleichzeitig mit den Tasten E und C gedrückt werden soll, geben Sie "+(EC)
"
an. Wenn die UMSCHALTTASTE zusammen mit E gedrückt werden soll und im Anschluß daran C
ohne UMSCHALTTASTE, geben Sie "+EC
" an.
Tastenwiederholungen können Sie in der Form {Taste Zahl}
angeben. Das
Leerzeichen zwischen Taste
und Zahl
ist dabei zwingend
erforderlich. {LEFT 42}
wird zum Beispiel als 42-maliges Drücken der
NACH-LINKS-TASTE interpretiert, {h 10}
als 10-maliges Drücken der Taste H.
Anmerkung: SendKeys kann keine Tastenanschläge an Anwendungen senden,
die nicht unter Microsoft Windows ausgeführt werden können. SendKeys kann auch
die DRUCK-TASTE {PRTSC
} an keine Anwendung senden.
Kritik und Anregungen bitte an Stefan Berlitz. Letzte Änderung dieser Seite am Donnerstag, 01. Februar 2007 17:40 |