| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für PTC CREO |
Autor
|
Thema: vbs Skript wartet auf Fenster?? (7015 mal gelesen)
|
neulermer Mitglied B. Eng. Maschinenbau
Beiträge: 54 Registriert: 23.04.2008 Solid Edge v20 Pro E Wildfire 4
|
erstellt am: 28. Mrz. 2011 12:00 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe einiges mit dem vbs Skripten erreicht, aber leider funktioniert das nicht immer so wie ich es gerne hätte. Wenn man z.B. einen Befehl ausführt und Pro E nudelt dann irgendwie rum, manchmal geht das schneller manchmal dauert es etwas länger. Ich hab mir halt so beholfen, dass ich die Wartezeit entsprechend lang gemacht habe. Kann man irgendwie im Skript festlegen, dass es warten soll bis ein entsprechendes Fenster aufgegangen ist, bevor es weitermacht? Mapkeys fürhen sich schnellstmöglichst aus, an sowas hab ich gedacht. Weis hier irgendjemand was? Geht das überhaupt? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kingmuh Mitglied Dipl.Ing.(BA) Mechatronik
Beiträge: 95 Registriert: 24.06.2005 Creo 2 M050 PDMLink 10.1 M20 auf HP elitebook 8760w 2.6GHz, 16GB RAM, NVIDIA quadro 4000M, Win7 prof 64bit
|
erstellt am: 29. Mrz. 2011 17:56 <-- editieren / zitieren --> Unities abgeben: Nur für neulermer
Hi, leider habe ich keine Lösung, nur das selbe Problem. Öfters spinnt das VB Script zum z.B. Zeichnungsöffnen, ist immer zum kotzen.. Manchmal macht er auch das falsche Fenster auf, z.B. habe mache ich ASM auf, dann PRT, dann "Zeichnung öffnen" und plötzlich springt er ins ASM Fenster und öffnet die... total sporadisch.. Grüße Johannes Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
neulermer Mitglied B. Eng. Maschinenbau
Beiträge: 54 Registriert: 23.04.2008 Solid Edge v20 Pro E Wildfire 4
|
erstellt am: 29. Mrz. 2011 19:03 <-- editieren / zitieren --> Unities abgeben:
Naja vielleicht gehts ja wirklich nicht. Ich hab mir halt so beholfen, dass ich im vbs skript auch mapkeys ausführe. Alles was halt mit Mapkeys geht. Den rest lass ich vom Skript machen (irgendwas in die zwischenablage kopieren, oder einfügen). Dann hats besser geklappt, aber sobald man halt die ProE Oberfläche verlässt, is es halt nix mehr mit den mapkeys. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
magge84 Mitglied Dipl.-Ing. (Entwicklung)
Beiträge: 66 Registriert: 04.09.2008
|
erstellt am: 04. Apr. 2011 10:12 <-- editieren / zitieren --> Unities abgeben: Nur für neulermer
Hallo zusammen, also soweit ich das beurteilen kann, kann man mit einem VBS-Script nicht warten bis ein anderes Fenster aufgeht. Allerdings kann man eine zusätzliche Pause einbauen. z.b: 'Option Explizit WScript.Sleep 300 Dim Fi, Fso Set Shell = CreateObject("WScript.Shell") Set WshShell = WScript.CreateObject("WScript.Shell") Sub sk(Befehl) 'wscript.echo befehl WshShell.SendKeys(Befehl) WScript.Sleep 100 'Zeit zwischen den SK-Befehlen End Sub WScript.Sleep 2000 '==> zusätzliche Pause sk "%d" sk "u" sk "^c" sk "^a" sk "^o" sk "^v" sk "{END}" sk ".drw" sk "~" WScript.Quit() Hoffe, dass ich euch helfen konnte!! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GunnarHansen Mitglied Engineer
Beiträge: 734 Registriert: 16.09.2009 Creo Parametric 7.0.0.0 Creo View 6.0.0.0 Windchill 11.1 IE 11.0.120 Edge Google Chrome fûr PDMLink HP ZBook. 64bit Lenovo Thinkpad P15 3DConnexion Wireless SpaceMouse
|
erstellt am: 04. Apr. 2011 12:18 <-- editieren / zitieren --> Unities abgeben: Nur für neulermer
|
GunnarHansen Mitglied Engineer
Beiträge: 734 Registriert: 16.09.2009 Creo Parametric 7.0.0.0 Creo View 6.0.0.0 Windchill 11.1 IE 11.0.120 Edge Google Chrome fûr PDMLink HP ZBook. 64bit Lenovo Thinkpad P15 3DConnexion Wireless SpaceMouse
|
erstellt am: 04. Apr. 2011 13:12 <-- editieren / zitieren --> Unities abgeben: Nur für neulermer
Das war aber ein guter Tip. Jetzt kann die generelle Sleep Zeit wieder runter! Scheint SUPER schnell zu laufen. Nochmals 9ü dafür 'Option Explizit
'mapkey "ed": Open excisting drawing. Opens drawing with the same name as active prt or asm if avaiable. 'If avaiable in Commonspace only, the drawing will be added to WS and opens anyway! WScript.Sleep 50 Dim Fi, Fso Set Shell = CreateObject("WScript.Shell") Set WshShell = WScript.CreateObject("WScript.Shell") Sub sk(Befehl) 'wscript.echo befehl WshShell.SendKeys(Befehl) WScript.Sleep 50 'Zeitangabe in Millisekunden End Sub sk "^s" sk "{TAB 3}" sk "{BS 3}" sk "drw" sk "+^{left}" sk "^c" sk "^a" sk "^o" WScript.Sleep 2000 sk "^v" sk "~" WScript.Quit() Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
neulermer Mitglied B. Eng. Maschinenbau
Beiträge: 54 Registriert: 23.04.2008 Solid Edge v20 Pro E Wildfire 4
|
erstellt am: 04. Apr. 2011 13:19 <-- editieren / zitieren --> Unities abgeben:
|
Marco_Taylor Mitglied
Beiträge: 48 Registriert: 03.11.2004 Creo2
|
erstellt am: 07. Apr. 2011 11:33 <-- editieren / zitieren --> Unities abgeben: Nur für neulermer
Hier die gewünschte Funktion fürs vbs. '------------------------------------------------------------------------------------------------ Public Function WaitForWindow(WindowTitle) Set WshShell = WScript.CreateObject("WScript.Shell") success=0 I = 0 Do I = I + 1 WScript.Sleep 300 success=WshShell.AppActivate(WindowTitle) If I = 50 Then x=MsgBox ("Fenster "+Chr(34)& WindowTitle &Chr(34)+" konnte nicht gefunden werden.",48,"Warnmeldung") WaitForWindow = False asyncConnection.Disconnect(2) WScript.quit Exit Do End If Loop Until success If success Then WaitForWindow = True End If End Function '------------------------------------------------------------------------------------------------ Aufruf erfolgt dann einfach mit WaitForWindow("Fenstername")
Läuft bei mir ohne Probleme!!!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GunnarHansen Mitglied Engineer
Beiträge: 734 Registriert: 16.09.2009 Creo Parametric 7.0.0.0 Creo View 6.0.0.0 Windchill 11.1 IE 11.0.120 Edge Google Chrome fûr PDMLink HP ZBook. 64bit Lenovo Thinkpad P15 3DConnexion Wireless SpaceMouse
|
erstellt am: 07. Apr. 2011 12:26 <-- editieren / zitieren --> Unities abgeben: Nur für neulermer
Hallo Marco Schön von dem Meister wieder zu hören! Ich brauche deinen berühmten Tip in mehrere Mapkeys. Super... Wo kommen diese neue Linien hin im .vbs zum öffnen der Zeichnung vom Part? Gruss aus Dänemark. Gunnar Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
neulermer Mitglied B. Eng. Maschinenbau
Beiträge: 54 Registriert: 23.04.2008 Solid Edge v20 Pro E Wildfire 4
|
erstellt am: 07. Apr. 2011 13:01 <-- editieren / zitieren --> Unities abgeben:
|
Marco_Taylor Mitglied
Beiträge: 48 Registriert: 03.11.2004 Creo2
|
erstellt am: 07. Apr. 2011 13:47 <-- editieren / zitieren --> Unities abgeben: Nur für neulermer
Fürs Zeichnung öffen, hab ich was neues in der ProE-VB-Schnittstelle zusammengestellt. Werde es wenn ich mal etwas Zeit habe fertig machen und hier einstellen. Sendkey ist eine nicht so schöne Lösung, da es immer von den Sleeps abhängt, ob es läuft oder nicht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Marco_Taylor Mitglied
Beiträge: 48 Registriert: 03.11.2004 Creo2
|
erstellt am: 07. Apr. 2011 15:38 <-- editieren / zitieren --> Unities abgeben: Nur für neulermer
|
GunnarHansen Mitglied Engineer
Beiträge: 734 Registriert: 16.09.2009 Creo Parametric 7.0.0.0 Creo View 6.0.0.0 Windchill 11.1 IE 11.0.120 Edge Google Chrome fûr PDMLink HP ZBook. 64bit Lenovo Thinkpad P15 3DConnexion Wireless SpaceMouse
|
erstellt am: 07. Apr. 2011 17:47 <-- editieren / zitieren --> Unities abgeben: Nur für neulermer
|
BergMax Ehrenmitglied V.I.P. h.c. Dipl.-Ing. (FH)
Beiträge: 2264 Registriert: 23.08.2005 Creo 4.0 M130 Creo 8.0.3.0 GT/SUT 8.0.0.0 HP z440, Quadro K2200, Win10 Enterp. DualView
|
erstellt am: 07. Apr. 2011 19:39 <-- editieren / zitieren --> Unities abgeben: Nur für neulermer
|
Marco_Taylor Mitglied
Beiträge: 48 Registriert: 03.11.2004 Creo2
|
erstellt am: 08. Apr. 2011 08:12 <-- editieren / zitieren --> Unities abgeben: Nur für neulermer
|
neulermer Mitglied B. Eng. Maschinenbau
Beiträge: 54 Registriert: 23.04.2008 Solid Edge v20 Pro E Wildfire 4
|
erstellt am: 18. Apr. 2011 14:17 <-- editieren / zitieren --> Unities abgeben:
Tja ich habe nun eine weile rumprobiert, habe es aber nicht zum laufen bekommen (zumindest wie es soll). Mein Fenster heist: Objekt speichern Wo muss ich denn das wie genau eintragen, dass der auch auf das fenster wartet und nicht irgendwas weitermacht? Ich habe es irgendwie schon zum laufen gebracht, aber kann es sein, dass danach die Sendkeys nicht mehr funktionieren? Ich habe einfach im Skript: WaitForWindow("Objekt speichern") eingefügt. Leider funktioniert dann die sendKey Geschichte nicht mehr, kann man das nicht kombinieren? Hab ich das überhaupt richtig zusammengebastelt? 'Option Explizit WScript.Sleep 300 Dim Fi, Fso Set Shell = CreateObject("WScript.Shell") Set WshShell = WScript.CreateObject("WScript.Shell") Sub sk(Befehl) 'wscript.echo befehl WshShell.SendKeys(Befehl) WScript.Sleep 500 'Zeitangabe in Millisekunden End Sub '------------------------------------------------------------------------------------------------ Public Function WaitForWindow(WindowTitle) Set WshShell = WScript.CreateObject("WScript.Shell") success=0 I = 0 Do I = I + 1 WScript.Sleep 300 success=WshShell.AppActivate(WindowTitle) If I = 50 Then x=MsgBox ("Fenster "+Chr(34)& WindowTitle &Chr(34)+" konnte nicht gefunden werden.",48,"Warnmeldung") WaitForWindow = False asyncConnection.Disconnect(2) WScript.quit Exit Do End If Loop Until success If success Then WaitForWindow = True End If End Function '------------------------------------------------------------------------------------------------ '================================================================================================ ' Dateiname eintragen '================================================================================================ 'Dateinamen vorbereiten sk "^s" WaitForWindow("Objekt speichern") sk "{Tab 5}" sk "{BS 4}" sk "+^{left}" sk "^c" sk "^a" sk "sys_file" WaitForWindow("Parameter")
sk "^v" sk "{ENTER}" sk "%^{ENTER}" '================================================================================================ ' Datum eintragen '================================================================================================ CreateObject("WScript.Shell").Run "cmd /c <nul set /p""=%date%""|C:\_ProE_Mapkeys\CLIP",0 WScript.Sleep 100 sk "sys_datum"
WaitForWindow("Parameter")
sk "^v" sk "{ENTER}" sk "%^{ENTER}" '================================================================================================ ' User eintragen '================================================================================================ CreateObject("WScript.Shell").Run "cmd /c <nul set /p""=%username%""|C:\_ProE_Mapkeys\CLIP",0 WScript.Sleep 100 sk "sys_user" WaitForWindow("Parameter")
sk "^v" sk "{ENTER}" sk "%^{ENTER}" '================================================================================================ ' Benennung vom Modell Eintragen '================================================================================================ sk "sys_benennung"
WScript.Quit() Oder hat jemand eine bessere Idee, wie man den Dateinamen holen kann? Oder das Datum usw. eintragen? Mit den sys_datum usw. wähle ich per mapkey immer die entsprechende Zeile und Spalte bei den parametern aus. Falls hier jemand eine bessere Idee hat, dann immer her damit! [Diese Nachricht wurde von neulermer am 18. Apr. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Marco_Taylor Mitglied
Beiträge: 48 Registriert: 03.11.2004 Creo2
|
erstellt am: 19. Apr. 2011 10:27 <-- editieren / zitieren --> Unities abgeben: Nur für neulermer
|
neulermer Mitglied B. Eng. Maschinenbau
Beiträge: 54 Registriert: 23.04.2008 Solid Edge v20 Pro E Wildfire 4
|
erstellt am: 19. Apr. 2011 11:28 <-- editieren / zitieren --> Unities abgeben:
|
neulermer Mitglied B. Eng. Maschinenbau
Beiträge: 54 Registriert: 23.04.2008 Solid Edge v20 Pro E Wildfire 4
|
erstellt am: 19. Apr. 2011 12:37 <-- editieren / zitieren --> Unities abgeben:
Soo ich habe nun den Fehler gefunden, und zwar hab ich eine Taste mit dem man den Nummernblock ein und ausschalten kann. Dieser hat mir verhindert, dass das +^{left} richtig funktionierte. Die Umschalttaste scheint nicht gedrückt zu werden, wenn Numlock ausgeschaltet ist. Hat jemand hierfür ne lösung? Oder kann man den Dateinamen (ohne Erweiterung) auch anders holen? P.S. Was für ein Befehl ist denn eigentlich "~" ?? [Diese Nachricht wurde von neulermer am 19. Apr. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BergMax Ehrenmitglied V.I.P. h.c. Dipl.-Ing. (FH)
Beiträge: 2264 Registriert: 23.08.2005 Creo 4.0 M130 Creo 8.0.3.0 GT/SUT 8.0.0.0 HP z440, Quadro K2200, Win10 Enterp. DualView
|
erstellt am: 19. Apr. 2011 23:30 <-- editieren / zitieren --> Unities abgeben: Nur für neulermer
|
GunnarHansen Mitglied Engineer
Beiträge: 734 Registriert: 16.09.2009 Creo Parametric 7.0.0.0 Creo View 6.0.0.0 Windchill 11.1 IE 11.0.120 Edge Google Chrome fûr PDMLink HP ZBook. 64bit Lenovo Thinkpad P15 3DConnexion Wireless SpaceMouse
|
erstellt am: 20. Apr. 2011 07:12 <-- editieren / zitieren --> Unities abgeben: Nur für neulermer
|
Dirty Sanchez Mitglied Entwicklungsingenieur
Beiträge: 2 Registriert: 19.04.2011 HP Z420 Workstation WIN 7 Professional 64 BIT Creo Parametric 2.0 M030 AMD FirePro V7900 16GB RAM,Intel XEON 3,6GHz
|
erstellt am: 20. Apr. 2011 11:37 <-- editieren / zitieren --> Unities abgeben: Nur für neulermer
Hallo Leute, nach der Zeit des "Nur-Mitlesens" wurde es Zeit, dass ich hier auch mal meine Gedanken zur Lösung von ProE-Problemen beisteuere. Bei den angesprochenen Problemen "Zeichnung öffnen" und "auf Fenster warten" möchte ich mal einen anderen Ansatz ins Spiel bringen, und zwar das Programm Autoit. Hier kann man sehr gut mit Fenstern arbeiten und ist außerdem kostenlos sowie leicht verständlich. In meiner Company hab ich das so gelöst, dass ich Autoit mit Mapkey´s zusammenarbeiten lasse. Das erstellte Skript kann man dann auf ".exe" kompilieren und dann in ProE mit einem Mapkey (z.B. zö) aufrufen. Hoffe, euch ein bisschen weitergeholfen zu haben. Dirty Sanchez Hier mal das benötigte Mapkey:
mapkey u @MAPKEY_LABELUmbenennen;~ Select `main_dlg_cur` `MenuBar1`1 `File`;\ mapkey(continued) ~ Close `main_dlg_cur` `MenuBar1`;\ mapkey(continued) ~ Activate `main_dlg_cur` `File.psh_rename`; Und hier mal das benötigte Skript dazu: WinWait("[CLASS:ConsoleWindowClass]", "") ;auf das DOS-Fenster in ProE warten WinClose("[CLASS:ConsoleWindowClass]", "") ;das DOS-Fenster in ProE schließen WinWaitClose("[CLASS:ConsoleWindowClass]", "", 1) ;warten, bis das DOS-Fenster in ProE geschlossen wurde Send("u") ;Mapkey "u" wird gestartet WinWaitActive ("Umbenennen", "") ;auf das aktive Fenster "Umbenennen" warten Send("^c") ;Bauteilnummer kopieren WinClose ("Umbenennen", "") ;Fenster "Umbenennen" schließen WinWaitClose ("Umbenennen", "") ;warten, bis das Fenster "umbenennen geschlossen wurde Send("^o") ;send STRG+o WinWaitActive("Datei öffnen", "", 10) ;auf das Fenster "Datei öffnen" 10 Sekunden langwarten If Not WinExists("Datei öffnen", "") Then Exit ;falls Fenster "Datei öffnen" nicht vorhanden, wird das Skript abgebrochen Send("^v") ;Sende STRG+v Send(".drw{Enter}") ;Sende .drw und anschließend Enter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
neulermer Mitglied B. Eng. Maschinenbau
Beiträge: 54 Registriert: 23.04.2008 Solid Edge v20 Pro E Wildfire 4
|
erstellt am: 16. Mai. 2011 11:17 <-- editieren / zitieren --> Unities abgeben:
|
neulermer Mitglied B. Eng. Maschinenbau
Beiträge: 54 Registriert: 23.04.2008 Solid Edge v20 Pro E Wildfire 4
|
erstellt am: 30. Aug. 2011 13:49 <-- editieren / zitieren --> Unities abgeben:
|