| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| AMB 2024 |
Autor
|
Thema: API Menu (3895 mal gelesen)
|
3DTOM Mitglied Softwareentwickler / Konstrukteur
Beiträge: 23 Registriert: 26.10.2001 SolidWorks 2010 SP4.0 Programmiersprache: C#
|
erstellt am: 24. Sep. 2008 11:31 <-- editieren / zitieren --> Unities abgeben:
Hallo Zusammen, ich habe ein eigenes Menu zu SolidWorks hinzugefügt, aus dem ich verschiedene Programme (*.exe) starten möchte. Da ich nur eine "MenuCallBack" funktion verwenden möchte, laufen alle Menu Item clicks in die selbe Methode. Nun versuche ich herauszufinden welches Item (+ Namen) im Menu angeklickt wurde, jedoch scheitere ich momentan daran. Weiß vielleicht jemand welches Event ausgelösst wird, wenn ein Menu item angeklickt wurde oder wie man an das angeklickte Item herankommt. Vielen Dank, Thomas [Diese Nachricht wurde von 3DTOM am 24. Sep. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tbd Mitglied Teamleiter
Beiträge: 825 Registriert: 26.01.2006 Dell Percision T5400 Intel(R) Xeon(R) CPU X5460 @ 3.16GHz 3,25 GB RAM Nvidia Quadro FX 4600 ----- Win XP Prof SP 3 SW 2008 SP 5.0 PARTsolutions 8.1.08 Cideon SAP PLM 5.103.5.17 Visual Studio 2008
|
erstellt am: 24. Sep. 2008 13:47 <-- editieren / zitieren --> Unities abgeben: Nur für 3DTOM
Hallo Thomas, Zitat: Original erstellt von 3DTOM: ... nur eine "MenuCallBack" funktion verwenden möchte...
wieso möchtest du nur eine CallBack Funktion verwenden. Dies bringt dir, meiner Meinung, keinen Vorteil. Nur eben das Problem, das du nicht weist was der Anwender eigentlich starten, bzw. machen möchte. Ich kenne nur eine Möglichkeit zu ermitteln, welchen Menüeintrag angeklickt wurde: verschiedene CallBack Funktionen. Es macht Sinn für jeden Menüeintrag eine für die jeweilige Aktion optimierte CallBack Funktionen zu definieren und diese zu verwenden. ------------------ Mfg Daniel www.MySldWorks.de - SolidWorks Api Snippets Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
3DTOM Mitglied Softwareentwickler / Konstrukteur
Beiträge: 23 Registriert: 26.10.2001 SolidWorks 2010 SP4.0 Programmiersprache: C#
|
erstellt am: 24. Sep. 2008 14:31 <-- editieren / zitieren --> Unities abgeben:
Hallo Daniel, danke für deine Antwort. Meine Idee dahinter ist, das ich einen Ordner, in dem diese Programme liegen, mit einer Schleife durchlaufe und im SolidWorks Menu zur Auswahl anzeigen möchte. Durch die Schleife bekommt halt jeder Eintrag die selbe "MenuCallBack" funktion zugewiesen. Jetzt würde ich gerne in der "MenuCallBack" funktion ein Switch (Select Case) Answeisung einsetzen um den entsprechenden Eintrag im Menu auszuwählen. Wir haben momentan eine Lösung mit einem *.ini file am Laufen, worin die Programmnamen und der Pfad angegeben sind, aber leider haben wir dazu kein Quellcode mehr und ich komme auch nicht so genau dahinter wie das mit dem *.ini file gelöst wurde, da ja auch praktisch dort ein click Ereignis auftauchen muss, um den entsprechenden Eintrag im *.ini file auszuwählen. Gruß Thomas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tbd Mitglied Teamleiter
Beiträge: 825 Registriert: 26.01.2006 Dell Percision T5400 Intel(R) Xeon(R) CPU X5460 @ 3.16GHz 3,25 GB RAM Nvidia Quadro FX 4600 ----- Win XP Prof SP 3 SW 2008 SP 5.0 PARTsolutions 8.1.08 Cideon SAP PLM 5.103.5.17 Visual Studio 2008
|
erstellt am: 24. Sep. 2008 14:47 <-- editieren / zitieren --> Unities abgeben: Nur für 3DTOM
Hallo Thomas, leider kommst du an den verschiedenen CallBack Funktionen nicht vorbei. In diesen kannst du eine allgemeine Funktion aufrufen, mehr aber leider nicht. Bei meiner alten Firma und dessen Freeware SDA-4Free habe ich in der Personal Menü Funktion verschiedene CallBack Funktionen verwendet. Ich habe dort einfach eine fest definierte Anzahl von CallBack Funktionen in meine Klasse geschrieben und diese CallBack Funktionen dann den Menüeinträgen zugewiesen um diese eindeutig identifizieren zu können. Auch bei der Lösung mit einer *.ini Datei wird man ähnlich vorgehen. Deshalb gibt es bei solchen dynamischen Menüs, auch beim SDA-4Free immer eine maximale Anzahl von Menüeinträgen. ------------------ Mfg Daniel
www.MySldWorks.de - SolidWorks Api Snippets [Diese Nachricht wurde von tbd am 24. Sep. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
3DTOM Mitglied Softwareentwickler / Konstrukteur
Beiträge: 23 Registriert: 26.10.2001 SolidWorks 2010 SP4.0 Programmiersprache: C#
|
erstellt am: 24. Sep. 2008 15:46 <-- editieren / zitieren --> Unities abgeben:
|
HartmutT Mitglied Dipl.-Ing (TU) MB
Beiträge: 790 Registriert: 16.06.2006 SWX 2019 SP5.0 MaxxDB 2021.SP0.02 Linked Jan 18 2021 (64bit)
|
erstellt am: 24. Sep. 2008 17:44 <-- editieren / zitieren --> Unities abgeben: Nur für 3DTOM
Hi Thomas! Und warum gehst Du nicht den einfachen Weg und nutzt SDAforFREE Ich starte da auch dies und das. Ob Makro oder Exe oder einen WinExplorer mit Zielpfad d:\TempDXF\ bspw. Die Menüfunktion ist Super und einmal definiert, kannste die in nullkommanix auf anderen PCs 1zu1 aufspielen. Die Software ist hier im Forum schon viel diskutiert worden. Ich danke denen, die sie bereitgestellt haben. Grüßle, H. ------------------ Hartmut Tylla http://www.schiwa.de/ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
VBSpawn Mitglied Programmierer
Beiträge: 514 Registriert: 23.08.2005 Sorgfältige Planung ersetzt niemals pures Glück.
|
erstellt am: 25. Sep. 2008 10:43 <-- editieren / zitieren --> Unities abgeben: Nur für 3DTOM
Hallo zusammen, also gehen tut es schon... wenn man sich der Interfaces bedient und eine eigene Klasse mit diesem Interface erzeugt. Kurze Rede: Im Anhang mal ein Beispiel welches das C:\Windows\ Verzeichnis nach .exe Dateien durchsucht und für jede gefundene exe einen Menü-Eintrag erzeugt (in der Start Umgebung). Beim jeweiligen Klick wird dann eine MessageBox aufgerufen die den jeweiligen Namen nochmal Anzeigt. Anhand dessen ist eine Unterscheidung schon Möglich und ein Select case kann ebenfalls dort eingebaut werden.. Jedenfalls kannst du gerne das Beispiel für deine eigenen Sachen als Start verwenden. Vermutlich musst du die Referenzen noch Anpassen da ich noch SolidWorks 2k5 hier verwende ebenso sollte das FilesystemObject zur Verfügung stehen.... und etwas mit dem du VB6 vbp's Öffnen kannst... Viel Spaß damit und der Umsetzung in .NET Gruß Micha ------------------ Stell dir vor, es geht, und keiner kriegts hin. Zitat: Interpunktion und Orthographie des Postings sind frei erfunden. Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tbd Mitglied Teamleiter
Beiträge: 825 Registriert: 26.01.2006 Dell Percision T5400 Intel(R) Xeon(R) CPU X5460 @ 3.16GHz 3,25 GB RAM Nvidia Quadro FX 4600 ----- Win XP Prof SP 3 SW 2008 SP 5.0 PARTsolutions 8.1.08 Cideon SAP PLM 5.103.5.17 Visual Studio 2008
|
erstellt am: 25. Sep. 2008 10:58 <-- editieren / zitieren --> Unities abgeben: Nur für 3DTOM
Hallo Micha, schade das ich zur Zeit keinen Rechner mit einer VB6 Lizenz habe. Es würde mich doch schon sehr interessieren wie du vorgegangen bis. Kann man nichts machen. Werde mir den Beitrag mal merken und mit dein Beispiel anschauen wenn ich wieder die Möglichkeiten dazu habe. ------------------ Mfg Daniel www.MySldWorks.de - SolidWorks Api Snippets Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
VBSpawn Mitglied Programmierer
Beiträge: 514 Registriert: 23.08.2005 Sorgfältige Planung ersetzt niemals pures Glück.
|
erstellt am: 25. Sep. 2008 11:57 <-- editieren / zitieren --> Unities abgeben: Nur für 3DTOM
Hallo Daniel, ausschlaggebend ist die bRet = iSldWorks.SetAddinCallbackInfo(App.hInstance, meineMenues(UBound(meineMenues()) - 1), iCookie) welche als Parameter ein Object erwartet das die Aufrufende Funktion beinhaltet. Dementsprechend wird dann Dynamisch ein Array mit Objekten gefüllt und dieses mit dem SetAddinCallBackInfo Aufruf übergeben (Die jeweilige Instanz des Objektes/Datei in diesem bsp). Das Object hat als Parameter den Dateinamen und somit ist der Menüpunkt eigentlich eindeutig geklärt. Ein Interface muss man nicht wirklich Implementieren, nicht für einen solchen Fall es kann aber nie was Schaden zu wissen wie es geht .. Besonders nicht falls man mal etwas Komplizierteres vorhat.... siehe auch : http://articles.techrepublic.com.com/5100-10878_11-5800268.html Gruß Micha ------------------ Stell dir vor, es geht, und keiner kriegts hin. Zitat: Interpunktion und Orthographie des Postings sind frei erfunden. Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tbd Mitglied Teamleiter
Beiträge: 825 Registriert: 26.01.2006 Dell Percision T5400 Intel(R) Xeon(R) CPU X5460 @ 3.16GHz 3,25 GB RAM Nvidia Quadro FX 4600 ----- Win XP Prof SP 3 SW 2008 SP 5.0 PARTsolutions 8.1.08 Cideon SAP PLM 5.103.5.17 Visual Studio 2008
|
erstellt am: 25. Sep. 2008 12:20 <-- editieren / zitieren --> Unities abgeben: Nur für 3DTOM
Du gibst also mit SetAddinCallbackInfo und dem Parameter AddinCallbacks immer eine neue Instanz der gleichen Klasse an und kannst somit immer die gleiche Methode in dieser Klasse verwenden. Sehe ich das richtig? Wenn ja eine echt gut Idee. Darauf muss man erstmal kommen! Wusste in diesem Zusammenhang nicht das man die SetAddinCallbackInfo Methode in einem Add-In mehrmals aufrufen kann! Echt eine Super dynamische Sache! Respekt! Dafür gibt es auf jeden Fall . ------------------ Mfg Daniel www.MySldWorks.de - SolidWorks Api Snippets Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
Beiträge: 2675 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** ------------------ Zuletzt beruflich: - SWX2020 SP5; - SAP/PLM+ECTR; - DriveWorks Pro; - Programmierung: VBA, aktuell Visual Studio 2022/VB.Net ------------------ ab 2024 (privat): Onshape und anderes
|
erstellt am: 25. Sep. 2008 16:55 <-- editieren / zitieren --> Unities abgeben: Nur für 3DTOM
|
3DTOM Mitglied Softwareentwickler / Konstrukteur
Beiträge: 23 Registriert: 26.10.2001 SolidWorks 2010 SP4.0 Programmiersprache: C#
|
erstellt am: 25. Sep. 2008 19:14 <-- editieren / zitieren --> Unities abgeben:
Hallo Micha, Vielen Dank für das Demo Menu, das werde ich auch mal versuchen umzusetzen. Ich hatte mich jetzt damit beholfen, das ich eine statische Anzahl von Funktionen angelegt habe und mittels Index in den Callbacks, diese dann ausführen lasse. Ein problem habe ich jedoch heute noch bekommen, meine menu.dll hat im debug modus von Visual Studio 2005 einwandfrei funktioniert. Nun wollte ich diese veröffentlichen und auf dem Server zur Verfügung stellen. Ich hatte das erstellte Projekt komplett auf den Server kopiert und versucht die menu.dll in SolidWorks zu öffnen. Jedoch friert SolidWorks dann immer ein. Hat jemand schon Erfahrung wie man unter VS2005 eine .dll auf dem Server veröffentlichen kann oder muss die dann direkt im lokalen Ordner von SolidWorks gespeichert sein? Viele Grüße Thomas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
Beiträge: 2675 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** ------------------ Zuletzt beruflich: - SWX2020 SP5; - SAP/PLM+ECTR; - DriveWorks Pro; - Programmierung: VBA, aktuell Visual Studio 2022/VB.Net ------------------ ab 2024 (privat): Onshape und anderes
|
erstellt am: 26. Sep. 2008 07:52 <-- editieren / zitieren --> Unities abgeben: Nur für 3DTOM
|
3DTOM Mitglied Softwareentwickler / Konstrukteur
Beiträge: 23 Registriert: 26.10.2001 SolidWorks 2010 SP4.0 Programmiersprache: C#
|
erstellt am: 26. Sep. 2008 17:30 <-- editieren / zitieren --> Unities abgeben:
|
tbd Mitglied Teamleiter
Beiträge: 825 Registriert: 26.01.2006 Dell Percision T5400 Intel(R) Xeon(R) CPU X5460 @ 3.16GHz 3,25 GB RAM Nvidia Quadro FX 4600 ----- Win XP Prof SP 3 SW 2008 SP 5.0 PARTsolutions 8.1.08 Cideon SAP PLM 5.103.5.17 Visual Studio 2008
|
erstellt am: 27. Sep. 2008 12:16 <-- editieren / zitieren --> Unities abgeben: Nur für 3DTOM
Hallo Thomas, unbedingt ist es nicht notwendig die dll lokal abzulegen. Registrieren muss man das Add-In für SolidWorks immer lokal, jedoch kann die Add-In dll auch auf einem Netzwerkpfad abgelegt werden. Wenn du dies machen möchtest muss du jedoch dein .NET Framework konfigurieren. Am einfachsten, jedoch auch am unsichersten, ist wenn du der Codegruppe LocalIntranet den Berechtigungssatz FullTrust zu weist. Dazu musst du dich durch das .Net Verwaltungsprogramm Mscorcfg.msc kämpfen, welches du unter Systemsteuerung > Verwaltung für die jeweilige .NET Framework Version findest. Natürlich muss man vor solch einer Konfiguration abwägen was einem wichtiger ist (Sicherheit) und ob einem der Aufwand wert ist, damit man zum Beispiel die Anwendung über das Netzwerk sehr einfach updaten kann. Ich habe zudem nur einen von sehr vielen Wegen beschrieben, welchen man gehen kann um .NET Anwendung aus einem Netzwerk verwenden zu können. ------------------ Mfg Daniel www.MySldWorks.de - SolidWorks Api Snippets [Diese Nachricht wurde von tbd am 27. Sep. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
Beiträge: 2675 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** ------------------ Zuletzt beruflich: - SWX2020 SP5; - SAP/PLM+ECTR; - DriveWorks Pro; - Programmierung: VBA, aktuell Visual Studio 2022/VB.Net ------------------ ab 2024 (privat): Onshape und anderes
|
erstellt am: 29. Sep. 2008 09:13 <-- editieren / zitieren --> Unities abgeben: Nur für 3DTOM
Zitat: Original erstellt von tbd: ... Am einfachsten, jedoch auch am unsichersten, ist wenn du der Codegruppe LocalIntranet den Berechtigungssatz FullTrust zu weist. Dazu musst du dich durch das .Net Verwaltungsprogramm Mscorcfg.msc kämpfen, welches du unter Systemsteuerung > Verwaltung für die jeweilige .NET Framework Version findest....
Uff! Wenn ich mir die Seite so anschaue...dann bleib ich doch lieber bei meiner lokalen Lösung. Das hat auch den Vorteil, dass ich die DLL im Netz immer überschreiben kann, weil sie niemand blockiert. Im Übrigen..diese Einstellung müsste ja wohl auf jedem Rechner gemacht werden, der diese DLL verwendet, oder ist das in der DLL generell abgelegt? ------------------ Klaus www.al-ko.com | mein Gästebuch | privat... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tbd Mitglied Teamleiter
Beiträge: 825 Registriert: 26.01.2006 Dell Percision T5400 Intel(R) Xeon(R) CPU X5460 @ 3.16GHz 3,25 GB RAM Nvidia Quadro FX 4600 ----- Win XP Prof SP 3 SW 2008 SP 5.0 PARTsolutions 8.1.08 Cideon SAP PLM 5.103.5.17 Visual Studio 2008
|
erstellt am: 29. Sep. 2008 17:28 <-- editieren / zitieren --> Unities abgeben: Nur für 3DTOM
Hallo Klaus, ohne jetzt noch mehr vom eigentlichem Thema zur .NET Konfiguration abzuschweifen zu wollen, noch dieser Hinweis: Natürlich muss man das .NET Framework auf jedem Rechner Konfigurieren, da es ja lokal auf jedem Rechner installiert wird. Jedoch kann man dies mithilfe der Caspol.exe und dessen Parameteren in einem Script oder ähnliches automatisieren. Dadurch kann das .NET Framework sehr einfach und automatisch konfiguriert werden, ohne das man sich vor jedem Rechner setzen muss. Über die .NET Konfiguration gibt es im Netz aber jede Menge Informationen, nicht nur die offiziellen von Microsoft, welche bei der Verwendung von .NET Anwendungen weiter helfen. ------------------ Mfg Daniel www.MySldWorks.de - SolidWorks Api Snippets [Diese Nachricht wurde von tbd am 29. Sep. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
VBSpawn Mitglied Programmierer
Beiträge: 514 Registriert: 23.08.2005 Sorgfältige Planung ersetzt niemals pures Glück.
|
erstellt am: 30. Sep. 2008 07:20 <-- editieren / zitieren --> Unities abgeben: Nur für 3DTOM
Hallo Klaus, Zitat: Original erstellt von KMassler: Das ist vermutlich ein Sicherheitsproblem, zumindest mit VS-Express ist das mit Netzwerk-Freigaben nicht möglich ("Nicht vertrauenswürdig").
manchmal hilft es wenn man (im InternetExplorer) Extras -> Internetoptionen -> Tab Sicherheit -> Lokales Intranet -> Sites -> Erweitert einfach mal ein Netzlaufwerk einträgt z.b.: X:\ und auf hinzufügen klick (wird Automatisch in file://*.<Domain> umgewandelt). Diese Einstellung kann ein Admin auch per GPO an alle Clients Verteilen. (Das beseitigt auch nervige Messageboxen beim starten von Programmen die auf einem NetzLW liegen). Müsste man mal ausprobieren.... :D (ich glaube das dürfte auch Funktionieren bin mir aber nicht zu 100% sicher) Gruß Micha ------------------ Stell dir vor, es geht, und keiner kriegts hin. Zitat: Interpunktion und Orthographie des Postings sind frei erfunden. Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
Beiträge: 2675 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** ------------------ Zuletzt beruflich: - SWX2020 SP5; - SAP/PLM+ECTR; - DriveWorks Pro; - Programmierung: VBA, aktuell Visual Studio 2022/VB.Net ------------------ ab 2024 (privat): Onshape und anderes
|
erstellt am: 30. Sep. 2008 11:14 <-- editieren / zitieren --> Unities abgeben: Nur für 3DTOM
Danke für die Tipps. Aber ich bleibe lieber dabei, alle DLLs lokal zu verteilen (geht ja auch einfach per Anmeldeskript). Damit bleiben die Originale im Netzwerk immer frei (nicht durch Anwender blockiert), so dass ich die jederzeit durch neue Versionen überschreiben kann. Der Anwender bekommt dann bei der nächsten Anmeldung die neue Version drübergebügelt. ------------------ Klaus www.al-ko.com | mein Gästebuch | privat... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |