Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Disassemble automatisieren

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
Autor Thema:  Disassemble automatisieren (7297 mal gelesen)
CoolEagle
Mitglied
NC-Programmierer


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

Beiträge: 45
Registriert: 14.11.2003

erstellt am: 01. Nov. 2011 15:57    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,

ich habe schon viel gesucht, aber noch keine Antwort gefunden:
Ich möchte per Makro ein "Disassemble" aufrufen und anschliessend bestätigen, dass dieser auch durchgeführt wird. Das Ganze mache ich in einem CATScript.

Set wshShell = CreateObject( "WScript.Shell" )
CATIA.Application.StartCommand("Disassemble")
wshShell.AppActivate ("Disassemble")
wshShell.SendKeys "{ENTER}"
wshShell.SendKeys "{ESCAPE}"      ' Test ob sich das Disassemble schliessen lässt
wshShell.SendKeys "{ESCAPE}"

Funktioniert natürlich nicht

Nachdem ich zwischenzeitlich ein Sleep mit eingebaut habe, habe ich bemerkt, dass
1. nach StartCommand das Fenster "Disassemble" korrekt aktiv ist, OK-Button markiert, so dass man direkt ENTER drücken könnte, und
2. nach Aufruf des SendKeys das Fenster bzw. der OK-Button nicht mehr aktiv ist.

Ich habe auch das AppActivate schon rausgelassen, denn standardmässig ist das Fenster nach StartCommand ja richtig fokussiert.

Weiss noch jemand eine Lösung?

Gruß, Jan

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

HoBLila
Mitglied
Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx


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

Beiträge: 1118
Registriert: 29.05.2008

DELL PRECISION T3500
Intel(R) Xeon(R) CPU W3540 @ 2.93GHz
12285 MB RAM
NVIDIA Quadro FX 1800
Microsoft Windows 7 Enterprise Service Pack 1
CATIA V5 R19 SP09 HF69
VB6.5
CAA RADE CDC

erstellt am: 02. Nov. 2011 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 CoolEagle 10 Unities + Antwort hilfreich

Hast Du Disassemble auch mal in der Suchfunktion eingegeben?

Wie wär's damit: http://ww3.cad.de/foren/ubb/Forum137/HTML/003454.shtml#000003


------------------
Mit freundlichen Grüßen,
Henry Schneider
alias Lila

Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren:
Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen,
die Natur versucht, immer bessere Idioten zu bauen

Xing

[Diese Nachricht wurde von HoBLila am 02. Nov. 2011 editiert.]

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

CoolEagle
Mitglied
NC-Programmierer


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

Beiträge: 45
Registriert: 14.11.2003

erstellt am: 02. Nov. 2011 19:25    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

wie bereits im Eröffnungstext in der 2. Zeile geschrieben:
JA ICH HABE GESUCHT!
Und ja, ich habe den Thread (der sich nicht ansatzweise mit meiner Thematik beschäftigt) auch schon längst gefunden. Vielleicht ist das nicht ganz klar geworden:

Bei mir geht es darum, das das aufgerufene Disassemble-Fenster nicht mehr fokussiert ist.

(Sorry, aber jedesmal wenn ich hier was schreibe, kriege ich nur als Antwort "hast du schon gesucht?". Antwort: JA!)

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

HoBLila
Mitglied
Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx


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

Beiträge: 1118
Registriert: 29.05.2008

DELL PRECISION T3500
Intel(R) Xeon(R) CPU W3540 @ 2.93GHz
12285 MB RAM
NVIDIA Quadro FX 1800
Microsoft Windows 7 Enterprise Service Pack 1
CATIA V5 R19 SP09 HF69
VB6.5
CAA RADE CDC

erstellt am: 08. Nov. 2011 16:25    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 CoolEagle 10 Unities + Antwort hilfreich

Hallo CooleEdge,

ja hast Recht in den neuen Windows-Versionen hat sich durch die UAC einiges geändert.

bei mir funktioniert folgender Code, kann sicher noch aufgeräumt und eingekürzt werden:

Code:

Sub CATMain()

    Set WshShell = CreateObject("WScript.Shell")
    Call CATIA.StartCommand("Disassemble")
    CATIA.RefreshDisplay = True
    Call WshShell.AppActivate("Disassemble", True)
   
    Call WshShell.SendKeys("%{TAB}", True)
    Call WshShell.SendKeys("{ENTER}", True)

End Sub


------------------
Mit freundlichen Grüßen,
Henry Schneider
alias Lila

Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren:
Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen,
die Natur versucht, immer bessere Idioten zu bauen

Xing

[Diese Nachricht wurde von HoBLila am 08. Nov. 2011 editiert.]

[Diese Nachricht wurde von HoBLila am 08. Nov. 2011 editiert.]

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

CoolEagle
Mitglied
NC-Programmierer


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

Beiträge: 45
Registriert: 14.11.2003

erstellt am: 08. Nov. 2011 18:45    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 Henry,

danke für Deine Antwort.

Ich habe das bei mir mal ausprobiert, aber es funktioniert leider nicht. Und wo du sagst UAC: ich habe Win7 64bit laufen.
Aber nichts desto trotz verzweifle ich gerade ein bisschen. Ich habe weiter geforscht. Folgendes macht bei mir keinen Unterschied:
wshShell.SendKeys "{ENTER}"
call wshShell.SendKeys ("{ENTER}", True)

Aber das war noch lange nicht alles. Ich habe das Gefühl, dass Catia mir mit seiner Makro-Ausführung mal wieder einen Streich spielt, denn:

Code:
Set WshShell = CreateObject("WScript.Shell")
WshShell.SendKeys "^{ESC}"    'STRG+ESC = Startmenue oeffnen
For i = 1 to 10000000         'Pause erzwingen
Next
WshShell.SendKeys "Text"

funktioniert, öffnet das Windows-Startmenü und gibt in das Suchfeld den Text ein. (Ohne die Pause hat das Makro bei mir teilweise nichtmal das Startmenü geöffnet. Wahrscheinlich war Windows gerade dabei das Startmenü zu öffnen, als der Text kam, und hat es deshalb abgebrochen.)

Code:
Set WshShell = CreateObject("WScript.Shell")
WshShell.SendKeys "%{TAB}"   'ALT+TAB = zu Editor zurueck springen
For i = 1 to 10000000         'Pause erzwingen
Next
WshShell.SendKeys "Text"

funktioniert nicht, und noch besser:

Für folgenden Schritt habe ich einfach den Editor geöffnet (Startmenü\Zubehör\Editor) und dann das Makro gestartet:

Code:
Set WshShell = CreateObject("WScript.Shell")
wshShell.AppActivate ("Unbenannt - Editor")   ' parallel geoeffneten Editor focussieren
For i = 1 to 10000000         'Pause erzwingen
Next
WshShell.SendKeys "Text"

Hier sehe ich wie der Editor focussiert wird, der Cursor blinkt. Aber nach der Pause wird die Texteingabe nicht durchgeführt, sondern das Fenster verliert den Focus   , CATIA wird aktiv, aber es erfolgt keine Texteingabe   

Hat da noch jemand ne Ahnung?  

P.S.: vielleicht sollte ich noch erwähnen, dass ich mit einem .CATScript arbeite...

[Diese Nachricht wurde von CoolEagle am 09. Nov. 2011 editiert.]

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

HoBLila
Mitglied
Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx


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

Beiträge: 1118
Registriert: 29.05.2008

DELL PRECISION T3500
Intel(R) Xeon(R) CPU W3540 @ 2.93GHz
12285 MB RAM
NVIDIA Quadro FX 1800
Microsoft Windows 7 Enterprise Service Pack 1
CATIA V5 R19 SP09 HF69
VB6.5
CAA RADE CDC

erstellt am: 09. Nov. 2011 09:25    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 CoolEagle 10 Unities + Antwort hilfreich

Hallo CoolEagle,

ja Win 7 ist mit seiner Bevormundung hier echt mies, ich habe hier auch massenhaft Probleme dadurch.
Unter anderem hatte ich eben auch grad ein anderes Makro mit SendKeys, welches nicht mehr wollte.

Und ich kann auch bestätigen, dass man nun Wartezeiten einbauen muss, dass die Dialoge sonst nicht richtig hoch kommen oder die Texte darauf nicht richtig angeordnet sind.

Ich arbeite fast ausschließlich nur mit CATVBA, versuch daher mein Makro mal als eigenes Modul, so wie es ist, als CATVBA und selektier vorher das Element, was durch das Disassemble soll.

Dann zu Deinen anderen Sachen: Ich habe das jetzt leider alles ncith so ganz verstanden, bzw. bin raus. :-)
Du möchtest doch Dissasemble automatisieren, oder doch etwas anderes?

------------------
Mit freundlichen Grüßen,
Henry Schneider
alias Lila

Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren:
Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen,
die Natur versucht, immer bessere Idioten zu bauen

Xing

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

CoolEagle
Mitglied
NC-Programmierer


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

Beiträge: 45
Registriert: 14.11.2003

erstellt am: 09. Nov. 2011 15:31    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

Das wird immer verrückter... Habe ein CATVBA angelegt, das ich über ein selbst angelegtes Symbol in der Symbolleiste starte.
Code:
Set WshShell = CreateObject("WScript.Shell")
CATIA.Application.StartCommand ("Disassemble")
For i = 1 To 100000000        'Pause erzwingen
Next
WshShell.SendKeys "{ENTER}"
WshShell.SendKeys "bla"
WshShell.SendKeys "^{ESC}"    'STRG+ESC = Startmenue oeffnen
For i = 1 To 100000000        'Pause erzwingen
Next
WshShell.SendKeys "Text"
Auf dem Bildschirm passiert dann folgendes:
1. Pause
2. Startmenü öffnet sich
3. Pause
4. "Text" im Suchfeld + Disassemble kommt gleichzeitig 

Ziel ist ein Disassemble zu automatisieren in der Form:
1. Geometrie selektieren (kein Problem)
2. Disassemble starten (auch kein Problem)
3. Disassemble mit OK bestätigen

In der Dokumentation habe ich kein Disassemble gefunden, nehme an, das das Disassemble selbst sowas wie ein Makro ist. Daher auch das StartCommand...

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

HoBLila
Mitglied
Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx


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

Beiträge: 1118
Registriert: 29.05.2008

DELL PRECISION T3500
Intel(R) Xeon(R) CPU W3540 @ 2.93GHz
12285 MB RAM
NVIDIA Quadro FX 1800
Microsoft Windows 7 Enterprise Service Pack 1
CATIA V5 R19 SP09 HF69
VB6.5
CAA RADE CDC

erstellt am: 09. Nov. 2011 17: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 Nur für CoolEagle 10 Unities + Antwort hilfreich

Und warum sendest Du dann so viel Text hin und her?

Funktioniert mein CATVBA wirklich nicht?

------------------
Mit freundlichen Grüßen,
Henry Schneider
alias Lila

Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren:
Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen,
die Natur versucht, immer bessere Idioten zu bauen

Xing

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

CoolEagle
Mitglied
NC-Programmierer


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

Beiträge: 45
Registriert: 14.11.2003

erstellt am: 09. Nov. 2011 17:21    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 Henry,

ich sende so viel Text hin und her, um zu sehen wo die Eingabe hin geht, wo der Fokus zu dem Zeitpunkt liegt. Im letzten Beispiel wird das "bla" z.B. verschluckt, und das {ENTER} greift natürlich auch nicht.

Wir reden hier auch von CATVBA (Menü Tools\Makro\Visual Basic Editor), und nicht von CATVbs? Ich habe meinen letzten Versuch jedenfalls im CATVBA gemacht...

[Diese Nachricht wurde von CoolEagle am 09. Nov. 2011 editiert.]

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

RSchulz
Moderator²
Head of CAD, Content & Collaboration / IT-Manager



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

Beiträge: 5541
Registriert: 12.04.2007

@Work
Lenovo P510
Xeon E5-1630v4
64GB DDR4
Quadro P2000
256GB PCIe SSD
512GB SSD
SmarTeam V5-6 R2016 Sp04
CATIA V5-6 R2016 Sp05
E3.Series V2019
Altium Designer/Concord 19
Win 10 Pro x64

erstellt am: 09. Nov. 2011 18:01    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 CoolEagle 10 Unities + Antwort hilfreich

Hallo,
du musst auf die Fenster für die Eingabe warten. Unsaubere Lösung ist natürlich eine Warteschleife allerdings bestimmt nicht nur eine For Next. Die wird ohne Befehl innerhalb von wenigen ms durchlaufen. Wenn überhaupt muss ein sleep und DoEvents noch mit in die Schleife. Die saubere Lösung wäre wirklich per Schleife mit dem hwnd-Handle auf das Programm zu warten, dann die Befehle abzufeueren und dann wieder per Handle zu warten, bis das Fenster wieder zu ist.

unsaubere Lösung:

Code:

    Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Code:

    For i = 0 To 50
        Sleep(10)
        Application.DoEvents()
    Next

saubere Lösung:

Code:

    Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Public Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As IntPtr) As Integer


Code:

    Dim hWndTmp As Long
    Dim objWshShell As Object
    Dim strTitle as String

    objWshShell = CreateObject("Wscript.Shell")
    strTitle = "Fenstername"

    'auf das Fenster warten
    Do

        hWndTmp = FindWindow(vbNullString, strTitle)
        DoEvents()

        If hWndTmp <> 0 Then

            SetForegroundWindowEx(hWndTmp)
            objWshShell.SendKeys "{ENTER}"
            objWshShell.SendKeys "^{ESC}"
            objWshShell.SendKeys "Text"

        end if

    Loop Until hWndTmp <> 0

    'warten bis das Fenster geschlossen ist
    Do

        DoEvents()
        hWndTmp = FindWindow(vbNullString, strTitle)

    Loop Until hWndTmp = 0

... weiterführende Code


HTH

------------------
MFG
Rick Schulz

Nettiquette (CAD.de)  -  Was ist die Systeminfo?  -  Wie man Fragen richtig stellt.  -  Unities

[Edit RSchulz] Sorry hatte nur ne Minute Zeit und gerade noch ein paar Fehler gefunden und korrigiert  [\Modedit RSchulz]

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

CoolEagle
Mitglied
NC-Programmierer


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

Beiträge: 45
Registriert: 14.11.2003

erstellt am: 10. Nov. 2011 06:49    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 Rick,

danke für die ausführliche Antwort.
Ja, die "Pause" würde ich auch gerne "sinnvoll" umgehen 


In Deinem Code sind für mich viele neue Sachen drin. Geschichten wie

  • Public Declare Function
  • Lib "user32"
  • ByVal
  • IntPtr
  • vbNullString
  • DoEvents()
sind für mich neu, nachlesbar, aber im Zusammenhang größtenteils verständlich. Muss ich mich nochmal in ner ruhigen Minute (oder Stunde ) genauer mit auseinandersetzen. Aber jetzt zu meinen Versuchen:


Ich habe jetzt nur mit deiner "sauberen Lösung" probiert. Im CATScript läuft es gar nicht, weil das schon mit dem "Declare" in der 1. Zeile nicht klar kommt. Daher habe ich es im CATVBA nachvollziehen wollen.

CATVBA bricht mit "User defined Type not defined" in der 2. Zeile ab. Ich gehe mal davon aus, dass es über das "IntPtr" stolpert.
Auch das "DoEvents()" ist schon vorab rot gemarkert.

Kannst Du da nochmal drauf gucken woran das liegen kann?

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

RSchulz
Moderator²
Head of CAD, Content & Collaboration / IT-Manager



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

Beiträge: 5541
Registriert: 12.04.2007

@Work
Lenovo P510
Xeon E5-1630v4
64GB DDR4
Quadro P2000
256GB PCIe SSD
512GB SSD
SmarTeam V5-6 R2016 Sp04
CATIA V5-6 R2016 Sp05
E3.Series V2019
Altium Designer/Concord 19
Win 10 Pro x64

erstellt am: 10. Nov. 2011 09:13    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 CoolEagle 10 Unities + Antwort hilfreich

Hallo,
ich bin davon usgegangen, dass du dich etwas mit der Sache auskennst...

> Public definiert eine Variable oder Funktion im Gesamtkontext. Sprich man kann die so definierten Dinge im gesamten CATVBA oder Programm verwenden
> Declare definiert eine Funktion
> Lib "user32" ist eine Windows Library, die eben unter anderem diese Funktion zur Verfügung stellt
> ByVal betdeutet einfach nur, dass die übergebene Variable kopiert und nicht als Referenz übergeben wird
> IntPtr ist eine Integerdefinition, die für die Funktion von Bedeutung ist.
> vbNullString ist eine Leerdefinition
> DoEvents bedeutet, dass andere Events Vorang erhalten

Verwende anstatt DoEvents() die Funktion einfach ohne (), also DoEvents.
Die Deklaration der Funktion muss vor dem eigentlichen Funktionsaufruf oder kann auch in einem eigenen Modul definiert werden. Bei Ersterem kann es auch mit Private deklariert werden, insofern die Funktion nur in diesem Modul verwendet wird. Bei letzterem muss es als Public definiert werden, da ansonsten die Funktion in einem anderen Modul nicht zur Verfügung steht.

Code:

Option Explicit

Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As IntPtr) As Integer

Sub CATMain()

    Dim hWndTmp As Long
    Dim objWshShell As Object
    Dim strTitle as String

    objWshShell = CreateObject("Wscript.Shell")
    strTitle = "Fenstername"

    'auf das Fenster warten
    Do

        hWndTmp = FindWindow(vbNullString, strTitle)
        DoEvents

        If hWndTmp <> 0 Then

            SetForegroundWindowEx(hWndTmp)
            objWshShell.SendKeys "{ENTER}"
            objWshShell.SendKeys "^{ESC}"
            objWshShell.SendKeys "Text"

        end if

    Loop Until hWndTmp <> 0

    'warten bis das Fenster geschlossen ist
    Do

        DoEvents
        hWndTmp = FindWindow(vbNullString, strTitle)

    Loop Until hWndTmp = 0

End Sub


Ich habe die Sachen aus einem bestehenden .Net-Projekt eben rauskopiert. Da läuft das etwas anders ab.

Mehr werde ich nun wirklich nicht mehr dazu schreiben. Da solltest du dich schon besser mal selbst noch etwas einlesen!

------------------
MFG
Rick Schulz

Nettiquette (CAD.de)  -  Was ist die Systeminfo?  -  Wie man Fragen richtig stellt.  -  Unities

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

CoolEagle
Mitglied
NC-Programmierer


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

Beiträge: 45
Registriert: 14.11.2003

erstellt am: 10. Nov. 2011 15:54    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 Rick,

danke nochmal für Deine ausführliche Antwort.
Ich glaube da gab es ein kleines Missverständnis. Ich wollte gar nicht dass du auf die Details wie "Public" & Co. ein gehst, weil ich mir das (was mir fehlt) selbst erarbeiten möchte. Das Neue an den Themen war hauptsächlich der Zugriff auf Systemfunktionen, bisher war ich meist nur innerhalb von Catia unterwegs. Ausserdem wollte ich mich hier auf das Kernproblem konzentrieren. Aber nun genau dazu:

Nach Anpassung an Catia-Eigenheiten habe ich Dein Script zum Laufen bekommen. Wenn das Ganze komplett läuft, werde ich das nochmal posten. Aus dem CATVBA-Editor läuft das Makro jetzt einwandfrei.

Jetzt hat sich mein Problem etwas gewandelt. Denn wenn ich die .catvba (bzw. das Modul darin) als Symbol in eine Workbench einbinde, und dieses dann über das Symbol starte, geht nur das Disassemble-Fenster auf, das wars. Die Windowhandles werden ignoriert, verursachen aber auch keinen Fehler.

Wo liegt der Unterschied zwischen "Script im CATVBA-Editor laufen lassen" und "Script per Symbol starten"? Bisher hatte ich da keinerlei Probleme/Abweichungen, denn beide Male wird doch der Deklarationsbereich und danach die Sub CATMain() aufgerufen...

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

RSchulz
Moderator²
Head of CAD, Content & Collaboration / IT-Manager



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

Beiträge: 5541
Registriert: 12.04.2007

@Work
Lenovo P510
Xeon E5-1630v4
64GB DDR4
Quadro P2000
256GB PCIe SSD
512GB SSD
SmarTeam V5-6 R2016 Sp04
CATIA V5-6 R2016 Sp05
E3.Series V2019
Altium Designer/Concord 19
Win 10 Pro x64

erstellt am: 10. Nov. 2011 16: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 Nur für CoolEagle 10 Unities + Antwort hilfreich

Was für ein Betriebssystem hast du?

------------------
MFG
Rick Schulz

Nettiquette (CAD.de)  -  Was ist die Systeminfo?  -  Wie man Fragen richtig stellt.  -  Unities

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

CoolEagle
Mitglied
NC-Programmierer


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

Beiträge: 45
Registriert: 14.11.2003

erstellt am: 10. Nov. 2011 19: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

Win7 prof 64 bit

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

RSchulz
Moderator²
Head of CAD, Content & Collaboration / IT-Manager



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

Beiträge: 5541
Registriert: 12.04.2007

@Work
Lenovo P510
Xeon E5-1630v4
64GB DDR4
Quadro P2000
256GB PCIe SSD
512GB SSD
SmarTeam V5-6 R2016 Sp04
CATIA V5-6 R2016 Sp05
E3.Series V2019
Altium Designer/Concord 19
Win 10 Pro x64

erstellt am: 10. Nov. 2011 20:58    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 CoolEagle 10 Unities + Antwort hilfreich

Wenn du ein Programm im Editor ausführst, dann läuft das langsamer als zur normalen Laufzeit. Das Problem ist, dass seid Win7 dieser Aufblendeffekt den Vorgang, vom Fenster ist geöffnet bis zum Fenster ist ansprechbar leicht verzögert. Daher musst du leider trotzdem eine kleine Warteschleife einbauen und ich würde dir vorschlagen es mal so zu versuchen...

Code:

Option Explicit

Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As IntPtr) As Integer

Sub CATMain()

    Dim hWndTmp As Long
    Dim objWshShell As Object
    Dim strTitle as String

    objWshShell = CreateObject("Wscript.Shell")
    strTitle = "Fenstername"

    'auf das Fenster warten
    Do

        hWndTmp = FindWindow(vbNullString, strTitle)
        DoEvents

        If hWndTmp <> 0 Then

            For i = 0 To 50
                Sleep(5)
                DoEvents
            Next

            SetForegroundWindowEx(hWndTmp)
            objWshShell.SendKeys "{ENTER}"
            objWshShell.SendKeys "^{ESC}"
            objWshShell.SendKeys "Text"

        end if

    Loop Until hWndTmp <> 0

    'warten bis das Fenster geschlossen ist
    Do

        DoEvents
        hWndTmp = FindWindow(vbNullString, strTitle)

    Loop Until hWndTmp = 0

End Sub



------------------
MFG
Rick Schulz

Nettiquette (CAD.de)  -  Was ist die Systeminfo?  -  Wie man Fragen richtig stellt.  -  Unities

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

CoolEagle
Mitglied
NC-Programmierer


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

Beiträge: 45
Registriert: 14.11.2003

erstellt am: 11. Nov. 2011 08: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

Hallo Rick,

habe nochmal weiter getestet und habe die Pausen auch an unterschiedlichen Stellen eingesetzt, leider ohne Erfolg. Aber einen Schritt bin ich weiter:

Wenn ich das Script aus dem CATVBA-Editor starte, gibt das SetForegroundWindow ein True zurück und alles funktionert.

Wenn ich das Script aus Catia heraus über das Symbol starte, gibt das SetForegroundWindow ein False zurück.

Danach habe ich noch ein AllowSetForegroundWindow mit der PID von Catia probiert. Aber auch hier das gleiche Ergebnis, und das AllowSetForegroundWindow gibt ebenfalls ein False zurück.

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

RSchulz
Moderator²
Head of CAD, Content & Collaboration / IT-Manager



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

Beiträge: 5541
Registriert: 12.04.2007

@Work
Lenovo P510
Xeon E5-1630v4
64GB DDR4
Quadro P2000
256GB PCIe SSD
512GB SSD
SmarTeam V5-6 R2016 Sp04
CATIA V5-6 R2016 Sp05
E3.Series V2019
Altium Designer/Concord 19
Win 10 Pro x64

erstellt am: 11. Nov. 2011 08:42    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 CoolEagle 10 Unities + Antwort hilfreich

Dann versuche es mal mit dem call-Befehl

Code:
Option Explicit

Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As IntPtr) As Integer

Sub CATMain()

    Dim hWndTmp As Long
    Dim objWshShell As Object
    Dim strTitle as String

    objWshShell = CreateObject("Wscript.Shell")
    strTitle = "Fenstername"

    'auf das Fenster warten
    Do

        hWndTmp = FindWindow(vbNullString, strTitle)
        DoEvents

        If hWndTmp <> 0 Then

            For i = 0 To 50
                call Sleep(5)
                call DoEvents()
            Next

            call SetForegroundWindowEx(hWndTmp)
            objWshShell.SendKeys "{ENTER}"
            objWshShell.SendKeys "^{ESC}"
            objWshShell.SendKeys "Text"

        end if

    Loop Until hWndTmp <> 0

    'warten bis das Fenster geschlossen ist
    Do

        call DoEvents()
        hWndTmp = FindWindow(vbNullString, strTitle)

    Loop Until hWndTmp = 0

End Sub


------------------
MFG
Rick Schulz

Nettiquette (CAD.de)  -  Was ist die Systeminfo?  -  Wie man Fragen richtig stellt.  -  Unities

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

CoolEagle
Mitglied
NC-Programmierer


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

Beiträge: 45
Registriert: 14.11.2003

erstellt am: 11. Nov. 2011 09:13    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 Rick,

nein, mit Call funktioniert es leider auch nicht.

Sleep funktioniert mit und ohne Call,
DoEvents geht nicht mit Call, weder mit, noch ohne "()" hinter dem DoEvents,
und bei SetForegroundWindow macht es keinen Unterschied ob mit oder ohne Call, leider...

Du bist eher in .NET unterwegs und weniger in Catia, oder? Vielleicht ist das mal wieder eine Catia-Eigenheit?

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

RSchulz
Moderator²
Head of CAD, Content & Collaboration / IT-Manager



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

Beiträge: 5541
Registriert: 12.04.2007

@Work
Lenovo P510
Xeon E5-1630v4
64GB DDR4
Quadro P2000
256GB PCIe SSD
512GB SSD
SmarTeam V5-6 R2016 Sp04
CATIA V5-6 R2016 Sp05
E3.Series V2019
Altium Designer/Concord 19
Win 10 Pro x64

erstellt am: 11. Nov. 2011 09:17    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 CoolEagle 10 Unities + Antwort hilfreich

Sowohl als auch... Ich mache allerdings keine neuen Makros mehr unter VBA, sondern nur in .Net. Das hat einige Vorteile und éigentlich keine Nachteile. Ich habe aber durchaus noch einige sehr komplexe Makros unter VBA, die ich eigentlich auch im Moment nicht migrieren möchte 

Hast du denn die 64bit-VBA-Umgebung installiert, die sich auf der Installations-CD in dem Ordner VBA befindet?

------------------
MFG
Rick Schulz

Nettiquette (CAD.de)  -  Was ist die Systeminfo?  -  Wie man Fragen richtig stellt.  -  Unities

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

CoolEagle
Mitglied
NC-Programmierer


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

Beiträge: 45
Registriert: 14.11.2003

erstellt am: 11. Nov. 2011 09:27    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

wg. migrieren: never touch a running system  

Bei mir gibt es im Installations-Ordner VBA nur eine vba6.msi, da gibt es keine Unterscheidung zwischen 32bit und 64bit.
Ich hab das gerade probehalber auch noch mal neu installiert, ändert aber auch nichts...

Ich glaube langsam würde dein Profilbild auch bei mir passen 

[Diese Nachricht wurde von CoolEagle am 11. Nov. 2011 editiert.]

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)2023 CAD.de | Impressum | Datenschutz