Announcement

Collapse
No announcement yet.

Ton aus bei WPF Anwendung C#

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Ton aus bei WPF Anwendung C#

    Hallo,

    ich versuche gerade eine Anwendung zu schreiben, welche beim drücken den Ton ausschält. Also Mute oder Volume = 0.

    Habe bereits mal versucht (C#):
    Code:
    [DllImport("user32.dll", SetLastError = false)]
    static extern IntPtr SendMessage(IntPtr hWnd, uint msg,
    IntPtr wParam, IntPtr lParam);
    
    const uint APPCOMMAND_VOLUME_MUTE = 0x80000;
    const uint WM_APPCOMMAND = 0x319;
    IntPtr soundSwitch = new IntPtr(APPCOMMAND_VOLUME_MUTE);
    
    /// <summary>Deaktiviert den Sound, wenn aktiviert und umgekehrt</summary>
    void SoundVolumeSwitch()
    {
    SendMessage(Handle, WM_APPCOMMAND, Handle,soundSwitch);
    }
     MediaCommands.MuteVolume; // geht auch nicht
    Hier meckert er mir immer das Handle an. Er kennt dieses Objekt nicht?!?

    Hat mir jemand einen Rat?

    Danke PP

  • #2
    Kenn mich selber damit nicht aus, aber schaue dir mal diese Beispiele an, da sollte was dabei sein:

    http://www.dreamincode.net/forums/showtopic45693.htm
    http://www.geekpedia.com/tutorial176...nd-volume.html
    http://msdn.microsoft.com/en-us/libr...dio.30%29.aspx
    http://www.devnewsgroups.net/group/m...opic61988.aspx
    http://www.microsoft.com/indonesia/msdn/pinvoke.aspx

    bye,
    Helmut

    Comment


    • #3
      Hy,

      also, so ist mein Code (genau wie bei dir) und er läuft!

      Code:
      using System;
      using System.Collections.Generic;
      using System.ComponentModel;
      using System.Data;
      using System.Drawing;
      using System.Linq;
      using System.Text;
      using System.Windows.Forms;
      using System.Runtime.InteropServices;
      using System.Windows.Input;
      
      namespace WindowsFormsApplication1
      {
          public partial class Form1 : Form
          { 
              [DllImport("user32.dll", SetLastError = false)]
              static extern IntPtr SendMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam);
      
              const uint APPCOMMAND_VOLUME_MUTE = 0x80000;
              const uint WM_APPCOMMAND = 0x319;
      
              public Form1()
              {
                  InitializeComponent();
              }
      
              private void button1_Click(object sender, EventArgs e)
              {
                  IntPtr soundSwitch = new IntPtr(APPCOMMAND_VOLUME_MUTE);
      
                  SendMessage(Handle, WM_APPCOMMAND, Handle,soundSwitch);
              }
          }
      }
      MuteVolume
      Hier meckert er mir immer das Handle an. Er kennt dieses Objekt nicht?!?
      Google sagt: Das sind Commands für WPF, wie z.B. Paste, welcher vordefiniert ist und einem Menüitem zugewiesen werden kann. Sobald Focus in einem Textfeld, fügt er den Text aus dem Clipboard ein, ohne programmieren!

      Einige Commands, wie MuteVolume müssen aber selbst definiert werden, also bleibt nachwievor die oben gezeigte Programmierarbeit bestehen. Was das genau dann aber bringt (da eh alles selbst gemacht wird) habe ich -noch- nicht genau rauslesen können.

      Such mal bei Google, da sind massig soche Sachen!

      MfG
      Die Taschenlampe!

      Die perfekte Taschenlampe für Ihr Windows Phone!

      - Die APP steuert die echte Blitz-LED an und versorgt Sie mit 100% Leistung!
      - Zudem zeigt die Live-Kachel den aktuellen Akkustand des Telefons an!


      Hier gehts zu APP!

      Comment


      • #4
        Hallo Danke mal für die Hilfe,

        wenn ich den Code wie oben einfüge erhalte ich zuerst einmal den Fehler:
        [DllImport("user32.dll", SetLastError = false)] // kennt er nicht und muss geändert werden zu [System.Runtime.InteropServices.DllImport("user32.d ll", SetLastError = false)] OK

        Aber das SendMessage(Handle, WM_APPCOMMAND, Handle, soundSwitch); habe ich nicht verstanden?

        Benutze das Framework 3.5

        Sry PP

        Comment


        • #5
          Hallöschen,

          also...

          wenn ich den Code wie oben einfüge erhalte ich zuerst einmal den Fehler:
          [DllImport("user32.dll", SetLastError = false)] // kennt er nicht und muss geändert werden zu [System.Runtime.InteropServices.DllImport("user32.d ll", SetLastError = false)] OK
          Wenn du using System.Runtime.InteropServices am anfang des Codes schreibst, funktionierts auch, wobei deins sowie meins genau das selbe bewirken!

          Aber das SendMessage(Handle, WM_APPCOMMAND, Handle, soundSwitch); habe ich nicht verstanden?
          SendMessage braucht ein Handle, auf welcher die Message angewandt wird. Willst du die maximale Zeichenanzahl der TextBox1 begrenzen, wäre das Handle: TextBox1.Handle. Die Stummschaltung braucht ja kein Steuerelement, darum gibt man das Handle des Hauptfensters an. Du kannst auch "genauer" this.Handle schreiben. Kommt aufs selbe raus.
          Es ist eine einmalige Nummer, wie ein Fingerabdruck. Somit kann das System alles schön brav auseinander halten. Selbst Anwendungen außerhalb haben stets eigene, nie gleiche Handles!

          Gruß Flo
          Die Taschenlampe!

          Die perfekte Taschenlampe für Ihr Windows Phone!

          - Die APP steuert die echte Blitz-LED an und versorgt Sie mit 100% Leistung!
          - Zudem zeigt die Live-Kachel den aktuellen Akkustand des Telefons an!


          Hier gehts zu APP!

          Comment


          • #6
            Hallo,

            das Handle funktioniert dennoch nicht, egal ob ich this oder MainWindow angeben.Meldung: Keine Definition für Handel....

            Code:
            using System;
            using System.Collections.Generic;
            using System.Linq;
            using System.Text;
            using System.Windows;
            using System.Windows.Controls;
            using System.Windows.Data;
            using System.Windows.Documents;
            using System.Windows.Input;
            using System.Windows.Media;
            using System.Windows.Media.Imaging;
            using System.Windows.Navigation;
            using System.Windows.Shapes;
            
            
            using System.Drawing;     // kennt er auch nicht, sollte aber nicht wichtig sein
            using System.Windows.Forms; // kennt er ebenfalls nicht aber auch nicht wichtig
            
            
            
            namespace WpfApplication1
            {
                /// <summary>
                /// Interaktionslogik für MainWindow.xaml
                /// </summary>
                public partial class MainWindow : Window
                {
            
                    [System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = false)]
                    static extern IntPtr SendMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam);
            
                    const uint APPCOMMAND_VOLUME_MUTE = 0x80000;
                    const uint WM_APPCOMMAND = 0x319;
            
                    
                    public MainWindow()
                    {
                        InitializeComponent();
                    }
            
                    private void button1_Click(object sender, RoutedEventArgs e)
                    {
                        IntPtr soundSwitch = new IntPtr(APPCOMMAND_VOLUME_MUTE)
                        SendMessage(Grid.Handle, WM_APPCOMMAND, this.Handle, soundSwitch);
            
                    }
            
                    private void Window_Loaded(object sender, RoutedEventArgs e)
                    {
            
                    }
                }
            }

            Comment


            • #7
              habe mal SendMessage(IntPtr.Zero, WM_APPCOMMAND, IntPtr.Zero, soundSwitch);
              versucht, kann es compilieren aber es geschieht nichts!

              Als Betriebssytem habe ich Windows 7!
              Zuletzt editiert von peterparker; 29.12.2009, 00:18.

              Comment


              • #8
                Hey,

                du nutzt ja WPF! Da gibt es Object.Handle nicht! So sieht die Korrekte Funktion aus:

                Code:
                  System.Windows.Interop.HwndSource hwndSource = PresentationSource.FromVisual(this) as  System.Windows.Interop.HwndSource;
                
                SendMessage((int)hwndSource.Handle....
                MfG Flo
                Die Taschenlampe!

                Die perfekte Taschenlampe für Ihr Windows Phone!

                - Die APP steuert die echte Blitz-LED an und versorgt Sie mit 100% Leistung!
                - Zudem zeigt die Live-Kachel den aktuellen Akkustand des Telefons an!


                Hier gehts zu APP!

                Comment


                • #9
                  Danke werde es morgen mal testen

                  Comment


                  • #10
                    Hallo Flo_Plus,

                    es funktioniert!!!! Jaaaaaaa

                    Vielen Dank

                    Comment

                    Working...
                    X