SolidWorks API Hilfe - SendKeys benutzen

construct.gif (9873 Byte)

apitut_mac01.gif (2058 Byte)

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.

Übersicht über dieses Kapitel:

Einleitung

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 :-))

Zurück zum Seitenanfang

Was ist zu tun?

  1. Schreiben Sie sich irgendwo (z.B. auf einem Stück Papier :-)) genau die Tastenkombinationen auf, die Sie in SolidWorks nacheinander drücken müssen, um die spezielle Aufgabe zu erledigen.
  2. Schreiben Sie (am besten im NotePad oder einem kleinen Texteditor Ihrer Wahl) ein kleines Makro und benutzen Sie dabei das SendKeys Kommando, um die Kommandos an SolidWorks zu schicken.
  3. Rufen Sie das Makro in SolidWorks auf und staunen Sie über Ihr erstes eigenes Makro

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.

Zurück zum Seitenanfang

Zur Abschreckung: das Beispiel

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

Zurück zum Seitenanfang

Wie funktioniert das?

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.

Zurück zum Seitenanfang

SendKeys-Anweisung

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.

Syntax: SendKeys string[, wait]

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.

Zurück zum Seitenanfang

Bemerkungen

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.

Zurück zum Seitenanfang

hr.gif (4491 Byte)

counter Kritik und Anregungen bitte an Stefan Berlitz. Letzte Änderung dieser Seite am Donnerstag, 01. Februar 2007 17:40