| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| Mit komplexer Geometrie und organischen Formen arbeiten |
Autor
|
Thema: Sendkeys funktioniert nicht (4091 mal gelesen)
|
Micha79 Mitglied Stuttgart
Beiträge: 5 Registriert: 16.09.2013
|
erstellt am: 16. Sep. 2013 16:15 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, wir benutzen Solidworks 2012(64bit)auf Win7 mit Keytech. Nun möchte ich über Sendkeys die Tasten "STRG+S" aufrufen. Diese Kombination startet den Speicherdialog mit Keytech. Wenn ich das Programm aus dem Visual Basic Editor direkt starte funktioniert das auch. Starte ich das Programm jedoch aus der Makro Symbolleiste etc. dann wird Sendkeys nicht ausgeführt. Als Alternative habe ich versucht über die Funktion Keybd_event das ganze zu machen. Damit funktioniert es auch aber nur wenn der Befehl ganz am Ende vom Programm steht. Kommt im Anschluss z.B. noch eine Messagebox etc. dann gehts schon wieder nicht. Dann sieht es so aus wie wenn der Keybd_event Befehl quasi in der Pipeline steht und erst nach beenden der Messagebox oder Programmabruch ausgeführt wird. Bin langsam mit meinem Latein am Ende. Auch 8h googeln haben nicht weitergeholfen. Bin ziemlich frustriert. Gibt es eventuell eine Möglichkeit die Befehle der Untermenüs direkt aufzurufen? Denke da in Richtung wm_command und sendmessage. Problem damit ist dass ich die wm_command nicht auslesen kann da die meißten Programme wie Spy++ nur 32bit unterstützen. Und selbst dann bleibt die Frage wie das funktioniert wenn keine BN_Clicked oder sowas gemeldet wird. Bin um jeden Rat mehr als Dankbar!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Torsten Niemeier Ehrenmitglied V.I.P. h.c. Maschinenbau Ingenieur
Beiträge: 3682 Registriert: 21.06.2001 "ZUSE I.36", 8 BIT, 32 Lämpchen, Service-Ölkännchen "ESSO-Super", Software: AO auf Kuhlmann-Parallelogramm-Plattform ** CSWP 04/2011 ** ** CSWE 08/2011 **
|
erstellt am: 17. Sep. 2013 00:36 <-- editieren / zitieren --> Unities abgeben: Nur für Micha79
|
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)
Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 17. Sep. 2013 08:12 <-- editieren / zitieren --> Unities abgeben: Nur für Micha79
Hallo Micha, und herzlich willkommen im SolidWorks Brett auf CAD.de Icvh würde zunächst mal versuchen bei Keytech nachzufragen, wie du denn deren Speicherdialog aus deinem Makro heraus aufrufen kannst. Da sollte es ja über deren DLL eine entsprechende Routine geben, die du aufrufen kannst - wenn die öffentlich ist. Zum Problem mit dem Sendkeys: hast du vorher das SolidWorks Fenster auch aktiviert, damit die gesendeten Befehle auch in dem Fenster ankommen. Ich hab meine 2012 64 Bit auf Windows 7 ausgegraben und dieses kleine Sendkeys-Beispiel gemacht, dass den normalen "Speichern unter ..." Dialog aus dem Dateimenu aufruft:
Code: Sub main() AppActivate "SolidWorks Premium 2012" SendKeys "%dö", True End Sub
Das ist das ganze Makro, funktioniert sowohl aus dem VBA-Editor als auch per Extras/Makros/Ausführen oder als Makroknopf im Befehlsmanager. Wie dein SolidWorksfnster heißt (oder zumindest vom Namen her anfängt) kannst du am einfachsten im Taskmanager sehen. Da gibt es bestimmt auch irgendwelche Wege das per Windows APIs rauszubekommen, das man das nicht hart verdrahten muss, aber so weit hab ich es nie weiter verfolgt. Ciao, Stefan PS: wenn das klappt stell doch die Lösung (oder einen hierher) auch bitte in deinem Doppelposting im VB-Brett rein, damit dass da nicht offen bleibt, falls noch mal jemand danach sucht.
------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Micha79 Mitglied Stuttgart
Beiträge: 5 Registriert: 16.09.2013
|
erstellt am: 17. Sep. 2013 19:53 <-- editieren / zitieren --> Unities abgeben:
Vielen Dank für die Tipps! Leider geht das bei mir nicht so einfach. Habe den gleichen Code auch mit AppActivate "SolidWorks Premium 2012" davor schon ausprobiert. Glaube auch nicht das es am Fenster Fokus liegt. Sonst würde der Code ja aus dem Editor direkt gestartet ja denke ich auch nicht gehen. Wie gesagt wenn ich den Code aus dem Editor starte alles Prima. Wenn ich über die Makro-Leiste den Code starte tut sich nichts! Woran könnte das noch liegen. Und woran liegt es das keybd_event nur wenn nichts danach kommt, wie schon beschrieben funzt. Die Idee mit "DoEvents" hatte ich auch schon macht aber keinen Unterschied, sowohl bei sendkeys als auch bei keybd_event. Hat noch jemand ne Idee? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Torsten Niemeier Ehrenmitglied V.I.P. h.c. Maschinenbau Ingenieur
Beiträge: 3682 Registriert: 21.06.2001 "ZUSE I.36", 8 BIT, 32 Lämpchen, Service-Ölkännchen "ESSO-Super", Software: AO auf Kuhlmann-Parallelogramm-Plattform ** CSWP 04/2011 ** ** CSWE 08/2011 **
|
erstellt am: 17. Sep. 2013 21:48 <-- editieren / zitieren --> Unities abgeben: Nur für Micha79
|
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)
Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 18. Sep. 2013 07:57 <-- editieren / zitieren --> Unities abgeben: Nur für Micha79
Zitat: Original erstellt von Micha79: Habe den gleichen Code auch mit AppActivate "SolidWorks Premium 2012" davor schon ausprobiert. Glaube auch nicht das es am Fenster Fokus liegt. Sonst würde der Code ja aus dem Editor direkt gestartet ja denke ich auch nicht gehen.
Bist du dir sicher, dass dein Fenster so heißt? Hast du mal ein neues Makro gemacht nur mit dem Code von mir drin? Hast du im Taskmanager nachgeschaut, dass dein SolidWorks wirklich so heißt? Hast du mal den Trick über die Messagebox vorher probiert (siehe mein uraltes Tutorial auf http://solidworks.cad.de/apitut_kap01.htm )? Das der Code aus dem Editor klappt und aus SolidWorks heraus nicht hab ich auch schon erlebt, das hat aber nichts mit Glauben zu tun, sondern mit Testen Wenn es so nicht klappt kann ich zumindest dir auch nicht weiterhelfen; das jetzt mehrere Ansätze zu diesem Thema auch nach Sendkeys funktioniert nicht in VB-Brett verstreut sind macht es auch nicht leichter, was wieder zu finden ... Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Micha79 Mitglied Stuttgart
Beiträge: 5 Registriert: 16.09.2013
|
erstellt am: 23. Sep. 2013 19:16 <-- editieren / zitieren --> Unities abgeben:
Also, da ich letzte Woche im Urlaub war und nicht testen konnte hier mal mein Zwischenstand. Habe exakt das probiert was du gesagt hast. Und wie schon bereits erwähnt geht das auch wenn ich den Code im Visual Basic Editor starte. Geht aber nicht wenn ich ihn über die Makro Leiste starte. Da bleibt er stehen und das wars. Habe auch mal zwischen zwei Anwendungen hin und her geschalten mit AppActivate in Kombination mit Sleep. Ich sehe das die andere Anwendung Aktiv wird und danach wieder Solidworks. Was übrigens verwunderlich ist, das in der anderen Anwendung das Sendkeys funktioniert. Also scheint irgendwas an Solidworks faul zu sein. Es tut mir übrigens leid das ich das VB-Forum erst nach dem Beitrag gesehen habe, war mir eben nicht sicher wo sich die Experten tummeln deshalb der zweite Beitrag. Komme mir aber schon etwas dumm dargestellt vor. Es ist nicht so dass ich keine Ahnung vom Programmieren habe und bin bisher auch immer mit Google auf Lösungen gestoßen gerade auch hier im Forum. Ich hoffe immer noch dass irgendjemand hier das gleiche Problem hat, oder mir einen Tipp geben kann wie ich direkt Menübefehle ausführen könnte, jedoch nicht die von Solidworks da gibts ja n Befehl für... Beste Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Torsten Niemeier Ehrenmitglied V.I.P. h.c. Maschinenbau Ingenieur
Beiträge: 3682 Registriert: 21.06.2001 "ZUSE I.36", 8 BIT, 32 Lämpchen, Service-Ölkännchen "ESSO-Super", Software: AO auf Kuhlmann-Parallelogramm-Plattform ** CSWP 04/2011 ** ** CSWE 08/2011 **
|
erstellt am: 23. Sep. 2013 21:20 <-- editieren / zitieren --> Unities abgeben: Nur für Micha79
|
| Produktmanager* für Maschinenbau | BAADER ist mit mehr als 1.600 Mitarbeitenden weltweit der Partner für Lebensmittelverarbeitungslösungen und in mehr als hundert Ländern auf sechs Kontinenten aktiv. Bei uns erwarten Sie vielfältige Tätigkeitsfelder, von der Entwicklung und Herstellung von Spezialmaschinen und Lösungen für die Verarbeitung von Fisch, Geflügel und Fleisch über Vertrieb, Projektierung und Installation bis hin zu unterstützenden Bürofunktionen, Service und After-Sales.... | Anzeige ansehen | Produktmanagement |
|
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)
Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 24. Sep. 2013 08:44 <-- editieren / zitieren --> Unities abgeben: Nur für Micha79
Hallo Micha79, Zitat: Original erstellt von Micha79: Komme mir aber schon etwas dumm dargestellt vor.
Das war nicht meine Absicht. Aber wir können nicht auf deinen Bildschirm schauen, du stellst weder ein Video noch dein Beispielmakro zum Testen zur Verfügung und du hast noch keine Beitragshistorie hier im Brett, aus der wir erkennen könnten, ob du blutiger Anfänger, fortgeschrittener Amateur oder erfahrener Programmierer bist. Da du am Anfang davon gesprochen hast, das du den Speicherndialog von Keytech, einem Zusatzprodukt, per Sendkeys aufrufen möchtest wollte ich mit dem ersten Beispiel erst mal sichergestellt haben, ob es vielleicht daran liegt, dass es eben keine SolidWorks Funktion ist und die einfach nur nicht weitergereicht wird. Ich kann bei mir z.B. zwar SolidWorks und z.B. auch das Photoview-Addin per Sendkeys im Menu steuern, aber nicht das SAP-PLM-Addin. Deswegen das Beispiel mit dem Öffnen des SolidWorks Dialogs. Das Beispiel ist mit seinen 2 Zeilen recht überschaubar, klappt bei mir auf mehreren Rechnern unter Windows 7/64 mit SW2012 und Sw2013 nach der entsprechenden Anpassung wegen des Fensternamens. Wenn das bei dir nicht funktioniert muss es an einem der beiden Zeilen liegen oder die ganze Sendkeys-Klamotte funktioniert bei dir anders als bei mir. Ich habe verstanden, dass mein Beispiel mit dem normalen Datei-Öffnen-Dialog bei dir funktioniert, wenn du es aus dem VBA-Editor startest, aber (im Gegensatz zu meiner Umgebung) nicht, wenn du es als Makroknopf aufrufst. Du hast überprüft, dass das richtige (SolidWorks)Fenster aktiviert wird, aber bei dir landen die gesendeten Tastendrucke ALT-D ö dann nicht bei SolidWorks, sondern irgendwo. Ich glaub dir das alles, kann es aber weder reproduzieren noch nachvollziehen. Daher die Rückfrage. Zitat: Original erstellt von Micha79: Ich hoffe immer noch dass irgendjemand hier das gleiche Problem hat, oder mir einen Tipp geben kann wie ich direkt Menübefehle ausführen könnte, jedoch nicht die von Solidworks da gibts ja n Befehl für...
Da würde ich mich an den Support von Keytech wenden, vielleicht gibt es ja eine offizielle Schnittstelle zu deren Addon oder zumindest einen ansprechbaren API Call. Ciao, Stefan
------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |