Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  Aktive SolidWorksversion mit Vb ermitteln

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS
  
SPS
Autor Thema:  Aktive SolidWorksversion mit Vb ermitteln (4413 mal gelesen)
Carsten Hess
Mitglied
Konstrukteur

Sehen Sie sich das Profil von Carsten Hess an!   Senden Sie eine Private Message an Carsten Hess  Schreiben Sie einen Gästebucheintrag für Carsten Hess

Beiträge: 7
Registriert: 23.07.2004

erstellt am: 25. Apr. 2012 10:08    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo zusammen,

Ich habe ein kleines Problem mit den ermitteln der
SolidWorks Instance.
Ich versuche über getobject(,"SldWorks.Application")
die zuletzt gestartete SolidWorks Version zu ermittelt.
Auf dem Rechner ist SW2010 und sw2011 installiert.
Wenn sw2010 geöffnet ist, will die getobject methode sw2011 ermitteln.
Dies zeigt sich dadurch, dass wenn ich anstatt getobject createobject aufrufe
sw2011 geöffnet wird.
Die versionen sind 64bit Anwendungen.

Kann es sein, dass die 64bit Versionen nicht mehr die zuletzt geöffnete SW-Version in der Registry speichert?

Mfg

Carsten

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Lutz Federbusch
Ehrenmitglied V.I.P. h.c.
Dipl.-Ing. Maschinenbau



Sehen Sie sich das Profil von Lutz Federbusch an!   Senden Sie eine Private Message an Lutz Federbusch  Schreiben Sie einen Gästebucheintrag für Lutz Federbusch

Beiträge: 3094
Registriert: 03.12.2001

alle SW seit 97+
AutoCAD2016-2022
ERP ProAlpha + CA-Link
Intel Core i7-7820K 32GB
Win10x64 Quadro K5000
SpacePilot

erstellt am: 25. Apr. 2012 10:34    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Carsten Hess 10 Unities + Antwort hilfreich

Mache es doch andersherum: Versuche eine Instanz einer genau bezeichneten Version zu bekommen. Ist das Objekt dann leer, so hast Du diese nicht...

    'Set SwApp = CreateObject("SldWorks.Application.10") 'SW2001+
    'Set SwApp = CreateObject("SldWorks.Application.13")'SW2005
    'Set SwApp = CreateObject("SldWorks.Application.14") 'SW2006
    Set SwApp = CreateObject("SldWorks.Application.17") 'SW2009

------------------
Lutz Federbusch
Mein Gästebuch
Der Mensch, Herr oder Sklave der Technik?

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Carsten Hess
Mitglied
Konstrukteur

Sehen Sie sich das Profil von Carsten Hess an!   Senden Sie eine Private Message an Carsten Hess  Schreiben Sie einen Gästebucheintrag für Carsten Hess

Beiträge: 7
Registriert: 23.07.2004

erstellt am: 25. Apr. 2012 10:38    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hi Lutz,

das hatte ich mir auch schon gedacht. Allerdings
würde ich damit das Problem nur umgehen.
Ich frage mich ob SolidWorks die aktuelle Version
nicht mehr speichert oder ob in meinem Betriebssystem bzw. Programm
irgendetwas nicht stimmt.

Gruß

Carsten

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

StefanBerlitz
Guter-Geist-Moderator
IT Admin (CAx)



Sehen Sie sich das Profil von StefanBerlitz an!   Senden Sie eine Private Message an StefanBerlitz  Schreiben Sie einen Gästebucheintrag für StefanBerlitz

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: 26. Apr. 2012 09:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Carsten Hess 10 Unities + Antwort hilfreich


24025_zuletzt-verwendete-version.png


24025_zur-clsid-passende-version.png

 
Hallo Carsten,

Zitat:
Original erstellt von Carsten Hess:
Ich frage mich ob SolidWorks die aktuelle Version nicht mehr speichert oder ob in meinem Betriebssystem bzw. Programm irgendetwas nicht stimmt.

Doch, SolidWorks schreibt das zurück in die Registry, genauer gesagt in den Schlüssel HKEY_CLASSES_ROOT\SldWorks.Application\CLSID . Dort wird als Standardwert die CLSID eingesetzt, die dann zur passenden SolidWorks Verison in der Registry führt.

Unter Windows 7 ist dieser Schlüssel allerdings im Gegensatz zu früher nur für Administratoren schreibberechtigt (weil unter HKLM und nicht HKCU), deswegen musst du wahlweise SolidWorks als Admin starten bzw. bekommst über CreateObject immer die Verion, die zuletzt als Admin gestartet wurde, oder, wenn das öfter gebraucht wird, stellst du die Berechtigung gezielt für diesen einen Schlüssel auch mit Schreibberechtigung für normale Benutzer ein.

Ciao,
Stefan

------------------
Inoffizielle deutsche SolidWorks Hilfeseite    http://solidworks.cad.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Carsten Hess
Mitglied
Konstrukteur

Sehen Sie sich das Profil von Carsten Hess an!   Senden Sie eine Private Message an Carsten Hess  Schreiben Sie einen Gästebucheintrag für Carsten Hess

Beiträge: 7
Registriert: 23.07.2004

erstellt am: 26. Apr. 2012 09:15    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hi Stefan,

vielen Dank für deine Aufklärung.
Dies würde ja dann bedeuten, dass unter Win 7 bei einem User mit Hauptbenutzerrechten
im regelfall nicht mehr die zuletzt gespeicherte Version mit
der API zu holen ist. Es sei denn man geht den Weg den Lutz beschrieben hat.

Schade.

Vielen Dank für deine Erklärung.

Gruß

Carsten

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

HartmutT
Mitglied
Dipl.-Ing (TU) MB


Sehen Sie sich das Profil von HartmutT an!   Senden Sie eine Private Message an HartmutT  Schreiben Sie einen Gästebucheintrag für HartmutT

Beiträge: 790
Registriert: 16.06.2006

SWX 2019 SP5.0
MaxxDB 2021.SP0.02 Linked Jan 18 2021 (64bit)

erstellt am: 26. Apr. 2012 09:36    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Carsten Hess 10 Unities + Antwort hilfreich

Hi Gemeinde!
Ich möchte auf keinen Fall die Diskussion zum Thema unterbrechen oder ablenken...
aber auch folgende Frage/Sache mit in den Raum stellen.
Ich denke, eng mit diesem Thema zu verbinden ist folgende unschöne Sache, die wir ab WIN7 spüren:
Für eine spätere Besprechung einer Konstruktionslösung starte ich ein SWXSolidWorks und lade ne große BG.
Gehe dann zum normalen Geschäft über, starte ein 2. SWXSolidWorks
(ja, warum macht er das, fragen jetzt verschiedene Leute, aber das darf man ja machen, also machen es hier einige Personen)
Nun im 2. SWXSolidWorks nutze ich meine Helferlein-Makros.
Hier sagt mein Makro "Nein, Du kannst mich nicht benutzen, Du hast keine Zeichnung vor Dir!"
Warum, ich sitze doch vor ner Zeichnung!!!
Nein, sagt das Makro, Du hast in der ersten gestarteten SWXSolidWorks-Anwendung eine BG
Also funze ich hier nicht
Kann man da Abhilfe schaffen?
Wie habt Ihr das gelöst, dieses Problem?
Freu mich auf die Lösungsvorschläge, Grüßle H.

------------------
Hartmut

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

StefanBerlitz
Guter-Geist-Moderator
IT Admin (CAx)



Sehen Sie sich das Profil von StefanBerlitz an!   Senden Sie eine Private Message an StefanBerlitz  Schreiben Sie einen Gästebucheintrag für StefanBerlitz

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: 26. Apr. 2012 09:46    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Carsten Hess 10 Unities + Antwort hilfreich

Hallo Hartmut,

Zitat:
Original erstellt von HartmutT:
Wie habt Ihr das gelöst, dieses Problem?

Darauf achten nicht 2 SolidWorks-Prozesse parallel offen zu haben. Ernsthaft.

Ciao,
Stefan

------------------
Inoffizielle deutsche SolidWorks Hilfeseite    http://solidworks.cad.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

StefanBerlitz
Guter-Geist-Moderator
IT Admin (CAx)



Sehen Sie sich das Profil von StefanBerlitz an!   Senden Sie eine Private Message an StefanBerlitz  Schreiben Sie einen Gästebucheintrag für StefanBerlitz

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: 26. Apr. 2012 09:55    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Carsten Hess 10 Unities + Antwort hilfreich

Hallo Carsten,

Zitat:
Original erstellt von Carsten Hess:
Dies würde ja dann bedeuten, dass unter Win 7 bei einem User mit Hauptbenutzerrechten
im regelfall nicht mehr die zuletzt gespeicherte Version mit der API zu holen ist.

Wenn der keine Schreibberechtigung auf dem Schlüssel hat ist das so. Ich weiß zwar nicht so genau, was du mit "gespeicherter Version" meinst, ein erfolgreiches Aufrufen eines SolidWorks versucht diesen Schlüssel zu aktualiseren.

Das eine hat eigentlich wenig mit dem anderen zu tun, die Methode von Lutz versucht herauszufinden, welche Versionen installiert sind und dann ggf. gezielt eine bestimmte Version aufzurufen. Wenn also 2010 und 2011 auf dem Rechner installiert ist bekommst du in beiden Fällen ja eine positive Rückmeldung und weißt immer noch nicht, welche Version interaktiv von einem "normalen" User aufgerufen wurde.

Also unterm Strich: entweder du entscheidest, welche Version aufgerufen werden soll (dann mit der Versionsnummer) oder du verlässt dich darauf, was dir CreateObejct/GetObject liefert auf die Gefahr hin, dass ein normaler Nutzer eben zuletzt eine andere Version aufgerufen hatte als der Admin eingestellt hatte. Das einfachste ist dann wirklich die Berechtigung zu öffnen.

Ciao,
Stefan

------------------
Inoffizielle deutsche SolidWorks Hilfeseite    http://solidworks.cad.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Carsten Hess
Mitglied
Konstrukteur

Sehen Sie sich das Profil von Carsten Hess an!   Senden Sie eine Private Message an Carsten Hess  Schreiben Sie einen Gästebucheintrag für Carsten Hess

Beiträge: 7
Registriert: 23.07.2004

erstellt am: 26. Apr. 2012 10:09    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hi Stefan,

allerdings kann ich mit getobject alle SolidWorksversionen durchgehen
bis eine Version erfolgreich gefunden wurde. Diese ist dann geöffnet.
Sollte kein Ergebnis erfolgen ist auch keine SolidWorksversion geöffnet.

Es erscheint mir ein wenig aufwendig das jeder der das Makro nutzen will
erst die berechtigungen der Registry mit einem Adminzugang ändern muss.

Gruß

Carsten

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

StefanBerlitz
Guter-Geist-Moderator
IT Admin (CAx)



Sehen Sie sich das Profil von StefanBerlitz an!   Senden Sie eine Private Message an StefanBerlitz  Schreiben Sie einen Gästebucheintrag für StefanBerlitz

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: 26. Apr. 2012 10:33    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Carsten Hess 10 Unities + Antwort hilfreich

Ein anderer Schnack: hast du es denn statt mit GetObject einfach mit
Code:
Set swApp = Application.SldWorks

probiert? Wenn ich mich nicht irre bekommst du damit immer das aktuelle Application-Objekt, also die Sitzung, aus der du gerade dein Makro heraus aufgerufen hast.

Ciao,
Stefan

------------------
Inoffizielle deutsche SolidWorks Hilfeseite    http://solidworks.cad.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

HartmutT
Mitglied
Dipl.-Ing (TU) MB


Sehen Sie sich das Profil von HartmutT an!   Senden Sie eine Private Message an HartmutT  Schreiben Sie einen Gästebucheintrag für HartmutT

Beiträge: 790
Registriert: 16.06.2006

SWX 2019 SP5.0
MaxxDB 2021.SP0.02 Linked Jan 18 2021 (64bit)

erstellt am: 26. Apr. 2012 10:34    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Carsten Hess 10 Unities + Antwort hilfreich


Makro-Wunsch-WIN7.JPG

 
...genau 
und so wird auch mein Wunsch erfüllbar!
im Makro bei mehreren laufenden SWXSolidWorks-Anwendungen einfach ein Auswahlfenster
siehe Bildchen
wo anwählbar ist, welches SWXSolidWorks gemeint ist.

------------------
Hartmut

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Carsten Hess
Mitglied
Konstrukteur

Sehen Sie sich das Profil von Carsten Hess an!   Senden Sie eine Private Message an Carsten Hess  Schreiben Sie einen Gästebucheintrag für Carsten Hess

Beiträge: 7
Registriert: 23.07.2004

erstellt am: 26. Apr. 2012 10:53    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

ich versuche die SolidWorks instance aus einer vb.net Anwendung zu ermitteln.

Trotzdem Danke für den Tipp

Gruß

Carsten

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

contraengineer
Mitglied
Maschinenbauer

Sehen Sie sich das Profil von contraengineer an!   Senden Sie eine Private Message an contraengineer  Schreiben Sie einen Gästebucheintrag für contraengineer

Beiträge: 6
Registriert: 27.03.2014

HP Z420
Intel Xeon E5-1620 v2 @3,7GHz
32 GB Ram
AMD FirePro W7000 (leider)

Windows7 SP1 (64bit)
ProE WF3 (M250) mit Intralink 3.4
Creo3 (M070) mit Windchill PDM-Link10.2 M030-CPS11
Solidworks 2012 SP5 mit EPDM

erstellt am: 22. Jan. 2015 18:41    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Carsten Hess 10 Unities + Antwort hilfreich

Probieren Sie mal die Methode GetLatestSupportedFileVersion des SldWorks-Objektes:

Code:

Dim oswApp As SldWorks.SldWorks
Dim lSldversion As Long

Set oswApp = Application.SldWorks
lSldversion = oswApp.GetLatestSupportedFileVersion
MsgBox lSldversion


Zur Interpretation siehe API reference

------------------
Viele Grüße!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Thisoft
Mitglied
Konstrukteur


Sehen Sie sich das Profil von Thisoft an!   Senden Sie eine Private Message an Thisoft  Schreiben Sie einen Gästebucheintrag für Thisoft

Beiträge: 178
Registriert: 10.04.2010

erstellt am: 23. Jan. 2015 09:46    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Carsten Hess 10 Unities + Antwort hilfreich

Hallo zusammen,

um unter .NET aus mehreren geöffneten SWX-Instanzen die richtige auszuwählen hätte ich was anzubieten:

Code:
    Private Function ConnectSWX() As SWX.SldWorks

        Dim sldproclist As Process() = Process.GetProcessesByName("sldworks")
        Dim rot As System.Runtime.InteropServices.ComTypes.IRunningObjectTable
        Dim ppmk As System.Runtime.InteropServices.ComTypes.IMoniker
        Dim Meldung As String = "Es wurden mehrere Solidworks-Prozesse gefunden! Bitte die Kennung des gewünschten Prozesses angeben!" & vbCrLf
        Dim AktProc As Integer = 0
        For i = 0 To UBound(sldproclist)
            Meldung += CStr(i) & "  " & sldproclist(i).MainWindowTitle & vbCrLf
        Next
        If UBound(sldproclist) > 0 Then
            AktProc = InputBox(Meldung, "SWX-Sitzung auswählen!", 0)
        End If
        Dim sldproc As Process = Process.GetProcessesByName("sldworks")(AktProc)
        CreateItemMoniker(Nothing, "SolidWorks_PID_" & sldproc.Id.ToString(), ppmk)
        GetRunningObjectTable(0, rot)
        Dim swAppObj As Object = Nothing
        rot.GetObject(ppmk, swAppObj)
        If swAppObj IsNot Nothing Then
            Return DirectCast(swAppObj, SldWorks.SldWorks)
Else
    Return Nothing
        End If
    End Sub


Ich mißbrauche hier allerdings quick&dirty nur eine gewöhnliche Messagebox als "Auswahlfenster". Sieht nicht besonders schick aus, erfüllt aber den Zweck. Sollte jemand sich bemüßigt fühlen, da jetzt noch ein cooles Formular drumrumzubauen kann er uns ja gerne daran teilhaben lassen.

Gruß Thilo

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2024 CAD.de | Impressum | Datenschutz