Medion Akoya Laptop - "PC Beep" abstellen - Wie?

  • Hallo, Forum!

    Ich suche mir schon die Finger wund nach einer Möglichkeit, bei einem Medion Akoya Laptop in der Lautstärkesteuerung den Regler "PC Beep" dauerhaft auf 0 zu setzen. Windows XP "vergißt" diese Einstellungen immer, und das Laptop piept mich volles Rohr an, wenn ich es mitten in der Nach auf Ruhezustand versetze, oder das Ladekabel ab- oder anstecke. Damit meine Nachbarn nicht von dem Piep-Lärm immer aufwachen, brauche ich deshalb ein Script, das ohne die Lautstärke-Steuerung von Windows als Fenster zu öffnen, also am Besten über WinApi-Funktionen, an diese eine Einstellung rankommen kann. Es gibt wohl ein Script /UDF, das die Standard-Regler der Lautstärke-Steuerung auf diese Weise verstellen kann, aber "PC Beep" ist leider kein Standard-Regler. Somit fehlen mir auch die Handles dafür. Leider habe ich jetzt auch nicht den Link zur Hand, wo ich damals das Script / die UDF gefunden habe, das auf die Sound-Einstellungen zugreifen kann. Im Prinzip bräuchte ich davon eine Erweiterung, kenne mich aber zu wenig damit aus.

    Zoli

  • das wäre ja funktionell sowas wie der eingebaute Speaker / Piezo evtl. lässt er sich auch im Bios abwürgen.
    Ansonsten....

    Gruß Dietmar

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • Jep im Bios deaktivieren. Es ist nur wichig, dass du im BIOS sicher als Administrator und nicht als User (sofern vom BIOS unterstützt) angemeldet bist. Bei der Anmeldung als User sind einige Einstellungen nämlich nicht sichtbar.

  • Also das Ding hier ist uralt. Das BIOS kann sowas wie "anmelden als..." nicht, und außerdem, wenn 3 Einstellungen dort veränderbar sind, ist es schon viel. ;) Medion, halt.

    Nee, alles schon versucht. Der Speaker ist auch kein echter Piezo-Speaker, sondern ist als Funktion auf der Soundkarte des Laptops drauf. Daher auch als Regler in den Lautstärkeeinstellungen sichtbar. Somit wird der Tipp mit dem Montageschaum nicht helfen. Den Tipp mit der Registry habe ich auch schon versucht, auch den Treiber, den es im Gerätemanager gibt, deaktiviert, nichts hat geholfen. Einen Dienst namens "Beep" gibt es im Übrigen in msconfig.msc auch nicht, falls noch jemand vorschlagen möchte, diesen zu deaktivieren. Wie gesagt, alles schon durch. Was ich suche, ist eine UDF, die nicht nur die Standard-Regler der Lautstärkeeinstellungen per WinApi verstellen kann, sondern auch die Herstellerspezifischen, wie bei diesem Medion.

    Edit:

    Ich habe übrigens auch schon Eventghost versucht, um mich damit wenigstens vom Piep bei Ruhezustand zu befreien, aber manchmal passiert es eben, daß der Eventghost den Event "Ruhezustand" nicht schnell genug behandelt, und den Lautsprecher stummschaltet. Somit kommt das nervige vollgas-Piep noch manchmal durch.

    Auch, wenn ich den entsprechenden Regler in der Lautstärkeregelung auch 0 stelle, oder deaktiviere, ist er beim nächsten Neustart zu 90% sicher wieder auf Vollanschlag, und an.

    Zoli

    Einmal editiert, zuletzt von Zoli1972 (26. März 2011 um 12:57)

  • Da sich ein entsprechender Regler in der Lautstärkeregelung befindet, kannst du es ja mal mit dieser Funktion von Thorsten Meger (Xenobiologist) Testen.

    Spoiler anzeigen
    [autoit]

    ;~ $re = _isMute(1000)
    ;~ If @error Then ConsoleWrite(@error & @CRLF)
    ;~ ConsoleWrite($re & @CRLF)
    ;===============================================================================
    ;
    ; Function Name: _isMute
    ; Description:: Check for mute sound
    ; Parameter(s): ControlID
    ; Voulme = 1000
    ; Wave = 2000
    ; SW-Synthesizer = 3000
    ; CD-Player = 4000
    ; Mikrofon = 5000
    ; Line-In = 6000
    ; Requirement(s): ---
    ; Return Value(s): 0 = not muted, 1 = muted, -1 = timeout, -2 = ControlID not found
    ; Author(s): Thorsten Meger (Xenobiologist)
    ;
    ;===============================================================================

    [/autoit] [autoit][/autoit] [autoit]

    Func _isMute($opt = 1000)
    Local $retVal = 0, $ex = False
    If Not WinExists('[CLASS:Volume Control]') Then
    Run('sndvol32', '', @SW_HIDE)
    $ex = True
    EndIf
    If WinWait('[CLASS:Volume Control]', '', 2) = 0 Then Return -1
    $retVal = ControlCommand('[CLASS:Volume Control]', '', $opt, 'isChecked')
    If @error Then Return -2
    If $ex = True Then WinClose('[CLASS:Volume Control]')
    Return $retVal
    EndFunc ;==>_isMute

    [/autoit]


    Musst nur noch die ControlID rausfinden.
    Wäre zwar nicht unbedingt die schönste Lösung, aber wenn du das Script dann in Autostart packst Mutet der bei jedem Systemstart diesen Regler.

    Wie gesagt wäre erstma nur so eine Zwischenlösung, aber könnte Funktionieren ;)

    lg

    Edit: Ach mist, diese Funktion überprüft nur ob Mute gesetzt ist. Aber evtl. kannst du sie ja ein wenig umschreiben.

  • Hallo,

    Vielen Dank erst mal. Das hilft mir schon mal weiter. Aber genau von dieser Funktion gibt es irgendwo auch ein Pendant, der das ohne verstecktes Öffnen eines Fensters über Winapi, mithilfe einer Dll hinbekommt. Das wäre super, wenn mir jemand sagen könnte, wie ich dann welche dll ansprechen muß, damit dieser Schalter "gesetzt" wird.

    EDIT:

    Es gibt wohl ei paar Schlüssel in der Registry, die anscheinend mit diesem Regler zu tun haben. Der eine ist {C57704A3-108F-4760-99BA-6369AD13345D}, der andere ist {093C0065-6B45-4582-87D7-5A6742F6E859}. Letzterer ist in HKLM\SYSTEM\ControlSet001\Control\Class\{093C0065-6B45-4582-87D7-5A6742F6E859}\Settings\Drv5152\Mute0_RearLineOutWave3_{093c0065-6b45-4582-87d7-5a6742f6e859} zu finden.

    Der Binary-Wert in diesem Schlüssel scheint mitunter der Mute-Schalter für besagten Regler zu sein. Den Eintrag gibt es an mehreren Stellen in der Registry. Wenn ich in der Lautstärkeregelung das "Mute" für diesen Regler setze, und dann die Anzeige in Regedit aktualisiere, bekomme ich als Wert für besagten Schlüssel 01 00 00 00. Ansonsten steht der auf einem 32-Bit-Wert, der durch die Stellung des Reglers irgendwie bestimmt wird. Wie, hab ich noch nicht rausbekommen. Meine Frage ist jetzt, wie kann ich mit RegWrite() einen binären Registry-Wert schreiben?

    Mein zweites Problem ist, ich habe mal versucht, den Wer manuell mit Regedit auf 01 00 00 00 zu setzen. Das ändert aber den Mute-Schalter in der Lautstärkeregelung nicht.

    Zoli

    Einmal editiert, zuletzt von Zoli1972 (27. März 2011 um 13:28)

  • Um Veränderungen an der Registry zu dokumentieren hilft dir z.B. das Programm https://autoit.de/RegShot weiter.

    Einen Binären Registry Wert schreibst du einfach mit der Funktion RegWrite() mit der Übergabe des richtigen Parameters. In der Hilfe ist die Funktion genau beschrieben.

    [autoit]

    RegWrite()

    [/autoit]

    Die manuellen Änderungen der Registry werden oft erst nach einem Neustart wirksam. Um den veränderten Wert sofort wirksam werden zu lassen, wirst du um einen DLLCall nicht herumkommen.

    [autoit]

    DLLCall()

    [/autoit]

    Mfg Paul

    • Offizieller Beitrag

    Für Slider kannst du unter Windows i.A. folgendes verwenden:

    [autoit]

    #Include <SendMessage.au3>
    Const $WM_USER = 0x400
    Const $TBM_GETPOS = ($WM_USER)
    Const $TBM_SETPOS = ($WM_USER + 5)

    [/autoit][autoit][/autoit][autoit]

    ; hol dir das Handle
    $hWnd = ControlGetHandle('..')

    [/autoit][autoit][/autoit][autoit]

    ; zieh den Regler auf 0 und lies den Wert dafür aus
    $val = _SendMessage($hWnd, $TBM_GETPOS, 0, 0)

    [/autoit][autoit][/autoit][autoit]

    ; mit folgendem Aufruf kannst du den Slider automatisch setzen
    _SendMessage($hWnd, $TBM_SETPOS, -1, $val)

    [/autoit]
  • Ich habe was gefunden, wie du ohne Skript deinen dämlichen Beep abstellen kannst:

    Öffne den Gerätemanager
    Klicke unter Ansicht->ausgeblendete Geräte anzeigen
    Dann klicke in der Baumansicht auf die Gruppe Nicht-PnP-Treiber
    Suche dort den Eintrag Beep und öffne diesen (Doppelklick oder rechte MT und Eigenschaften)
    Unter der Registerkarte Treiber kannst du ihn deaktivieren.
    Die Änderung wird nach einem Neustart wirksam.

    Anm: Diese Hinweise habe ich nur unter W7 getestet. Aber XP müsste auch funktionieren.

    Gruß Paul

  • Hallo, Leute!

    Sorry, daß ich mich so lange nicht mehr gemeldet habe, hatte nicht soviel Zeit, mich um das Problem zu kümmern. Es besteht weiterhin, und ich habe zwecks Lösung noch ein wenig weiter geforscht. Hinzuzufügen wäre vielleicht noch, daß ich bei jedem Neustart des Laptops das doofe PC Beep erneut ausmachen muß, die Einstellung scheint sich nicht korrekt in der Registry zu speichern.

    Das mit dem Abstellen des Beep-Treibers im Gerätemanager bringt leider nichts.

    Zwecks Dll-Call habe ich folgendes Schnipsel gefunden.

    [autoit]

    Func _SoundGetWaveVolume()
    Global $WaveVol = -1, $p, $ret
    Const $MMSYSERR_NOERROR = 0
    $p = DllStructCreate ("dword")
    If @error Then
    SetError(2)
    Return -2
    EndIf
    $ret = DllCall("winmm.dll", "long", "waveOutGetVolume", "long", -1, "long", DllStructGetPtr ($p))
    If ($ret[0] == $MMSYSERR_NOERROR) Then
    $WaveVol = Round(Dec(StringRight(Hex(DllStructGetData ($p, 1), 8), 4)) / 0xFFFF * 100)
    MsgBox(1,"", hex(DllStructGetData($p,1)))
    Else
    SetError(1)
    EndIf
    ;DllStructDelete ($p)
    Return $WaveVol
    EndFunc ;==>_SoundGetWaveVolume

    [/autoit]


    Allerdings bräuchte ich das Schnipsel umgebaut zum Schreiben der Einstellungen, und nicht zum Lesen. Leider kenne ich mich Dlls nicht besonderts gut aus. Das weitere Dumme ist auch noch, das Schnipsel hier behandelt den WaveOut-Volume, und ich schaffe es nicht, es auf PC Beep anzuwenden. Es scheint wohl so zu sein, daß der Dll-Call statt auf "waveOutGetVolume", auf "pcbeepGetVolume", oder so ähnlich anzuwenden wäre. Nur funktioniert das mit "pcbeepGetVolume" dummerweise eben nicht. Wenn ich nur eine Liste der anwendbaren Funktionen hätte...

    Übrigens, Douky: Dein Script habe ich derweil in Verwendung und arbeitet einwandfrei. Vielen Dank einstweilen.

    Grüße

    Zoli

    Einmal editiert, zuletzt von Zoli1972 (4. Dezember 2011 um 20:14) aus folgendem Grund: zusätzliche Infos

  • ch weiss nicht ob es dir hilft aber das hat jemand mit dem selben problem in einem forum gepostet als Lösung.


    Systemsteuerung->Sound->Unter Registrierkarte Wiedergabe: ->Eigenschaften->Registrierkarte "Pegel"->PC Beep Lautstärke auf 0 setzen!

    Gruß