public FormSettings()
        {
            InitializeComponent();

            FormSwitcher.SetWindowTheme(listDevices.Handle, "explorer", null);
            var tile = new Size(listDevices.ClientSize.Width, (int)(listDevices.TileSize.Height * FormSwitcher.DpiFactor));

            listDevices.TileSize = tile;

            var size = new Size((int)(32 * FormSwitcher.DpiFactor), (int)(32 * FormSwitcher.DpiFactor));

            listDevices.LargeImageList = new ImageList
            {
                ImageSize  = size,
                ColorDepth = ColorDepth.Depth32Bit
            };

            Function.DataSource       = Enum.GetNames(typeof(HotkeyFunction));
            Function.DataPropertyName = "HKFunction";

            HotKey.DataSource       = Enum.GetNames(typeof(Keys));
            HotKey.DataPropertyName = "Key";

            Control.DataPropertyName = "Control";
            Alt.DataPropertyName     = "Alt";
            Shift.DataPropertyName   = "Shift";
            LWin.DataPropertyName    = "LWin";
            RWin.DataPropertyName    = "RWin";
            ShowOSD.DataPropertyName = "ShowOSD";

            gridHotkeys.DataSource = Program.settings.Hotkey;
        }
Exemple #2
0
        private static void Main(string[] args)
        {
            var codeBase = Assembly.GetExecutingAssembly().CodeBase;
            var uri = new UriBuilder(codeBase);
            var path = Uri.UnescapeDataString(uri.Path);
            Root = Path.GetDirectoryName(path) + "\\";

            try
            {
                AppDomain.CurrentDomain.UnhandledException += CurrentDomainUnhandledException;
                settings = Settings.Load();

                if (args.Length > 0)
                {
                    if (!AttachConsole(-1))
                        AllocConsole();
                    isConsole = true;
                    Console.WriteLine();

                    var hotkeyFunction = HotkeyFunction.NextPlaybackDevice;
                    var modifiers = HotModifierKeys.LWin;
                    var hotKey = Keys.LWin;
                    var rType = settings.DefaultDataFlow;
                    var keysOK = 0;

                    for (var index = 0; index < args.Length; index++)
                    {
                        var arg = args[index];
                        if (string.IsNullOrWhiteSpace(arg))
                            continue;

                        switch (arg.Substring(1, arg.Length - 1))
                        {
                            case "help":
                            case "h":
                            case "?":
                                Console.WriteLine();
                                Console.WriteLine("AudioSwitch v2.0 command-line help");
                                Console.WriteLine("----------------------------------");
                                Console.WriteLine("Available commands:");
                                Console.WriteLine("  /i - switch to input devices for the command. Default taken from settings.");
                                Console.WriteLine("  /o - switch to output devices for the command. Default taken from settings.");
                                Console.WriteLine();
                                Console.WriteLine("  /l - list all available devices of the selected type, < > is current default.");
                                Console.WriteLine("  /s - set a device as default: number for index, string for name.");
                                Console.WriteLine();
                                Console.WriteLine("  /m - set modifier keys for a new hotkey, separated by commas. Case sensitive.");
                                Console.WriteLine("  /k - set a key for a new hotkey. Case sensitive.");
                                Console.WriteLine("  /f - choose a function for the new hotkey. Case sensitive.");
                                Console.WriteLine();
                                Console.WriteLine("  /m, /k, /f (blank) - shows all possible values for the parameter.");
                                break;

                            case "i":
                                rType = EDataFlow.eCapture;
                                Console.WriteLine("Device group changed to input devices.");
                                break;

                            case "o":
                                rType = EDataFlow.eRender;
                                Console.WriteLine("Device group changed to output devices.");
                                break;

                            case "l":
                                Console.WriteLine();
                                Console.WriteLine(" Devices available:");
                                EndPoints.RefreshDeviceList(rType);

                                var i = 0;
                                foreach (var device in EndPoints.DeviceNames.Values)
                                    Console.WriteLine(device == EndPoints.DefaultDeviceName ? " <{0}> {1}" : "  {0}  {1}", i++, device);
                                Console.WriteLine();
                                break;

                            case "s":
                                index++;
                                int devID;

                                if (int.TryParse(args[index], out devID))
                                {
                                    EndPoints.RefreshDeviceList(rType);
                                    if (devID <= EndPoints.DeviceNames.Count - 1)
                                    {
                                        EndPoints.SetDefaultDeviceByID(devID);
                                    }
                                    else
                                    {
                                        Console.WriteLine("Error changing device!");
                                        return;
                                    }
                                }
                                else
                                {
                                    EndPoints.RefreshDeviceList(rType);
                                    if (!EndPoints.SetDefaultDeviceByName(args[index]))
                                    {
                                        Console.WriteLine("Error changing device!");
                                        return;
                                    }
                                }
                                Console.WriteLine("Device changed to \"" + EndPoints.DefaultDeviceName + "\"");
                                break;

                            case "m":
                                if (index == args.Length - 1)
                                {
                                    Console.WriteLine("Modifier keys:");
                                    Console.WriteLine(string.Join(", ", Enum.GetNames(typeof(HotModifierKeys))));
                                    return;
                                }
                                index++;
                                if (!Enum.TryParse(args[index], true, out modifiers))
                                {
                                    Console.WriteLine("Error reading modifier key(s)!");
                                    return;
                                }
                                Console.WriteLine("Modifier key(s) set to " + modifiers);
                                keysOK++;
                                break;

                            case "k":
                                if (index == args.Length - 1)
                                {
                                    Console.WriteLine("Keys:");
                                    Console.WriteLine(string.Join(", ", Enum.GetNames(typeof(Keys))));
                                    return;
                                }
                                index++;
                                if (!Enum.TryParse(args[index], true, out hotKey))
                                {
                                    Console.WriteLine("Error reading hot key!");
                                    return;
                                }
                                Console.WriteLine("Hot key set to " + hotKey);
                                keysOK++;
                                break;

                            case "f":
                                if (index == args.Length - 1)
                                {
                                    Console.WriteLine("Function names:");
                                    Console.WriteLine(string.Join(", ", Enum.GetNames(typeof(HotkeyFunction))));
                                    return;
                                }
                                index++;
                                if (!Enum.TryParse(args[index], true, out hotkeyFunction))
                                {
                                    Console.WriteLine("Error reading function name!");
                                    return;
                                }
                                Console.WriteLine("Hot key function set to " + hotkeyFunction);
                                keysOK++;
                                break;
                        }
                    }

                    if (keysOK == 3)
                    {
                        var hkey = GlobalHotkeys.AddOrFind(hotkeyFunction);
                        hkey.ModifierKeys = modifiers;
                        hkey.HotKey = hotKey;
                        Console.WriteLine("Hot key saved:  {0} => {1} + {2}", hotkeyFunction, modifiers, hotKey);
                        settings.Save();
                    }

                    return;
                }

                if (mutex.WaitOne(0, false))
                {
                    Application.EnableVisualStyles();
                    Application.SetCompatibleTextRenderingDefault(false);
                    frmOSD = new FormOSD();
                    var formSwitcher = new FormSwitcher();
                    Application.Run();
                    mutex.Close();
                }
            }
            finally
            {
                if (isConsole)
                {
                    SendKeys.SendWait("{ENTER}");
                    FreeConsole();
                }
            }
        }