Herausfinden, ob Windows gerade einen Alarmsound abspielt

  • Hallo, ich bin hier neu im Forum und möchte alle anderen Mitglieder herzlich begrüßen.

    Es wäre schön, wenn Ihr mir bei einem Programmierproblem helfen könntet, mit dem ich trotz google- und Foren-Suche bisher nichts gefunden habe:
    Wenn im Windows oder bei einer Anwendung ein Fehler ("Alert") auftritt, wird in der Regel ja auch ein Sound abgespielt.
    Ich möchte nun Programm schreiben, welches das Abspielen des Alert-Sounds "hört" und dann entsprechende Gegenmaßnahmen
    einleitet. Tatsächlich würde es mir schon genügen, das Nutzen des Soundkanals zu erkennen - also wann der Rechner Ton gibt und bzw. wann
    er stumm ist. Wenn ich _SoundStatus ( $aSndID ) richtig verstanden habe, zeigt mir die Funktion den Status einer selbst
    mit _SoundOpen geöffneten Datei, aber eben nicht den allgemeinen Status des Soundkanals.

    • Offizieller Beitrag

    Auch wenn das geht, was ist, wenn der Benutzer den Sound ausgeschaltet hat?
    Mal abgesehen davon, dass das viel zu umständlich ist. Wenn ein Fehler auftritt wird mit großer Wahrscheinlichkeit der Benutzer auch über ein Fenster darauf hingewiesen.
    Und das auftauchen des Fensters lässt sich viel leichter feststellen (WinExists, WinWait).

  • @Oscar
    es könnte durchaus sein, dass der User auf das Hören des Sounds angewiesen ist, weil er beispielsweise blind ist.
    Bei fehlerhaften Eingaben über eine Tastatur wird immer nur der Fehlersound generiert und ausgegeben, niemals aber ein Fenster!

    Ich denke, man müsste über einen Hook die Windows Messages an PlaySound() abfangen und entsprechend auswerten. Da gibt es sicherlich einen Spezialisten hier im Forum!

    • Offizieller Beitrag

    man müsste über einen Hook die Windows Messages an PlaySound() abfangen

    Das dürfte mehr als aufwändig werden, da es an die zig Notifications gibt, die bei einem Fehler eine Soundausgabe generieren.
    Weiterhin ist damit nicht gewährleistet, dass auch alle Sounds erfasst werden, neben PlaySound werden für Fehlermeldungen auch Toast notifications verwendet.
    Somit ist vermutlich das direkte Prüfen der Hardware auf Aktivität erfolgversprechender (auch wenn ich adhoc keinen Lösungsansatz dafür habe).

  • Das dürfte mehr als aufwändig werden, da es an die zig Notifications gibt, die bei einem Fehler eine Soundausgabe generieren.

    https://msdn.microsoft.com/en-us/library/…0(v=vs.85).aspx
    da ist einiges dabei, was so schwierig nicht umzusetzen sein sollte.

    @torama, was willst du genau erreichen und warum, welche "Gegenmaßnahmen" sollen eingeleitet werden?
    Gegenmaßnahmen verstehe ich jetzt so, dass dein Script den "Fehler" detektiert, aber den Sound nicht an Windows weiterleitet. Gleichzeitig muss logischerweise der "Fehler" (wie immer dieser auch aussehen sollte) korrigiert werden.

  • @Andy, @Oscar, @BugFix - Toll, dass Ihr so engagiert mein Problem diskutiert.

    Das von mir adressierte Problem besteht darin, dass eine Anwendung - Metatrader 5- , an deren Windowinhalt ich nicht mit den üblichen Methoden komme, einen Alert wirft, wenn ein anwendungsinternes Ereignis - z.B. ein Kurswechsel einer Aktie - eintritt.

    In diesem Fall möchte ich mit meinem Programm in einer weiteren Anwendung (Webbrowser) entsprechend was tun.