Uruchamianie makra podczas nagrywania

Witam, używam tego makra do wyświetlania tytułu dokumentu Solidworks w eksploratorze Windows. Chciałem wiedzieć, czy możliwe jest aktywowanie makra podczas każdego nagrywania (bez ingerencji użytkownika)? z tego co rozumiem najlepszym rozwiązaniem byłby dodatek, ale ponieważ zmagam się z VS Studio to szukam alternatywy. Dziękuję

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim propMgr As CustomPropertyManager
Dim titleValue As String
Dim resolved As String
Dim wasResolved As Boolean

Sub main()
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    If swModel Is Nothing Then
        MsgBox "No document is open!"
        Exit Sub
    End If

    ' Access the custom property manager
    Set propMgr = swModel.Extension.CustomPropertyManager("")

    ' Read current value of custom property "Title"
    wasResolved = propMgr.Get4("Title", False, resolved, titleValue)
    
    If titleValue = "" Then
        MsgBox "Custom property 'Title' is empty!"
        Exit Sub
    End If

    ' Copy to Summary Info Title
    swModel.SummaryInfo(swSumInfoTitle) = titleValue

    ' Optional: read back to verify
    MsgBox "Summary Info Title set to: " & swModel.SummaryInfo(swSumInfoTitle)
End Sub

Witam serdecznie;

Co dokładnie masz na myśli, mówiąc:

To nie jest zbyt jasne...

Brakuje też kilku istotnych informacji:
Wersja Solidworks
Zakres makra (wszystkie dokumenty Solidworks, tylko części, części i złożenia, rysunki...?)

Co rozumiem:
W makrze wyodrębniasz wartość niestandardowej właściwości " Tytuł " z otwartego dokumentu SolidWorks, a następnie umieszczasz tę wartość w polu Tytuł informacji podsumowujących dokument, sprawdzając, czy nie ma błędów braku dokumentu lub pustych właściwości.

(Uwaga: Radzę nie używać tej samej właściwości (nazwy właściwości) kilka razy dla różnych zmiennych... (tutaj " Tytuł " dla Właściwości niestandardowych i " Tytuł " dla właściwości Podsumowanie systemu Windows (zakładka: Podsumowanie w podsumowaniu informacji dokumentu Solidworks)

Proponuję dostosować swoje makro tak, aby działało na wszystkich plikach w danym katalogu:

Od Ciebie zależy, czy zmodyfikujesz wartość w:
folderPath = "C:\Ścieżka\Do\Folderu"

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim propMgr As CustomPropertyManager
Dim titleValue As String
Dim resolved As String
Dim wasResolved As Boolean
Dim filePath As String
Dim folderPath As String

Sub main()
    Set swApp = Application.SldWorks

    ' Modifier ici pour mettre le chemin du dossier
    folderPath = "C:\Chemin\Vers\Le\Dossier\"
    
    filePath = Dir(folderPath & "*.sld*") ' Trouve les fichiers .sldprt, .sldasm, .slddrw

    Do While filePath <> ""
        ' Ouvre le document
        Set swModel = swApp.OpenDoc6(folderPath & filePath, _
                                     GetDocType(folderPath & filePath), _
                                     0, "", 0, 0)

        If Not swModel Is Nothing Then

            Set propMgr = swModel.Extension.CustomPropertyManager("")
            wasResolved = propMgr.Get4("Title", False, resolved, titleValue)

            If titleValue <> "" Then
                swModel.SummaryInfo(swSumInfoTitle) = titleValue
                swModel.Save
            End If

            swApp.CloseDoc swModel.GetTitle
        Else
            MsgBox "Impossible d'ouvrir : " & filePath
        End If

        filePath = Dir() ' Passe au fichier suivant
    Loop

    MsgBox "Traitement terminé."
End Sub

' Fonction utilitaire pour déterminer le type de document selon l'extension
Function GetDocType(fileName As String) As Long
    Dim ext As String
    ext = LCase$(Mid$(fileName, InStrRev(fileName, ".") + 1))
    Select Case ext
        Case "sldprt"
            GetDocType = 1 ' pièce
        Case "sldasm"
            GetDocType = 2 ' assemblage
        Case "slddrw"
            GetDocType = 3 ' mise en plan
        Case Else
            GetDocType = 0 ' inconnu
    End Select
End Function

Poza tym temat został już omówiony tutaj:

Ale to nie przeszkadza z tego powodu:
=> Możliwe jest użycie menedżera właściwości Solidworks w celu zduplikowania zmiennej do informacji Podsumowanie.
https://help.solidworks.com/2022/french/SolidWorks/sldworks/HelpViewerDS.aspx?version=2022&prod=SolidWorks&lang=french&path=sldworks%2Fc_file_properties.htm&id=5fb9c079433c46d7961143b30be81132

=> jest to łatwiejsze dzięki narzędziom MyCadTools, takim jak Smartproperties, lub w stacji przetwarzania za pomocą narzędzi Integration lub batchProperties.

1 polubienie

Witam, dziękuję za odpowiedź i linki (bardzo przydatne).

Moim celem nie jest wykonanie makra na każdym rekordzie części (złożeniu, części lub rysunku), ale raczej pobranie wartości właściwości o nazwie Title i wyświetlenie jej w eksploratorze Windows, tak jak w przypadku tego przechwytywania na każdym rekordzie, stąd uwaga o tym, że makro nie jest w tym przypadku najlepszym rozwiązaniem, ponieważ musi być wykonywane za każdym razem.

w Eksploratorze Windows

oraz na SolidWorks

Używam SW 23 i SW24, mam nadzieję, że wkrótce zainwestuję w wersję SW25

Czy możliwe jest na przykład automatyczne uruchomienie makra podczas nagrywania (montażu, rysunku lub części) bez ingerencji użytkownika? Wydaje mi się, że jest to możliwe w przypadku dodatków, ale nie jest bezpieczne w przypadku makr VBA.

Witam
Jest to możliwe w przypadku vba, ale musisz zmodyfikować skrót uruchamiający oprogramowanie, aby makro działało po otwarciu oprogramowania.
Możesz przechwytywać działania w oprogramowaniu, ale musisz scementować kod i jego drzwi wyjściowe, aby uniknąć zachowań blokujących użycie.
Innym rozwiązaniem jest utworzenie makra nagrywania, które zastępuje ikonę nagrywania oprogramowania i umieszczenie na nim skrótu Ctrl+S, tak aby był całkowicie przezroczysty dla użytkownika.

3 polubienia

Witam, dziękuję za odpowiedź.

Wypróbowałem obie metody i wszystkie działają świetnie.

Tylko ostatnie pytanie, chciałbym spróbować utworzyć dodatek za pomocą VS. Mam kod, utwórz bibliotekę dll, ale dodatek nie jest wyświetlany w SolidWorks.

Bonjour;
Il faut probablement charger l'add-in via les compléments Solidworks.
Utiliser la méthode ISldWorks::LoadAddIn en passant le nom de l'add-in
Język PUIS
Après avoir chargé l'add-in, utilisez ISldWorks::GetAddInObject

Pour une documentation plus globale sur la creation d'add-in:

Il devrait maintenant etre accessible depuis:
image

Si le code est bien realisé, il devrait être accessible ici:
image

Serait-il possible de nous fournir le code réalisé ?

Dziękuję za dokumenty.

Próbowałem ponowić tworzenie dodatku VB.NET dla SOLIDWORKS przy użyciu interfejsu API , ale mam tylko SolidWorks, który jest otwarty, gdy uruchamiam kod bez Hello World, a dodatek nie jest obecny w menu dodatków.

Bonjour;

Extrait de l'aide Solidworks:

Do czego służy dodatek?

Biblioteka DLL dodatku musi zostać utworzona jako serwer COM i musi:

  1. Zaimplementuj obiekt współtworzący, który obsługuje SwAddin.
  2. Podczas rozmowy instalacyjnej:

Zarejestruj CLSID dodatku w folderze HKEY_LOCAL_MACHINE\SOFTWARE\SOLIDWORKS\AddIns i ustaw następujące klucze rejestru:

  • Wartość domyślna to 1 lub 0, gdzie wartość 1 włącza dodatek w menedżerze dodatków, tak aby był ładowany, gdy użytkownik uruchamia oprogramowanie SOLIDWORKS.
  • Opis do tekstowego opisu dodatku, który jest wyświetlany w menedżerze dodatków.
  • Tytuł tekstu Tytuł opisu, który jest wyświetlany w menedżerze dodatków.
  1. Zdefiniuj procedury obsługi zdarzeń zgodnie z potrzebami.

W swojej implementacji ISwAddin::ConnectToSW dodatek może:

  1. Wywołaj ISldWorks::SetAddinCallbackInfo i przekaż uchwyt instancji dodatku oraz obiekt, który obsługuje metody wywołania zwrotnego. Oprogramowanie SOLIDWORKS zatrzymuje ten obiekt i wykonuje wywołania zwrotne.
  2. Wywołaj ISldWorks::AddMenuItem3 i przekaż metodę wywołania zwrotnego skojarzoną z elementem menu.
  3. Wywołaj ISldWorks::AddToolbar4 i przekaż metodę wywołania zwrotnego powiązaną z przyciskiem paska narzędzi.

On en parle ici aussi:

Et un autre exemple de code ici:

Dans cet exemple la ligne qui t'intéresse est la création de la clef dans le base de registre pour l'identification de l'add-in dans le menu Solidworks:
Dim nazwa klucza Jako ciąg = « SOFTWARE\SolidWorks\Addins{ » + t.GUID. ToString() + « } »

Mais sans ton code je suis en train de te fournir des documents en vrac sans contexte.

Przede wszystkim musisz mieć prawo do modyfikowania rejestru.

2 polubienia

Rzeczywiście, jeśli masz uprawnienia do modyfikowania rejestru, dodatek utworzony za pomocą samouczka SW jest wyświetlany bez dotykania niczego innego

Witam, dziękuję za odpowiedzi.

Podczas uruchamiania kodu pojawił się następujący błąd: Wystąpił błąd podczas zapisywania informacji rejestracyjnych w rejestrze. Do korzystania z wybranych opcji wymagane są uprawnienia administratora. Użyj wiersza polecenia administratora, aby wykonać te zadania. Teraz otwieram VS w trybie administratora, ale nadal nie działa

Witam

Nie sądzę, aby problemem było uruchomienie VS w trybie administratora.
Problemem jest głównie dostęp do zapisu w rejestrze (znaczenie komunikatu o błędzie).
Ogólnie rzecz biorąc, w bezpiecznym środowisku rejestr jest blokowany przez dział IT, aby uniemożliwić komukolwiek modyfikowanie tej bazy danych, co może całkowicie zakłócić działanie stacji roboczej, prowadząc do czystego i prostego formatowania.
Aby wdrożyć dodatek, musisz skontaktować się z działem IT, kto zajmie się wdrożeniem (czy chce to zrobić i czy nie ma potrzeby wykonywania różnych iteracji, które będą wymagały ponownego wdrożenia).
Dlatego osobiście wolę VBA, który jest znacznie bardziej elastyczny w IT i przynajmniej mogę zarządzać moimi makrami według własnego uznania.

3 polubienia