Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1924to1928
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Handling von einem CATIA Tool Button

Handling von einem CATIA Tool Button
16.03.2023 17:47:57
Betsy

Hallo zusammen,

ich brauche ein VBA Makro, mit dem ich eine Reihe an STL Dateien in CATPart konvertieren kann. Das Makro arbeitet mit findWindow und findWindowEx.
Mein Makro funktioniert auch bis jetzt.

Nun muss ich aber eine neue Funktion hinzufügen, bei dem das Part mit dem CATIA Tool "Mesh Cleaner" gereinigt wird (Tool: s.Bild). Dafür brauche ich die Handling von dem Button(Analyze) und CheckBox(Non-manifold Vertices). Leider bin ich da nicht fündig geworden.

Userbild

Ich habe auch schon mal die Funktion mit den Lücken programmiert, mir fehlen wirklich nur noch die Namen.

Folgendermaßen sieht mein Code aus:

Set selection = CATIA.ActiveDocument.selection
        
        'selection.Clear
        
        selection.Search ("Name=0.0*,all")
        
        Sleep 1000
        
        'Mesh Cleaner ausführen
    
        CATIA.StartCommand "Mesh Cleaner"
        Sleep 500
        
        hmeshcleaner = FindWindow("#32770", "Mesh Cleaner")

        While hTabButtonCleaner = 0
        hTabButtonCleaner = FindWindowEx(hmeshcleaner, 0, vbNullString, "?")      '?
        Wend
        
        While hAnalyzeButtonCleaner = 0
        hAnalyzeButtonCleaner = FindWindowEx(hTabButtonCleaner, 0, "Button", "?")    '?
        Wend
            SendMessage hAnalyzeButtonCleaner, BM_CLICK, 0, 0
        Sleep 1000
        
        While hCBButtonCleaner
        hCBButtonCleaner = FindWindowEx(hmeshcleaner, 0, "Check-Box", "?")    '?
        Wend
            SendMessage hCBButtonCleaner, BM_CLICK, 0, 0
        Sleep 1000
  
        While hApplyButtonCleaner
        hApplyButtonCleaner = FindWindowEx(hmeshcleaner, 0, "Button", "Apply")
        Wend
            SendMessage hApplyButtonCleaner, BM_CLICK, 0, 0
        Sleep 1000
        
        hOKButtonCleaner = FindWindowEx(hmeshcleaner, 0, "Button", "OK")
            SendMessage hOKButtonCleaner, BM_CLICK, 0, 0
        Sleep 1000


An den Stellen wo die Fragezeichen sind, fehlen mir die Handlings von den Button (im Bild rot umkreist). Sonst funktioniert der Rest auch.

Könnte mir jemand sagen, mit was ich die Fragezeichen ersetzen kann?

Ich hoffe die Fragestellung ist verständlich. :)

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Handling von einem CATIA Tool Button
16.03.2023 18:14:51
ralf_b
Nur mal geraten der Button könnte "Analyze" heissen.


AW: Handling von einem CATIA Tool Button
17.03.2023 07:23:18
Betsy
Hey,

das wäre doch zu einfach ;). Leider kam ich damit nicht weiter.


AW: Handling von einem CATIA Tool Button
16.03.2023 18:24:21
volti
Hallo Betsy,

hast Du mal versucht mit einem Window-Spy-Tool den Klassennamen und den Cationtext rauszufinden.
Sollte ja eigentlich das sein, was man sieht aber über ein Spytool bekommt man das wirkliche angezeigt.

Hier eine Möglichkeit mit einem Exceltool bei Überfahren der Anwendung mit der Maus die gewünschten Daten zu erhalten.
https://www.clever-excel-forum.de/Thread-Windows-Spy-und-Pixelfarben

Wenn's gar nicht klappt, bleibt noch die Möglichkeit per Enum alle Kinderfenster durchzuscannen und die gewünschten heraus zu fischen. Ist aber etwas aufwändiger.

Gruß
Karl-Heinz


Anzeige
AW: Handling von einem CATIA Tool Button
16.03.2023 18:41:24
volti
Nachtrag.

Ich nehme hierfür meistens die ID her, sofern jedes Element eine hat. Zur Ermittlung braucht man natürlich dann ein entsprechendes Spy-Tool.
Denke, da kann man sich auch die While-Schleifen sparen. Der Button ist entweder da oder nicht.

Hier ein Beispiel:

Code:


Private Declare PtrSafe Function GetDlgItem Lib "user32" ( _ ByVal hDlg As LongPtr, ByVal nIDDlgItem As Long) As LongPtr Sub Beispiel() SendMessage GetDlgItem(hmeshcleaner, 4900), BM_CLICK, 0, 0 ' 4900=ID End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz



Anzeige
AW: oder WinSpy
16.03.2023 20:04:00
volti
Hi Yal,

Da hatte ich mir vor 20 Jahren mal mit PowerBasic eine EXE-Anwendung geschrieben, die neben den WinSpy-Funktionen (wie meine angeführte Excel-Anwendung) auch eine automatisierte App_Steuerung bereitstellte.

Starten des Tools und die Ausführungsanweisen (eigene Kreationen) kommen zusammen in eine Batch-Datei. Funktioniert heute noch. :-)

Ich denke aber, hier reichen die paar Click-Anweisungen. Diese checken allerdings nicht das Ende der jeweiligen Ausführung, deshalb braucht man wohl ausreichend Sleep.....
Möglich wäre hier auch, ich nenne ihn immer "virtueller Mitarbeiter", das ganze über Mausklicks zu machen.

LG KH


Anzeige
AW: oder WinSpy
16.03.2023 20:12:43
Yal
Ja, das Ding ist nicht ganz neu, aber dafür äusserst stabil. Ich war vor kurzem überrascht, dass AutoIT wieder aufgelebt wird. Es war ein Zeit lang im Netz nicht zu finden. Es ist aber immer noch v3 von 2009.

VG
Yal


AW: Handling von einem CATIA Tool Button
17.03.2023 09:08:56
Betsy
Hallo Karl-Heinz,

tatsächlich hat mich das Excel-Toolweitergebracht. Vielen Dank!

Nun habe ich ein weiteres Problem mit der Checkbox ... Analyze war ein Button, welches ich auch jetzt mit meinem neuen Code handlen kann. Aber wie mach ich das bei einem Check-Box. Da gibt es jetzt mehrere Controltexte(s. Bild).

Userbild

Im Screenshot habe ich die Daten zu dem Check-Box Gelb markiert.

Mein aktueller Code sieht nun so aus:


        'selection.Clear
        
        selection.Search ("Name=0.0*,all")
        
        Sleep 1000
        
        'Mesh Cleaner ausführen
    
        CATIA.StartCommand "Mesh Cleaner"
        Sleep 500
        
        hmeshcleaner = FindWindow("#32770", "Mesh Cleaner")
           
        'find hChildWindow1
        
        hChildWindow1 = 0
        While hChildWindow1 = 0
        
        hChildWindow1 = FindWindowEx(hmeshcleaner, 0, vbNullString, "RootFrame")
        
        Wend
        
        'find hChildWindow2
        
        hChildWindow2 = 0
        While hChildWindow2 = 0
        
        hChildWindow2 = FindWindowEx(hChildWindow1, 0, vbNullString, "Pages")
        
        Wend
    
        'find hChildWindow3
        
        hChildWindow3 = 0
        While hChildWindow3 = 0
        
        hChildWindow3 = FindWindowEx(hChildWindow2, 0, vbNullString, "Deletion")
        
        Wend
        
        'Button Analyze cklick
        
        hAnalyze = 0
        While hAnalyze = 0
        
        hAnalyze = FindWindowEx(hChildWindow3, 0, vbNullString, "Analyze")
        
        Wend
        SendMessage hAnalyze, BM_CLICK, 0, 0
        Sleep 1000

' Hier fehlt der Befehl

        While hApplyButtonCleaner
        hApplyButtonCleaner = FindWindowEx(hmeshcleaner, 0, "Button", "Apply")
        Wend
            SendMessage hApplyButtonCleaner, BM_CLICK, 0, 0
        Sleep 1000
        
        hOKButtonCleaner = FindWindowEx(hmeshcleaner, 0, "Button", "OK")
            SendMessage hOKButtonCleaner, BM_CLICK, 0, 0
        Sleep 1000
    
Kann mir jemand weiterhelfen.


Anzeige
AW: Handling von einem CATIA Tool Button
17.03.2023 09:20:49
Betsy
Hat sich erledigt.

Mein Code sieht nun so aus und es funktioniert einwandfrei.

  'find hChildWindow1
        
        hChildWindow1 = 0
        While hChildWindow1 = 0
        
        hChildWindow1 = FindWindowEx(hmeshcleaner, 0, vbNullString, "RootFrame")
        
        Wend
        
        'find hChildWindow2
        
        hChildWindow2 = 0
        While hChildWindow2 = 0
        
        hChildWindow2 = FindWindowEx(hChildWindow1, 0, vbNullString, "Pages")
        
        Wend
    
        'find hChildWindow3
        
        hChildWindow3 = 0
        While hChildWindow3 = 0
        
        hChildWindow3 = FindWindowEx(hChildWindow2, 0, vbNullString, "Deletion")
        
        Wend
        
        'Button Analyze cklick
        
        hAnalyze = 0
        While hAnalyze = 0
        
        hAnalyze = FindWindowEx(hChildWindow3, 0, vbNullString, "Analyze")
        
        Wend
        SendMessage hAnalyze, BM_CLICK, 0, 0
        Sleep 1000
        
        'ComboBox auswählen
        hComboBox = 0
        While hComboBox = 0
        hComboBox = FindWindowEx(hChildWindow3, 0, vbNullString, "Non-manifold Vertices")
        Wend
        SendMessage hComboBox, BM_CLICK, 0, 0
        Sleep 1000
        
        
        hmeshcleaner = FindWindow("#32770", "Mesh Cleaner")
    
        While hApplyButtonCleaner = 0
        hApplyButtonCleaner = FindWindowEx(hmeshcleaner, 0, "Button", "Apply")
        Wend
            SendMessage hApplyButtonCleaner, BM_CLICK, 0, 0
        Sleep 1000
        
        hOKButtonCleaner = FindWindowEx(hmeshcleaner, 0, "Button", "OK")
            SendMessage hOKButtonCleaner, BM_CLICK, 0, 0
        Sleep 1000
    


Anzeige
AW: Handling von einem CATIA Tool Button
17.03.2023 09:37:04
Volti
Hallo Betzi,
Schön, dass es jetzt geklappt hat.

Wie man sieht, kann man auch ohne Angabe der Klasse arbeiten, solange der Text einmalig ist.

Innerhalb von Dialogfenstern sollte beim nächsten Mal besser mit den IDs gearbeitet werden.
Das ist sicherer und sie sind ja auch alle aufgelistet.

Gruß Karl-Heinz


AW: Handling von einem CATIA Tool Button
17.03.2023 14:09:54
Yal
Sieht gut aus.

Ich würde auf einem klaren Einrücken achten und Leerezeilen vermeiden.
Auch in den While/Wend würde ich immer einen "DoEvents" platzieren: so wird notfalls ein Strg+Break wahrgenommen. Sonst ist es Excel-Absturz.
Ein paar Kommentierung fehlen, zwecks Gesamtbild.

'find hChildWindow1
    hChildWindow1 = 0
    While hChildWindow1 = 0
        hChildWindow1 = FindWindowEx(hmeshcleaner, 0, vbNullString, "RootFrame")
        DoEvents
    Wend
'find hChildWindow2
    hChildWindow2 = 0
    While hChildWindow2 = 0
        hChildWindow2 = FindWindowEx(hChildWindow1, 0, vbNullString, "Pages")
        DoEvents
    Wend
'find hChildWindow3
    hChildWindow3 = 0
    While hChildWindow3 = 0
        hChildWindow3 = FindWindowEx(hChildWindow2, 0, vbNullString, "Deletion")
        DoEvents
    Wend
'Button Analyze cklick
    hAnalyze = 0
    While hAnalyze = 0
        hAnalyze = FindWindowEx(hChildWindow3, 0, vbNullString, "Analyze")
        DoEvents
    Wend
    SendMessage hAnalyze, BM_CLICK, 0, 0
    Sleep 1000
'ComboBox auswählen
    hComboBox = 0
    While hComboBox = 0
        hComboBox = FindWindowEx(hChildWindow3, 0, vbNullString, "Non-manifold Vertices")
        DoEvents
    Wend
    SendMessage hComboBox, BM_CLICK, 0, 0
    Sleep 1000
         
    hmeshcleaner = FindWindow("#32770", "Mesh Cleaner")
    While hApplyButtonCleaner = 0
        hApplyButtonCleaner = FindWindowEx(hmeshcleaner, 0, "Button", "Apply")
        DoEvents
    Wend
    SendMessage hApplyButtonCleaner, BM_CLICK, 0, 0
    Sleep 1000
         
    hOKButtonCleaner = FindWindowEx(hmeshcleaner, 0, "Button", "OK")
    SendMessage hOKButtonCleaner, BM_CLICK, 0, 0
    Sleep 1000
Alles nur Geschmacksache ;-)

Schönes WE

VG
Yal


Anzeige
AW: Handling von einem CATIA Tool Button
17.03.2023 14:23:13
Volti
Hi,

Ich hatte ja schon angeregt, dass m.E. die WHIle-Schleifen überflüssig bzw. sogar schädlich sind.

Zwar kenne ich das Tool nicht, gehe aber davon aus, dass mit Anzeige der Dlgbox alle Controls vorhanden sind. Da muss man nicht drauf warten.
Wenn es den Button nicht findet, hängt das Makro in einer Endlosschleife fest.
Gruß KH

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige