Disable Microphon dynamically

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Disable Microphon dynamically

    Hi,

    ich habe hier ein Problem, das nicht so leicht zu erklären und vermutlich auch nicht so leicht zu lösen ist. Hier sind vor allem geduldige Helfer gefragt. :)

    An meinem Desktop nutze ich gelegentllich eine externe Camera mit einem eingebauten Microphon, etwa um mit Leuten zu "skypen".

    Die Camera schließe ich aus Sicherheitsgründen nur dann über ein USB Kabel an, wenn ich sie wirklich benötige.

    Beim Anschließen wird die Camera "installiert" ... und damit wird die Cam und und Micro activiert ! Dass mir jemand dabei zusieht, wie ich in der Nase bohre ist mir (nicht ganz) egal ... aber, dass Leute unfugt meine Gespräche aufzeichnen, das stört mich massiv. Wie kann ich dafür sorgen, dass mein Micro nur nach FREIGABE zugreifbar ist.

    Ich kann das über die Systemsteuerung einstellen: Control Panel - Hardware and Sound - Sound - Speakers /Headphones - Recording - Desktop Microphone - Properites - Levels - Microphone OFF

    Der lange Dialog wäre ja ok, wenn er nur einmal zu durchlaufen wäre. Aber bei jedem Neuanschluss gehen die Einstellungen verloren und müssen wiederholt werden. Außerdem können Anwendungen das überschreiben. Und das tun sie auch!

    Ich hätte ganz gern Programm, das mein Micro aktiviert / deaktiviert. Für den Lautsprecher geht das mit einem WM COMMAND ganz wunderbar (Button3) ! Das habe ich dann versucht auf das Micro zu übertragen (Button4).

    VB.NET-Quellcode

    1. Imports System.Runtime.InteropServices
    2. Public Class Form1
    3. <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)>
    4. Private Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As UInteger,
    5. ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr
    6. End Function
    7. Const WM_APPCOMMAND As UInteger = &H319
    8. Const APPCOMMAND_VOLUME_UP As UInteger = &HA
    9. Const APPCOMMAND_VOLUME_DOWN As UInteger = &H9
    10. Const APPCOMMAND_VOLUME_MUTE As UInteger = &H8
    11. Const APPCOMMAND_MICROPHONE_VOLUME_UP As UInteger = &H1A
    12. Const APPCOMMAND_MICROPHONE_VOLUME_DOWN As UInteger = &H19
    13. Const APPCOMMAND_MICROPHONE_VOLUME_MUTE As UInteger = &H18
    14. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    15. SendMessage(Me.Handle, WM_APPCOMMAND, &H30292, APPCOMMAND_VOLUME_UP * &H10000)
    16. End Sub
    17. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    18. SendMessage(Me.Handle, WM_APPCOMMAND, &H30292, APPCOMMAND_VOLUME_DOWN * &H10000)
    19. End Sub
    20. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    21. SendMessage(Me.Handle, WM_APPCOMMAND, &H200EB0, APPCOMMAND_VOLUME_MUTE * &H10000)
    22. End Sub
    23. Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    24. SendMessage(Me.Handle, WM_APPCOMMAND, &H200EB0, APPCOMMAND_MICROPHONE_VOLUME_MUTE * &H10000)
    25. End Sub
    26. End Class


    Button1 - 3 funktionieren fehlerfrei Insbesondere wird mit Button3 das Lautsprechersymbol in der Taskleiste aktiviert und deaktiviert. :)

    Button4 läuft fehlerfrei durch - aber an der Anzeige und am Status meines Microphons ändert sich nix. :(

    Keine einfache Sache. Vielleicht kennt sich jemand mit der Handhabung von Microphones aus und weiß wie man das macht.

    LG
    Peter

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Mit CsCore sollte das gehen, kannst aber auch einen einfachen CoreAudioAPI-Wrapper nehmen:
    nuget.org/packages/AudioSwitch…pi.CoreAudio/4.0.0-alpha5
    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin
    Hm. Ich glaub, dass Du auf'm falschen Kutter bist.
    Bei mir funktioniert der Code - nachdem ich Option Strict On gemacht habe und die P/Invoke-Funktion geändert habe:

    VB.NET-Quellcode

    1. Imports System.Runtime.InteropServices
    2. Public Class FrmMain
    3. <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)>
    4. Private Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As UInteger,
    5. ByVal wParam As IntPtr, ByVal lParam As Integer) As IntPtr
    6. End Function
    7. Const WM_APPCOMMAND As UInteger = &H319
    8. Const APPCOMMAND_VOLUME_UP As UInteger = &HA
    9. Const APPCOMMAND_VOLUME_DOWN As UInteger = &H9
    10. Const APPCOMMAND_VOLUME_MUTE As UInteger = &H8
    11. Const APPCOMMAND_MICROPHONE_VOLUME_UP As UInteger = &H1A
    12. Const APPCOMMAND_MICROPHONE_VOLUME_DOWN As UInteger = &H19
    13. Const APPCOMMAND_MICROPHONE_VOLUME_MUTE As UInteger = &H18
    14. Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button1.Click
    15. SendMessage(Me.Handle, WM_APPCOMMAND, New IntPtr(&H200EB0), APPCOMMAND_MICROPHONE_VOLUME_MUTE * &H10000)
    16. End Sub
    17. End Class


    nur wird (s. Bild unten) trotzdem Sound vom Mic trotz scheinbarer Deaktivierung registriert. Von daher wird trotzdem Sound aufgenommen. Und wer hindert Mikrosaft oder Apps daran, das Mic zu reaktivieren? Ggf. ginge es über softwareseitige Deinstallation des Mics. Aber mit dem Code? Ich befürchte, dass das nur was für's Gewissen ist. Aber hey, was weiß ich schon?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.