2010 Error --> Piep Piep (X41, T43 und R52?) lauffähes CMD File!!! Windows XP

Luigi.

New member
Themenstarter
Registriert
3 Jan. 2008
Beiträge
222
Hallo X41 T43 und R52 User,

denen das Piepen stört, wenn sie eine nicht IBM konforme HDD oder SDD im book haben.

Nach langem probieren ist nun ein Script fertig, welches im X41 100% läuft! Wer ein T43 oder R52 hat, kann es ja probieren und sagen ob es auch funktioniert. Es geht um die automatische Mute-Schaltung beim herunterfahren und auch automatische Unmute-Schaltung beim hochfahren.

Dazu zwei .cmd oder .bat Dateien schreiben oder gleich hier raus kopieren. Ach so es wird noch das Programm NIRCMD gebraucht.

Erst mal die Skripts und dann ein paar Erläuterungen dazu.

einschalten.cmd
Code:
start "" "D:/Programme/Lenovo/HOTKEY/TPOSDSVC.exe" 
ping 1.1.1.1 -n 1 -w 5000 
D:/NIRCMD/NIRCMD.exe mutesysvolume 0

ausschalten.cmd
Code:
start "" "D:/Programme/Lenovo/HOTKEY/TPOSDSVC.exe" 
ping 1.1.1.1 -n 1 -w 1000 
D:/NIRCMD/NIRCMD.exe mutesysvolume 1 
taskkill /F /IM TPOSDSVC.exe /T

Diese Scripts erstellen, aber darauf achten, daß die angegeben Orte des NIRCMD und des Hotkey-Tools stimmen.

Wenn die Skripts fertig sind dann START --> AUSFÜHREN und gpedit.msc eingeben.
Richtlinien für lokalen Computer --> Computerkonfiguration --> Windows Einstellungen --> Skripts(Start/Herunterfrahren)
- dann bei Start --> Dateien anzeigen lassen und die einschalten.cmd rein kopieren und bei Skripts --> Hinzufügen klicken --> Durchsuchen --> und einschalten.cmd auswählen.
- das gleiche für ausschalten.cmd unter Herunterfahren.

Da für diese Systeme es notwendig ist, daß die IBM-Lenovo Treiber für die Hotkey´s geladen sind, muss der TPOSDSVC.exe Treiber oder Programm geladen sein. Nur leider ist beim normalen herunter fahren, dieser Treiber schon beendet und die Volume Befehle werden nicht mehr umgesetzt. Daher wird er noch mal geladen, der Befehl zum MUTE ausgeführt und dann wieder beendet.

Wichtig ist auch, daß der Treiber oder das Programm TPOSDSVC.exe vollständig geladen ist. Deshalb werden sleep-times oder Wartepausen benötigt!!! Soweit wie ich weiß, gibt es bei Windows CMD keine solcher Befehle.

Darum wird mit:
Code:
ping 1.1.1.1 -n 1 -w 1000

das Warten erzwungen. (ist halt eine Lösung).

der Zahlenwert steht für Millisekunden.
WICHTIG: ihr müsst diesen Wert für euch anpassen (wahrscheinlich erhöhen), da bei mir das auf einer SSD läuft und dementsprechend schnell ist!!!

Vor allem beim einschalten.cmd habe ich mich langsam von 10000 auf die 5000ms genähert. Das erkennt man daran, daß die Hotkeyanzeige kommt, aber die Lautsprecher nicht eingeschaltet werden, dann war das Hotkey-Programm noch nicht vollständig geladen und der nircmd Befehl kam schon, dann funktioniert es nicht. Lieber erst mal mit 30000ms bei HDD und 10000ms bei SSD anfangen und dann nach unten tasten.
Beim ausschalten.cmd kann man von vorn herein kürzere Zeiten nehmen, da fast alles schon beendet ist und nicht so viele Prozesse parallel laufen, wie beim Hochfahren.

Wer gute und brauchbare Zeiten für X41 T43 und R52 ermittelt hat, dann einfach hier einstellen. Aber immer dazu Schreiben, welcher Speichertyp es ist. SSD oder HDD

Update: ThinkWiki-Eintrag (wird am WE durch buergernb aktuallisiert)
 
Hi Luigi,

[quote='Luigi.',index.php?page=Thread&postID=608035#post608035]eshalb werden sleep-times oder Wartepausen benötigt!!! Soweit wie ich weiß, gibt es bei Windows CMD keine solcher Befehle.[/quote]man muss ja nicht unbedingt ein CMD/Batch-File nehmen. Genauso gut kannst du ein VBScript für den Start nutzen. Und wie der Aufruf von dort für das Kommandozeilen-Tool nircmd aussieht und wie man eine bestimmte Zeit das Script pausieren lassen kann, siehst du in meinem VBScript für Standby/Ruhezustand. ;) Et voilà, ein Problem weniger. ;)
 
[quote='buergernb',index.php?page=Thread&postID=608045#post608045]Hi Luigi,

[quote='Luigi.',index.php?page=Thread&postID=608035#post608035]eshalb werden sleep-times oder Wartepausen benötigt!!! Soweit wie ich weiß, gibt es bei Windows CMD keine solcher Befehle.[/quote]man muss ja nicht unbedingt ein CMD/Batch-File nehmen. Genauso gut kannst du ein VBScript für den Start nutzen. Und wie der Aufruf von dort für das Kommandozeilen-Tool nircmd aussieht und wie man eine bestimmte Zeit das Script pausieren lassen kann, siehst du in meinem VBScript für Standby/Ruhezustand. ;) Et voilà, ein Problem weniger. ;)[/quote]Bei VBS ist dann mein Latein am Ende.

Wäre dass dann dein Part? :)
 
Hi,

[quote='Luigi.',index.php?page=Thread&postID=608075#post608075]Ja, ich weiß, aber es ist angedacht, so wenig wie möglich Zusatzprogramme zu installieren.

Am liebsten hätten wir noch das NIRCMD gespart [/quote]genau meine Gedanken. Ich schau mir das am WE an, sollte in VBS leicht zu realisieren sein.
 
ich hab jetzt mal ein all-in-one-paket zusammengeschnürt:

die dateien behalten (ausser dem Hotkey-Tool) alles was man braucht für shutdown und auch hibernate /standby.

poweroff und poweron nach obiger anleitung einbauen

hibernate.cmd kann man einfach per Desktop-Symbol verlinken oder, wie ich es jetzt mache, auf die Thinkvantage-Taste legen laut dieser Anleitung:

http://thinkpad-wiki.org/ThinkVantage_Taste_manuell_belegen

ich hab in der sleep.vbs nur 1sek drin, das läuft bei mir einwandfrei (T43 mit 320GB WD), frisch aufgesetzt.

zur Sicherheit hab ich beim hibernate-skript nochmals den hotkey-tool-start eingebaut, falls dies irgendwie beendet wurde.

Die Pfade müssen natürlich angepasst werden, ich hab es so ausgelegt, dass die skripte auf c:\programme\2010\ liegen.
 
[quote='BachManiac',index.php?page=Thread&postID=608122#post608122]

ich hab in der sleep.vbs nur 1sek drin, das läuft bei mir einwandfrei (T43 mit 320GB WD), frisch aufgesetzt.


[/quote]Auch eine gute Lösung, scheinbar spielt der Prozessor eine große Rolle beim booten. Mit 1 sec komm ich nicht hin, musste sogar im Startvorgang auf 7sec erhöhen. Da das Hotkey-Tool sowieso irgend wann gestartet wird, werde ich wahrscheinlich eine .cmd File in den Autostart legen, dies sollte dann die 7sec im Startvorgang wieder gut machen.

Weiterhin will ich bei .cmd Files noch optimieren, am besten mit einer IF oder FOR Schleife, diese sollen kontrollieren ob das Hotkey-Tool läuft, wenn ja dann den NIRCMD Befehl, wenn nicht, dann 500ms warten und wieder kontrollieren.

Da mir heute nicht so viel Zeit zur Verfügung steht, viellicht kann hat ja jemand den passenden Befehl zur Hand?

1. IF oder FOR <Kontrolle ob TPOSDSVC.exe geladen ist> --> ja, dann NIRCMD Befehlt --> nein dann 500ms (oder kleiner) warten und wieder abfragen

2. beim Hochfahren, werde ich wie gesagt das in den Autostart nehmen, da braucht dann nur 1x die TPOSDSVC.exe gestartet werden. Diese sollte dann auch mit der IF oder FOR Schleife kontrolliert werden.
 
Code:
tasklist | findstr /i "TPOSDSVC.exe" 1>NUL 2>&1 || start "" "D:/Programme/Lenovo/HOTKEY/TPOSDSVC.exe"

Diese Zeile kontrolliert, ob die Hotkey SW läuft, wenn nicht wird sie gestartet.

Ich für mein X41 bin gehe wieder zurück zu BIOS 1.00, da gibt es keine 2010 Error :) , aber wie ich schonbemerkt hatte, läuft der Lüfter ständig. Da fiel mir ein, das es noch diese TPFancontrol gibt. Hab ich gleich mal gestestet. Das behebt nun auch die LüfterProbleme. Vor allem der Start ist voll schneller geworden...

Früher mit Batch-File 1:10min mit einer SSD, nun mit BIOS 1.00 bin ich vom ersten anschalten bis "Fertig" bei 42sec. Das ist voll angenehm.
 
[quote='BachManiac',index.php?page=Thread&postID=608122#post608122]die dateien behalten (ausser dem Hotkey-Tool) alles was man braucht für shutdown und auch hibernate /standby.
[/quote]Standby und Hibernate (Ruhezustand) sind nicht das gleiche.
Ergo fehlt da eins von beiden.
ich hab in der sleep.vbs nur 1sek drin, das läuft bei mir einwandfrei (T43 mit 320GB WD), frisch aufgesetzt.
die Sleep.vbs kannst du dir nach der Zeile
Code:
ping 1.1.1.1 -n 1 -w 5000
weiter oben sparen .
Alles hinter dem w bezeichnet die Wartezeit im ms.
Somit bist du bei allen Wartezeiten viel flexibler als mehrfach die vbs aufzurufen.
Ich kannte das Beispiel so noch nicht und habe mich immer mit
Code:
ping 127.0.0.1 -n x
beholfen wobei x die Anzahl der Sekunden waren, die gewartet werden sollen.
zur Sicherheit hab ich beim hibernate-skript nochmals den hotkey-tool-start eingebaut, falls dies irgendwie beendet wurde.
Wenns nach dem Start aber schon geladen wurde sollte man davon ausgehen, dass es läuft.
Warum wird der Sound erst angeschalten und dann wieder deaktiviert?
Ich versuche halt alles, um möglichst wenig Zeit zu verbrauchen ;)
 
Standby und Hibernate (Ruhezustand) sind nicht das gleiche.
Ergo fehlt da eins von beiden.
stimmt, bei standby ist das ganze nicht nötig.

die Sleep.vbs kannst du dir nach der Zeile
Code:
ping 1.1.1.1 -n 1 -w 5000
weiter oben sparen .Alles hinter dem w bezeichnet die Wartezeit im ms.Somit bist du bei allen Wartezeiten viel flexibler als mehrfach die vbs aufzurufen.
Ich kannte das Beispiel so noch nicht und habe mich immer mit
Code:
ping 127.0.0.1 -n x
beholfen wobei x die Anzahl der Sekunden waren, die gewartet werden sollen.
ist halt einstellungssache, ich finde jedes mal einen Ping ins Nirvana unsauberer als das sleep-skript.
 
[quote='BachManiac',index.php?page=Thread&postID=608122#post608122]ich hab jetzt mal ein all-in-one-paket zusammengeschnürt:

die dateien behalten (ausser dem Hotkey-Tool) alles was man braucht für shutdown und auch hibernate /standby.

poweroff und poweron nach obiger anleitung einbauen

hibernate.cmd kann man einfach per Desktop-Symbol verlinken oder, wie ich es jetzt mache, auf die Thinkvantage-Taste legen laut dieser Anleitung:

http://thinkpad-wiki.org/ThinkVantage_Taste_manuell_belegen

ich hab in der sleep.vbs nur 1sek drin, das läuft bei mir einwandfrei (T43 mit 320GB WD), frisch aufgesetzt.

zur Sicherheit hab ich beim hibernate-skript nochmals den hotkey-tool-start eingebaut, falls dies irgendwie beendet wurde.

Die Pfade müssen natürlich angepasst werden, ich hab es so ausgelegt, dass die skripte auf c:\programme\2010\ liegen.[/quote]Fein,
deine Skripte fürs Runterfahren laufen bei mir auch einwandfrei. 1s reicht bei mir ebenfalls (160GB HDD, ganz und gar nicht frisches System aber gut aufgeräumt)

Um den Ton wieder anzumachen habe ich nun einfach ein cmd-file in den Autostart mit:

Code:
C:\Programme\2010\nircmd.exe mutesysvolume 0

Funktioniert alles mit kaum wahrnehmbarer Verzögerung.
Der Hotkey Treiber war bei mir übrigens hier zu finden: C:\Programme\ThinkPad\PkgMgr\HOTKEY\TPHKMGR.exe
 
Meine Lösung...

Hi,

hab es endlich mal geschafft mein T43p zurück und konnte so selbst wieder testen. Leider habe ich keine Möglichkeit gefunden alles automatisch über ein Skript zu realisieren. Aber mit dem Ergebnis kann ich soweit gut leben. :)

Im Ahang habe ich ein ZIP-Archiv mit den erforderlichen Dateien hinterlegt. Über Feedback würde ich mich freuen. Den Wiki-Artikel werde ich dann korrigieren und anpassen.

Es gab viele die sich beteiligten und gute Vorschläge gemacht haben. Trotzdem gab es für mich immer etwas auszusetzen. :rolleyes: Deswegen habe ich mir eine "Blacklist" zusammengestellt:
  • Ich wollte kein CMD-Fenster sehen -> Ergo keine Batch-Datei.
  • Das nochmalige Starten das Hot key Driver.
  • Bei der Lösung über die rundll32 kann man nicht beeinflussen, ob der Ton ein- oder ausgeschalten wird.
  • Das Einbinden über die Gruppenrichtlinien ist zu aufwendig.
  • Nicht den Ruhezustand mit zu berücksichtigen.
  • Mute wieder "nur" über ein Tastenkürzel.
Deswegen hier mein abgewandelte Variante:

1. Was bracht man
Letztendlich immer noch das Tool NIRCMD. Ohne dieses oder ähnliche Tools kann ich den Ton nicht bewußt nur ein- oder eben nur ausschalten.
Dann 2 VBS-Skripte: Eins wird in den Autostart kopiert (automute.vbs) oder eben dorthin verlinkt (finde ich persönlich übersichtlicher). Das zweite (shutdown.vbs) wird auf den Desktop kopiert oder verknüpft.
Dann muss man sich als Benutzer nar daran gewöhnen den Rechner über diese Verknüpfung herunterzufahren. Leider gibt es wie schon an andere Stelle erwähnt keine Möglichkeit allgemein in den Shutdown-Prozess einzugreifen.

2. Die Skripte
automute.vbs
Code:
'********************************************************************
' Logon script with MUTE OFF
'
' Version	: 1.2b (09-07-02)
' author	: buergernb
'
' Dieses Script setzt das Tool NIRCMD im Pfad "C:\nircmd" voraus.
' NIRCMD: [url]http://www.nirsoft.net/utils/nircmd.html[/url]
'
' Einfach diese VBS-Datei in den Autostart kopieren oder verknüpfen.
'********************************************************************


'Erforderlicher Aufruf für eine Shellumgebung.
'------------------------------------------
Set oShell = CreateObject("WScript.Shell")


'Schaltet den Ton ein.
'-------------------------------------------------
oShell.Run "C:\automute\nircmd.exe mutesysvolume 0"


'Trigger, der die Windows Eventschleife "abhört".
'Dabei wartet er auf ein Event vom Typ
'"Win32_PowerManagementEvent".
'-------------------------------------------------
Set colMonitoredEvents = GetObject("winmgmts:")._
ExecNotificationQuery("Select * from Win32_PowerManagementEvent")


'Die Schleife zur Verarbeitung dieses Events.
'Gibt Win32_PowerManagementEvent die Zahl 4 zurück, 
'ist der Rechner im Begriff in den Standby- oder 
'Hibernate-Modus zu gehen. Also wird der Sound 
'ausgeschaltet. Gibt es die Zahl 7 zurück, wacht der
'Rechner gerade auf und der Ton wird nach einer best. 
'Wartezeit (hier 8000 Millisekunden) wieder eingeschaltet.  
'---------------------------------------------------
Do
	Set objLatestEvent = colMonitoredEvents.NextEvent

	Select Case objLatestEvent.EventType

		Case 4
			oShell.Run "C:\automute\nircmd.exe mutesysvolume 1", , false

		Case 7
			wscript.sleep 8000
			oShell.Run "C:\automute\nircmd.exe mutesysvolume 0", , false

	End Select
Loop
shutdown.vbs
Code:
'********************************************************************
' Shutdown script with AUTOMUTE
'
' Version	: 1.2b (09-07-02)
' author	: buergernb
'
' Dieses Script setzt das Tool NIRCMD im Pfad "C:\automute" voraus.
' NIRCMD: [url]http://www.nirsoft.net/utils/nircmd.html[/url]
'********************************************************************


'Erforderlicher Aufruf für eine Shellumgebung.
'------------------------------------------
Set oShell = CreateObject("WScript.Shell")


'Schaltet den Ton ab.
'-------------------------------------------------
oShell.Run "C:\automute\nircmd.exe mutesysvolume 1"



'Hier wird das Herunterfahren um 1 s verzögert. Die Zahl 
'hinter dem Schalter "-t" kann ist Wartezeit in Sekunden. Sie 
'kann zwischen 0 und 600 (Sekunden) variieren.
'-------------------------------------------------------------
oShell.Run "%systemroot%\system32\shutdown.exe -s -t 00 -f"


p.s.: Meine Shutdown-Verknüpfung auf dem Desktop.
verknuepfung.jpg

By buergernb at 2009-07-02

Edit:Code-Beispiel geändert. Danke 1jh324td.
 
Super Sache - prima Arbeit.
Ich bin erstaunt, wie elegant du das gelöst hast.
Was ich ebenfalls toll finde ist die gute Kommentierung deiner Scripte.

Was in meinen Augen noch verbesserungwürdig ist ist der letze Punkt im shutdown-Script.
Wenn es dir nicht gefallen hat, dass du kurz ein schwarzes Fenster siehst, dann sollte es doch beim Shutdown auch mit "-t 0" hier ebenso kein extra-Fenster geben dürfen ;)

Eine zusätzliche Idee kommt mir noch:
Wenn du die Umsetzung auf Window-Events ausgelegt hast: gibts dann vllt. auch noch ein Event, dass beim Shutdown ausgelöst wird und damit auswertbar wird?
Dann kannst du alles in ein Script schreiben.
Ich denke, dass du diese Möglichkeit bereits geprüft haben wirst.
Ich hab versucht die Glasgoogle zu befragen, was sich aber als wenig hilfreich erwiesen hat.

greetz
 
Hi 1jh324td,

das heißt also du die Skripte erfolgreich bei dir eingestzt. :)

Beim Shutdown-Script hast du natürlich recht, den Schalter "-t" mit 0 Sekunden übergeben ist viel besser. Betreibe mein Skript auf dem T43p auch schon so. Danke für den Hinweis. :thumbup:

Die Idee mit dem Shutdown Event habe ich die letzten Wochen verfolgt und auch einiges gefunden. Es gibt ein Event, welches auch beim Herunterfahren ausgelöst wird. Es heißt Win32_ComputerShutdownEvent. Nur leider ist es auch nicht mehr. Ich kann das Eintreten des Herunterfahrens erfahren, aber es nicht verzögern oder gar aufhalten. Das heißt, dem Skript bleibt keine Zeit noch irgendetwas danach auszuführen. Denn der Windows Scripting Host (WSH) wird ja auch sofort beendet. dementsprechend kann das Skript nicht weiter ausgeführt werden. :( Im Netz suchen einige nach einer Lösung... wenn also jemand einen Vorschlag hat wäre ich sehr interessiert. :)
 
Ich grüße dich, buergernb!

Um ehrlich zu sein nutze ich bisher noch meine batch-Scripte, die ich an anderer Stelle vorgestellt habe.
Allerdings reizt mich an deiner Lösung die Auswertung von Events. Damit wäre ich viel flexibler (ob nun die Windows-Updates oder ein anderes Programm zum Neustart auffordern: ich müsste nicht weiter darüber nachdenken).
Die Idee mit dem Shutdown Event habe ich die letzten Wochen verfolgt und auch einiges gefunden. Es gibt ein Event, welches auch beim Herunterfahren ausgelöst wird. Es heißt Win32_ComputerShutdownEvent. Nur leider ist es auch nicht mehr. Ich kann das Eintreten des Herunterfahrens erfahren, aber es nicht verzögern oder gar aufhalten. Das heißt, dem Skript bleibt keine Zeit noch irgendetwas danach auszuführen. Denn der Windows Scripting Host (WSH) wird ja auch sofort beendet. dementsprechend kann das Skript nicht weiter ausgeführt werden. :( Im Netz suchen einige nach einer Lösung... wenn also jemand einen Vorschlag hat wäre ich sehr interessiert. :)
Meine erste Idee in dieser Richtung wäre: shutdown -a (abort)
Damit wäre der Prozess (herunterfahren) unterbrochen und du könntest deine Befehle absetzen, um anschließend im Script selbst wieder einen Shutdown oder reboot auszulösen. Welches von beiden du dann auslöst hängt dann natürlich wieder vom Rückgabewert deines Events aus.

Keine Ahnung, ob die Reaktion des Scripts schnell genug ist, aber das wäre meine Ansatz dazu.
Hast du das schon probiert?

greetz
 
Hi,

ja, auf diesem Pfad habe ich mich auch schon bewegt. :) Leider ohne den gewünschten Erfolg.
the Shutdown.exe /a cannot abort a shutdown that is requested by the user through the start menu, or if the user clicks a button in a program that will reboot the computer, shutdown.exe /a only works with the prompt that tells you the computer will be shutting down in "amount of time" (like the prompt one gets after being infected with msblast worm)
Problem ist also nicht zu wenig Zeit für eine Reaktion, sondern schlicht und einfach: Dieser Schalter greift hier nicht. :(
 
Hi,

ist das bei allen nicht-FRU-Festplatten so, dass das Active-Protection-System nicht funktioniert oder ist das nur bei meiner (WD blue scorpio 500GB) so?--BachManiac 23:43, 6. Jul. 2009 (CEST)
kann ich leider zur Zeit hier nicht testen, da meine nicht-FRU Platte in einem anderen Notebook steckt.
 
Thinkpad-wiki.org[/url] hat BachManiac gefragt, ob das Skript den APS deaktiviert.


.
nein nicht das skript, sondern generell, wenn man eine nicht authentifizierte HDD eingebaut hat.

ich wage mich zu erinnern, gelesen zu haben, dass dies der Grund der 2010-Meldung ist, da nur zertifizierte Festplatten das "APS-Pause-Signal" richtig verwerten können, da beim Sata-IDE-Umwandler diesbezüglich ein Fehler drin ist, und deshalb Festplatten speziell angepasst werden müssen, um eben durch das APS angesprochen zu werden.

die WD 320GB Blue Scorpio wird durch das APS jedenfalls nicht angesprochen.
 
  • ok1.de
  • thinkstore24.de
  • ok2.de - Notebook Computer Server
  • Preiswerte-IT - Gebrauchte Lenovo Notebooks kaufen

Werbung

Zurück
Oben