| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Creo |
Autor
|
Thema: Numlock per vbs Skript überwachen (5928 mal gelesen)
|
neulermer Mitglied B. Eng. Maschinenbau
Beiträge: 54 Registriert: 23.04.2008 Solid Edge v20 Pro E Wildfire 4
|
erstellt am: 30. Sep. 2011 16:11 <-- editieren / zitieren --> Unities abgeben:
Ich habe im Internet ein kleines Skript gefunden, welches den Numlock überwacht und in ein/ausschaltet, hier mal der Code: ' benötigte API-Deklarationen Private Declare Sub keybd_event Lib "user32" ( _ ByVal bVk As Byte, _ ByVal bScan As Byte, _ ByVal dwFlags As Long, _ ByVal dwExtraInfo As Long) Private Const VK_NUMLOCK = &H90 Private Const KEYEVENTF_KEYUP = &H2 ' NUM-Lock drücken ' Zunächst niederdrücken und dann wieder loslassen keybd_event VK_NUMLOCK, 1, 0, 0 keybd_event VK_NUMLOCK, 1, KEYEVENTF_KEYUP, 0 ' NUM-Lock aktivieren (falls deaktiviert) If Not (GetKeyState(vbKeyNumlock) = 1) Then keybd_event VK_NUMLOCK, 1, 0, 0 keybd_event VK_NUMLOCK, 1, KEYEVENTF_KEYUP, 0 End If Nur wenn ich das ausführe, dann kommt der Fehler: Fehler: Anweisungsende erwartet Zeile 2 Zeichen 17 Code: 800A0401
Der Fehler liegt also hier: Private Declare Sub
Wie kann ich den beheben? Eigentlich müsste das Skript ja stimmen, denn ich habe es von hier: http://www.vbarchiv.net/tipps/tipp_563-num-lock-ein-ausschalten.html Was funktioniert denn dann bei mir nicht? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
EWcadmin Moderator Konstrukteur (Dipl.-Ing. Maschinenbau), CAD-/PDM-Admin.
Beiträge: 3202 Registriert: 27.10.2005
|
erstellt am: 30. Sep. 2011 16:41 <-- editieren / zitieren --> Unities abgeben: Nur für neulermer
|
k.reichert Mitglied Entw. Ing
Beiträge: 13 Registriert: 13.05.2011 Creo Elements/Pro5 M110 + PLM Windchill 9.xx WIN7 Enterprise, Dell Workstation Xenon Quadcore 3,4 MHz, 8GB
|
erstellt am: 30. Sep. 2011 22:25 <-- editieren / zitieren --> Unities abgeben: Nur für neulermer
Hallo Neulermer, den Code, den du angibst, funktioniert nur in einer Visual Basic Umgebung wie z.B. die VBAs in MS-Word oder MS-Excel. Visual Basic Script (*.vbs) kennt keine Typ-Deklarationen, d.h. die Syntax passt so nicht. Ich bin mir aus dem Gedächtnis auch nicht sicher, ob die Declare-Funktion so geht. Würde eher meinen, dass man hier einen Verweis auf ein Objekt erstellen muss, dessen Methoden etc. man anschießend nutzen kann; das geht auch mit einem Event-Handler (was hier wohl der Fall ist). Ich schließe mich Thomas an: Axels Punkt ist ein echt nützliches Tool, das zwischenzeitlich sogar erkennt, dass ein CAD-Programm läuft und dann das Dezimalkomma im Ziffernblock auf "." ändern; in andern Anwendungen, zu denen gewechselt wird, ist das Dezimalkomma wieder wie dort erwartet ",". Gruß Klaus 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. Okt. 2011 08:54 <-- editieren / zitieren --> Unities abgeben:
|
U_Suess Moderator CAD-Admin / manchmal Konstrukteur
Beiträge: 10560 Registriert: 14.11.2001 CREO 4 M120 (+Geniustool für Creo 6.0.2) PDMLink 11.0 M030 NTSI Contender E64 SC8 mit NVIDIA Quadro P4000 Intel Core i7-10700KF / 3,80 GHz 64GB DDR4-RAM / 2933 MHz Win 10 Prof. 64Bit (20H2)
|
erstellt am: 04. Okt. 2011 09:07 <-- 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: 04. Okt. 2011 09:24 <-- editieren / zitieren --> Unities abgeben:
Tja eben das ist das problem, das Vbs Skript das ich ausführe schlatet den mit dem Wait for Window befehl hin und her wie es gerade lustig ist und dann funktioniert der folgende teil nicht mehr. Deshalb der Aufwand. Axels Punkt konnte demauch nicht entgegenwirken. Wenn der Numlock nicht an ist, dann funktioniert die Tastenkombi Strg + Umschalt + Pfeiltaste Links nicht mehr bzw. nur die Umsschalttaste nicht mehr und so kann ich dann den Dateinamen nicht kopieren. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
arossbach Mitglied Ingenieur Masch.bau
Beiträge: 1181 Registriert: 13.06.2001 CREO 4 simufact.forming 13 Windows 7 Professional Service Pack 1 64 Bit Dell Precision WorkStation T3500 32 GB RAM Grafik: NVIDIA Quadro 4000
|
erstellt am: 04. Okt. 2011 09:47 <-- 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: 04. Okt. 2011 10:03 <-- editieren / zitieren --> Unities abgeben:
Hmm, soweit wie ich das jetzt sehe, ist das eine extra Anwendung. Ich bräuchte das aber direkt in meinem Skript, dass der mir genau an den wichtigen Stellen den Numlock aktiviert. Den Intervall von 1sec ist ohnehin zu lang, da ich eine Wait Zeit von 50ms habe und der bestenfalls in 1 sec mit dem gesamten Skript fertig ist. Ich stell mal das Beispiel Skript ein: 'Option Explizit 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
'------------------------------------------------------------------------------------------------ '------------------------------------------------------------------------------------------------ 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 '------------------------------------------------------------------------------------------------ 'Dateinamen vorbereiten sk "^s"
WaitForWindow("Objekt speichern") sk "{Tab 5}" sk "{BS 4}" sk ".drw" sk "+^{left}" <== Hier funktioniert die Umschalttaste nicht mehr sk "^c" sk "^a" sk "^o" WaitForWindow("Datei öffnen") sk "^v" sk "~"
WScript.Quit()
Ein verlängern der Wartezeit ist auch nicht sinnvoll, weil ich die ja mit dem Wait for Window befehl auf ein minimum reduzieren konnte und nicht wieder das gegenteil bewirken will. Außerdem ändert das nichts an dem Problem dass die Umschalttaste nicht geht wenn der Wait for Window befehl im Skript drin ist. Kann man das vielleicht irgendwie nach bedarf programmieren?
[Diese Nachricht wurde von neulermer am 04. Okt. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Manuku Mitglied Mechanical Engineer
Beiträge: 131 Registriert: 17.07.2003
|
erstellt am: 04. Okt. 2011 10:47 <-- editieren / zitieren --> Unities abgeben: Nur für neulermer
Zitat: Original erstellt von neulermer: sk "+^{left}" <== Hier funktioniert die Umschalttaste nicht mehr [/B]
Bei mir, unter Windows 7, funktioniert 'sk "+^{left}"' egal ob NUMLOCK aktiviert ist oder nicht. Ich weiss deshalb nicht was bei dir passiert wenn NUMLOCK nicht aktiviert ist. Vielleicht geht aber so etwas, quasi doppelt gemoppelt: sk "+^{left}" sk "^c" sk "{NUMLOCK}" 'aktiviert respektive deaktiviert Numlock sk "+^{left}" 'oder right, je nach dem wie dein Computer auf das erste CTRL+C reagiert sk "^c" sk "{NUMLOCK}" 'Numlock ist wieder so wie vor dem Skript HTH Tobias EDIT: System-Info angepasst (habe zu lange nichts mehr geposted) EDIT2: hat aber offenbar nicht funktioniert [Diese Nachricht wurde von Manuku am 04. Okt. 2011 editiert.] [Diese Nachricht wurde von Manuku am 04. Okt. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
arossbach Mitglied Ingenieur Masch.bau
Beiträge: 1181 Registriert: 13.06.2001 CREO 4 simufact.forming 13 Windows 7 Professional Service Pack 1 64 Bit Dell Precision WorkStation T3500 32 GB RAM Grafik: NVIDIA Quadro 4000
|
erstellt am: 04. Okt. 2011 15:56 <-- editieren / zitieren --> Unities abgeben: Nur für neulermer
Ja klar ist das eine Extra Anwendung. War auch nur ein Beispiel. Schau mal rein (Texteditor) und schau Dir den "Quältext" im Form1 an. Ist VB nicht VB-Script. Wenn Du das getan hast die Frage: Warum überwachst Du nicht mit If GetKeyState(vbKeyNumlock) = 1 Then blabla... um dann bei Bedarf dei Funktion Ein-bzw.Ausschalten auszuführen ? Ehrlich gesagt verstehe ich auch nicht so recht warum die Num-Lock Einstellung Dir das "...Tastenkombi Strg + Umschalt + Pfeiltaste Links ..." vermiesen sollte. Da stimmt irgend etwas anderes nicht. Bei mir funzt das optimal, auch mit Strg-V Eigentlich ist das auch das falsche Forum hier. Hat ja nicht viel mit Pro/E zu tun. Wenn das hier länger dauert ziehen wir besser um. Gruß
------------------ -Axel- CROSSFIRE Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Michael 18111968 Moderator F&E & CAD
Beiträge: 4893 Registriert: 25.07.2002 Wildfire 4 M220 (+SUT 2012) PDMLink 9.1 M050 NVIDIA Quadro FX 1700 Intel DualCore E8400 / 8GB WinXP 64 Prof. SP2
|
erstellt am: 04. Okt. 2011 16:30 <-- editieren / zitieren --> Unities abgeben: Nur für neulermer
|