| |
| KISTERS 3DViewStation: Effektiver Know-how-Schutz von sensiblen Produktdaten, eine Pressemitteilung
|
Autor
|
Thema: Disassemble automatisieren (7506 mal gelesen)
|
CoolEagle Mitglied NC-Programmierer
Beiträge: 45 Registriert: 14.11.2003
|
erstellt am: 01. Nov. 2011 15:57 <-- editieren / zitieren --> Unities abgeben:
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
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 / zitieren --> Unities abgeben: Nur für CoolEagle
|
CoolEagle Mitglied NC-Programmierer
Beiträge: 45 Registriert: 14.11.2003
|
erstellt am: 02. Nov. 2011 19:25 <-- editieren / zitieren --> Unities abgeben:
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
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 / zitieren --> Unities abgeben: Nur für CoolEagle
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
Beiträge: 45 Registriert: 14.11.2003
|
erstellt am: 08. Nov. 2011 18:45 <-- editieren / zitieren --> Unities abgeben:
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
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 / zitieren --> Unities abgeben: Nur für CoolEagle
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
Beiträge: 45 Registriert: 14.11.2003
|
erstellt am: 09. Nov. 2011 15:31 <-- editieren / zitieren --> Unities abgeben:
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
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 / zitieren --> Unities abgeben: Nur für CoolEagle
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
Beiträge: 45 Registriert: 14.11.2003
|
erstellt am: 09. Nov. 2011 17:21 <-- editieren / zitieren --> Unities abgeben:
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 Ehrenmitglied V.I.P. h.c. Head of CAD, Content & Collaboration / IT-Manager
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 / zitieren --> Unities abgeben: Nur für CoolEagle
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
Beiträge: 45 Registriert: 14.11.2003
|
erstellt am: 10. Nov. 2011 06:49 <-- editieren / zitieren --> Unities abgeben:
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 Ehrenmitglied V.I.P. h.c. Head of CAD, Content & Collaboration / IT-Manager
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 / zitieren --> Unities abgeben: Nur für CoolEagle
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 ExplicitPublic 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
Beiträge: 45 Registriert: 14.11.2003
|
erstellt am: 10. Nov. 2011 15:54 <-- editieren / zitieren --> Unities abgeben:
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 Ehrenmitglied V.I.P. h.c. Head of CAD, Content & Collaboration / IT-Manager
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 / zitieren --> Unities abgeben: Nur für CoolEagle
|
CoolEagle Mitglied NC-Programmierer
Beiträge: 45 Registriert: 14.11.2003
|
erstellt am: 10. Nov. 2011 19:15 <-- editieren / zitieren --> Unities abgeben:
|
RSchulz Ehrenmitglied V.I.P. h.c. Head of CAD, Content & Collaboration / IT-Manager
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 / zitieren --> Unities abgeben: Nur für CoolEagle
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
Beiträge: 45 Registriert: 14.11.2003
|
erstellt am: 11. Nov. 2011 08:38 <-- editieren / zitieren --> Unities abgeben:
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 Ehrenmitglied V.I.P. h.c. Head of CAD, Content & Collaboration / IT-Manager
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 / zitieren --> Unities abgeben: Nur für CoolEagle
Dann versuche es mal mit dem call-Befehl Code: Option ExplicitPublic 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
Beiträge: 45 Registriert: 14.11.2003
|
erstellt am: 11. Nov. 2011 09:13 <-- editieren / zitieren --> Unities abgeben:
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 Ehrenmitglied V.I.P. h.c. Head of CAD, Content & Collaboration / IT-Manager
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 / zitieren --> Unities abgeben: Nur für CoolEagle
|
CoolEagle Mitglied NC-Programmierer
Beiträge: 45 Registriert: 14.11.2003
|
erstellt am: 11. Nov. 2011 09:27 <-- editieren / zitieren --> Unities abgeben:
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 |