示例#1
0
        public static void MainHandler()
        {
            VolumeMaster master = new VolumeMaster();
            bool         done   = false;

            foreach (AudioSession session in master.Sessions)
            {
                if (session.Process != null)
                {
                    Console.WriteLine("ProcessName: " + session.Process.ProcessName);
                    Console.WriteLine("AudioSession IconPath: " + session.IconPath);
                    Icon icon = session.GetIcon32x32();
                }
                Console.WriteLine("DisplayName: " + session.DisplayName);
                Console.WriteLine("Volume: " + session.Volume);
                Console.WriteLine("Muted: " + session.Mute);
                Console.WriteLine("State: " + session.State.ToString());

                Console.WriteLine("AudioSession IconPath: " + session.IconPath);

                Console.WriteLine();

                //session.Volume = 100;
            }

            Console.WriteLine(" ");
            Console.WriteLine(" ");
            Console.WriteLine(" ");
            Console.WriteLine(" ");

            Console.WriteLine("begin coreaudio testing");
            Console.WriteLine(master.MasterVolumeLevel.ToString());
            master.MasterVolumeLevel = 35;
            Console.WriteLine(master.MasterVolumeLevel.ToString());


            Console.ReadLine();
        }
示例#2
0
        //--------------------------------------------------
        //IMAGES START  (do przerobienia)
        //--------------------------------------------------

        //public void SendImageXOR()
        //{
        //    queueXOR = new BlockingCollection<byte[]>();
        //    stillSend = true;
        //    Console.WriteLine("send image xor");
        //    imageXORThreadSend = new Thread(() => SendImageXOR_T());
        //    imageXORThreadSend.Start();
        //}

        //public void StopImageXOR()
        //{
        //    stillSend = false;
        //    if (imageXORThreadSend != null)
        //    {
        //        imageXORThreadSend.Abort();
        //    }
        //    if (imageXORThreadRec != null)
        //    {
        //        imageXORThreadRec.Abort();
        //    }
        //}

        //private void SendImageXOR_T()
        //{
        //    Console.WriteLine("send image xor T");
        //    TcpClient imageClient = new TcpClient();
        //    IPAddress ownIPAddress = GetLocalIPAddress();
        //    TcpListener imageListener = new TcpListener(ownIPAddress, imageXORPort);
        //    imageListener.Start();
        //    writer.Write("i");
        //    Console.WriteLine("listening for connection reply");
        //    writer.Write(ownIPAddress.ToString());
        //    imageClient = imageListener.AcceptTcpClient();
        //    imageListener.Stop();

        //    BinaryWriter imageWriter = new BinaryWriter(imageClient.GetStream());

        //    while (stillSend == true)
        //    {
        //        byte[] data = null;

        //        try
        //        {
        //            data = queueXOR.Take();
        //        }
        //        catch (InvalidOperationException) { }

        //        if (data != null)
        //        {
        //            int datasize = data.Length;
        //            imageWriter.Write(datasize.ToString());
        //            imageWriter.Write(data, 0, datasize);
        //        }
        //    }
        //}


        //private void ReceiveImageXOR(string _targetIPAddress)
        //{
        //    TcpClient imageClient = new TcpClient();
        //    imageClient.Connect(IPAddress.Parse(_targetIPAddress), imageXORPort);
        //    Console.WriteLine("connected image");
        //    BinaryReader imageReader = new BinaryReader(imageClient.GetStream());

        //    stillSend = true;

        //    int datasize;

        //    while (stillSend == true)
        //    {
        //        datasize = int.Parse(imageReader.ReadString());
        //        byte[] data = new byte[datasize];
        //        data = imageReader.ReadBytes(datasize);


        //        Console.WriteLine("image got " + data.Length.ToString());
        //        //function_PassByteArrayTo(data);
        //    }
        //}

        //--------------------------------------------------
        //IMAGES END
        //--------------------------------------------------


        //--------------------------------------------------
        //VOLUME START
        //--------------------------------------------------


        private void InstantiateVolumeServer()      //uruchomienie VolumeMastera na PC
        {
            volumeMaster = new VolumeMaster();

            List <string> list = new List <string>(); //lista z nazwami procesow. uzywana do unikania duplikowania juz istniejacych sesji
            Icon          icon;                       //ikona do wyslana;
            Bitmap        bitmap;                     //bitmapa ikony

            byte[]       bitmapBytes;
            MemoryStream ms;

            writer.Write((int)ClientFlags.Volume_ServerReady);        //flaga oznaczajaca gotowosc do wysylania

            writer.Write(volumeMaster.MasterVolumeLevel.ToString());  //najpierw wysyla gloscnosc systemu. klient wie, ze to jest glosnosc systemowa i
            //nie potrzebuje reszty danych
            icon   = SystemIcons.Shield;
            ms     = new MemoryStream();
            bitmap = icon.ToBitmap();
            bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);        //wysylanie ikonki systemowej. placeholder, wlasciwa ikonak bedzie juz na androidzie
            bitmapBytes = ms.ToArray();

            writer.Write(bitmapBytes.Length);
            writer.Write(bitmapBytes, 0, bitmapBytes.Length);


            writer.Write(volumeMaster.Sessions.Count.ToString());   //wysyla ilosc sesji NA PC. Ilosc sesji jakie zaakceptuje android bedzie inna.



            for (int i = 0; i < volumeMaster.Sessions.Count; i++)   //po wszystkich sesjach
            {
                string displayName;
                string processName;
                string mute;
                string volume;
                string processID;

                //jesli istnieje displayname procesu. niektore procesy nie maja swojego displayname
                if (volumeMaster.Sessions[i].DisplayName != null && volumeMaster.Sessions[i].DisplayName != "")
                {
                    displayName = volumeMaster.Sessions[i].DisplayName;
                    //writer.Write(volumeMaster.Sessions[i].DisplayName);
                }
                else
                {
                    displayName = "null";
                }

                //jesli istnieje proces. uslugi systemu nie musza miec instancji procesu aby korzystac z audioapi. jednak wiekszosc sesji ma swoj proces.
                if (volumeMaster.Sessions[i].Process != null)
                {
                    processName = volumeMaster.Sessions[i].Process.ProcessName;
                    processID   = volumeMaster.Sessions[i].Process.Id.ToString();
                    //writer.Write(volumeMaster.Sessions[i].Process.ProcessName);
                }
                else
                {
                    processName = "null";
                    processID   = "0";
                }

                //mutestatus - czy sesja jest zmutowana
                mute = volumeMaster.Sessions[i].Mute.ToString();
                //volume
                volume = volumeMaster.Sessions[i].Volume.ToString();

                //poniewaz android nie wie ile PC bedzie wysylal sesji, wie tylko ile bedzie maksymalnie wysylal, wysyla sie tag skip gdy sesja jest pomijana
                //new lub skip

                //PC nie wysyla duplikatów sesji. jest to zwiazane z tym, ze jeden program moze miec wiele wywolan audioapi. sesje sa grupowane po processname
                if (!list.Contains(processName) || processName == "null")
                {
                    list.Add(processName);
                    writer.Write("new");
                    writer.Write(displayName);
                    writer.Write(processName);
                    writer.Write(mute);
                    writer.Write(volume);
                    writer.Write(processID);

                    ms     = new MemoryStream();
                    icon   = volumeMaster.Sessions[i].GetIcon32x32();
                    bitmap = icon.ToBitmap();
                    bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
                    bitmapBytes = ms.ToArray();


                    writer.Write(bitmapBytes.Length);
                    writer.Write(bitmapBytes, 0, bitmapBytes.Length);
                }
                else
                {
                    writer.Write("skip");
                }
            }
        }
示例#3
0
        private void InstantiateVolumeServer()      //uruchomienie VolumeMastera na PC
        {
            volumeMaster = new VolumeMaster();
            writer.Write("vIS");                                  //flaga oznaczajaca gotowosc do wysylania

            writer.Write(volumeMaster.Sessions.Count.ToString()); //wysyla ilosc sesji NA PC. Ilosc sesji jakie zaakceptuje android bedzie inna.

            List <string> list = new List <string>();             //lista z nazwami procesow. uzywana do unikania duplikowania juz istniejacych sesji

            for (int i = 0; i < volumeMaster.Sessions.Count; i++) //po wszystkich sesjach
            {
                string displayName;
                string processName;
                string mute;
                string volume;
                string processID;

                //jesli istnieje displayname procesu. niektore procesy nie maja swojego displayname
                if (volumeMaster.Sessions[i].DisplayName != null && volumeMaster.Sessions[i].DisplayName != "")
                {
                    displayName = volumeMaster.Sessions[i].DisplayName;
                    //writer.Write(volumeMaster.Sessions[i].DisplayName);
                }
                else
                {
                    displayName = "null";
                }

                //jesli istnieje proces. uslugi systemu nie musza miec instancji procesu aby korzystac z audioapi. jednak wiekszosc sesji ma swoj proces.
                if (volumeMaster.Sessions[i].Process != null)
                {
                    processName = volumeMaster.Sessions[i].Process.ProcessName;
                    processID   = volumeMaster.Sessions[i].Process.Id.ToString();
                    //writer.Write(volumeMaster.Sessions[i].Process.ProcessName);
                }
                else
                {
                    processName = "null";
                    processID   = "0";
                }

                //mutestatus - czy sesja jest zmutowana
                mute = volumeMaster.Sessions[i].Mute.ToString();
                //volume
                volume = volumeMaster.Sessions[i].Volume.ToString();

                //poniewaz android nie wie ile PC bedzie wysylal sesji, wie tylko ile bedzie maksymalnie wysylal, wysyla sie tag skip gdy sesja jest pomijana
                //new lub skip

                //PC nie wysyla duplikatów sesji. jest to zwiazane z tym, ze jeden program moze miec wiele wywolan audioapi. sesje sa grupowane po processname
                if (!list.Contains(processName) || processName == "null")
                {
                    list.Add(processName);
                    writer.Write("new");
                    writer.Write(displayName);
                    writer.Write(processName);
                    writer.Write(mute);
                    writer.Write(volume);
                    writer.Write(processID);
                }
                else
                {
                    writer.Write("skip");
                }
            }
        }