Esempio n. 1
0
        static void Main(string[] args)
        {
            //make sure only one instance is running
            SharedSettings.CheckForTwins();

            //check for device layout and adjust for Mini or Standard StreamDeck
            if (SettingsSDMonitor.CheckForLayout() != null)
            {
                if (SettingsSDMonitor.CheckForLayout() == "Mini")
                {
                    isMiniDeck = true;
                }
            }

            //clean display and set brightness
            ImageManager.deck.ClearKeys();
            var displayBrightness = Convert.ToByte(SettingsSDMonitor.displayBrightness);

            ImageManager.deck.SetBrightness(displayBrightness);

            //create and process necessary header images
            ImageManager.ProcessHeaderImages();

            //check for State setting and start State accodingly
            if (SharedSettings.CurrentSate() == 1)
            {
                StartMonitorState();
            }
            if (SharedSettings.CurrentSate() == 2)
            {
                StartClockState();
            }

            //MonitorState
            void StartMonitorState()
            {
                var showFps = false;

                if (isMiniDeck == true)
                {
                    if (SettingsSDMonitor.isFpsCounter == "True")
                    {
                        showFps = true;
                    }
                }

                try
                {
                    //check if MSIAfterburner process is running
                    if (SettingsSDMonitor.CheckForAB() == true)
                    {
                        msiAB = new HardwareMonitor();
                        msiAB.Connect();
                        isABRunning = true;
                    }

                    else
                    {
                        msiAB = null;
                    }

                    //define Librehardwaremonitor sensors and connect (CPU temp data requires 'highestAvailable' requestedExecutionLevel !!)
                    ohmComputer.Open();

                    //set static header images
                    ImageManager.SetStaticHeaders();

                    if (isMiniDeck == false)
                    {
                        showFps = true;

                        //check if using animations or static images
                        string currentProfile = SharedSettings.config.Read("selectedProfile", "Current_Profile");
                        if (SharedSettings.IsAnimationEnabled(currentProfile) != "True")
                        {
                            foreach (var button in SettingsSDMonitor.BgButtonList())
                            {
                                ImageManager.SetStaticImg(SettingsSDMonitor.imageName, button);
                            }

                            //start standard loop without the image animations
                            StartMonitor();
                        }
                        else
                        {
                            //start both loops in parallel
                            Parallel.Invoke(() => ImageManager.StartAnimation(), () => StartMonitor());
                        }
                    }

                    else
                    {
                        StartMonitor();
                    }

                    void StartMonitor()
                    {
                        string typeFps;
                        int    KeyLocFps;
                        int    KeyLocGpuTemp;
                        int    KeyLocGpuLoad;
                        int    KeyLocCpuTemp;
                        int    KeyLocCpuLoad;

                        if (isMiniDeck == true)
                        {
                            typeFps       = "fmini";
                            KeyLocFps     = SettingsSDMonitor.KeyLocFpsMini;
                            KeyLocGpuTemp = SettingsSDMonitor.KeyLocGpuTempMini;
                            KeyLocGpuLoad = SettingsSDMonitor.KeyLocGpuLoadMini;
                            KeyLocCpuTemp = SettingsSDMonitor.KeyLocCpuTempMini;
                            KeyLocCpuLoad = SettingsSDMonitor.KeyLocCpuLoadMini;
                        }

                        else
                        {
                            typeFps       = "f";
                            KeyLocFps     = SettingsSDMonitor.KeyLocFps;
                            KeyLocGpuTemp = SettingsSDMonitor.KeyLocGpuTemp;
                            KeyLocGpuLoad = SettingsSDMonitor.KeyLocGpuLoad;
                            KeyLocCpuTemp = SettingsSDMonitor.KeyLocCpuTemp;
                            KeyLocCpuLoad = SettingsSDMonitor.KeyLocCpuLoad;
                        }

                        int counterDefault = 1;

                        //start loop
                        while (true)
                        {
                            if (ImageManager.exitflag)
                            {
                                break;
                            }

                            int countValue = counterDefault++;

                            try
                            {
                                //add key press handler, if pressed send exit command
                                ImageManager.deck.KeyStateChanged += DeckKeyPressed;

                                if (showFps == true)
                                {
                                    //connect to msi afterburner and reload values
                                    if (isABRunning == true)
                                    {
                                        var framerateEntry = msiAB.GetEntry(HardwareMonitor.GPU_GLOBAL_INDEX, MONITORING_SOURCE_ID.FRAMERATE);
                                        msiAB.ReloadEntry(framerateEntry);

                                        //get values for framerate and pass to process
                                        int    framerateInt = (int)Math.Round(framerateEntry.Data);
                                        string dataValue    = framerateInt.ToString();
                                        string type         = typeFps;
                                        ImageManager.ProcessValueImg(dataValue, type, KeyLocFps);
                                    }

                                    else
                                    {
                                        string dataValue = "0";
                                        string type      = typeFps;
                                        ImageManager.ProcessValueImg(dataValue, type, KeyLocFps);
                                    }
                                }

                                if (isMiniDeck == false)
                                {
                                    //get and set time
                                    string timeOutput = DateTime.Now.ToString("hh:mm");

                                    if (timeOutput.StartsWith("0"))
                                    {
                                        timeOutput = timeOutput.Remove(0, 1);
                                    }

                                    ImageManager.ProcessValueImg(timeOutput, "ti", SettingsSDMonitor.KeyLocTimeHeader);
                                }

                                //search hardware
                                foreach (IHardware hardware in ohmComputer.Hardware)
                                {
                                    hardware.Update();

                                    //check for gpu sensor
                                    if (hardware.HardwareType == HardwareType.GpuNvidia || hardware.HardwareType == HardwareType.GpuAti)
                                    {
                                        foreach (ISensor sensor in hardware.Sensors)
                                        {
                                            //search for temp sensor
                                            if (sensor.SensorType == SensorType.Temperature)
                                            {
                                                string dataValue = sensor.Value.ToString() + "c";
                                                string type      = "t";
                                                ImageManager.ProcessValueImg(dataValue, type, KeyLocGpuTemp);
                                            }

                                            //search for load sensor
                                            if (sensor.SensorType == SensorType.Load)
                                            {
                                                //add gpu load sensors to list
                                                string        getValues = sensor.Name + sensor.Value.ToString();
                                                List <string> valueList = new List <string>
                                                {
                                                    getValues
                                                };
                                                //get values for gpu and pass to process
                                                foreach (string value in valueList)
                                                {
                                                    if (value.Contains("GPU Core"))
                                                    {
                                                        //get values for gpu and pass to process
                                                        int    gpuLoadInt = (int)Math.Round(sensor.Value.Value);
                                                        string dataValue  = gpuLoadInt.ToString() + "%";
                                                        string type       = "l";
                                                        ImageManager.ProcessValueImg(dataValue, type, KeyLocGpuLoad);
                                                    }
                                                }
                                            }
                                        }
                                    }

                                    //check for cpu sensor
                                    if (hardware.HardwareType == HardwareType.CPU)
                                    {
                                        string cpuTempString;

                                        if (hardware.Name.Contains("Ryzen"))
                                        {
                                            cpuTempString = "Core (Tdie)";
                                        }

                                        if (hardware.Name.Contains("Intel"))
                                        {
                                            cpuTempString = "CPU Package";
                                        }

                                        else
                                        {
                                            cpuTempString = "Core #0";
                                        }

                                        foreach (ISensor sensor in hardware.Sensors)
                                        {
                                            //search for temp sensor
                                            if (sensor.SensorType == SensorType.Temperature)
                                            {
                                                //add cpu temp sensors to list
                                                string        getValues = sensor.Name + sensor.Value.ToString();
                                                List <string> valueList = new List <string>
                                                {
                                                    getValues
                                                };
                                                //get values for cpu and pass to process
                                                foreach (string value in valueList)
                                                {
                                                    if (value.Contains(cpuTempString))
                                                    {
                                                        string resultPackage = value.Substring(Math.Max(0, value.Length - 2));
                                                        if (!resultPackage.Contains("#"))
                                                        {
                                                            string dataValue = resultPackage.ToString() + "c";
                                                            string type      = "t";
                                                            ImageManager.ProcessValueImg(dataValue, type, KeyLocCpuTemp);
                                                        }
                                                    }
                                                }
                                            }

                                            //search for load sensor
                                            if (sensor.SensorType == SensorType.Load)
                                            {
                                                //add cpu load sensors to list
                                                string        getValues = sensor.Name + sensor.Value.ToString();
                                                List <string> valueList = new List <string>
                                                {
                                                    getValues
                                                };
                                                //get values for cpu and change Stream Deck image
                                                foreach (string value in valueList)
                                                {
                                                    if (value.Contains("CPU Total"))
                                                    {
                                                        //get values for cpu and pass to process
                                                        int    cpuLoadInt = (int)Math.Round(sensor.Value.Value);
                                                        string dataValue  = cpuLoadInt.ToString() + "%";
                                                        string type       = "l";
                                                        ImageManager.ProcessValueImg(dataValue, type, KeyLocCpuLoad);
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }

                                //wait 1 second before restarting loop
                                System.Threading.Thread.Sleep(1000);

                                //remove handler
                                ImageManager.deck.KeyStateChanged -= DeckKeyPressed;
                            }

                            catch (Exception)
                            {
                                ExitApp();
                            }
                        }
                    }
                }

                catch (Exception ex)
                {
                    if (ex.InnerException is StreamDeckSharp.Exceptions.StreamDeckNotFoundException)
                    {
                        string deviceNotFound = " 'Stream Deck' Device not found/connected ! ";
                        MessageBox.Show(deviceNotFound);
                    }

                    ExitApp();
                }
            }

            // ClockState
            void StartClockState()
            {
                if (isMiniDeck == false)
                {
                    //clear the FPS monitoring button image/animation again seperatly. This is to prevent corrupted images being left on that button when switching to Clock state
                    ImageManager.deck.ClearKey(0);
                }

                //start both loops in parallel
                Parallel.Invoke(() => ImageManager.StartAnimClock(), () => StartClock());
            }

            void StartClock()
            {
                //start loop
                while (true)
                {
                    if (ImageManager.exitflag)
                    {
                        break;
                    }
                    try
                    {
                        //add key press handler, if pressed send exit command
                        ImageManager.deck.KeyStateChanged += DeckKeyPressed;

                        //get current time
                        DateTime now = DateTime.Now;

                        string hours = now.Hour.ToString();

                        if (hours.Length < 2)
                        {
                            hours = "0" + hours;
                        }

                        string minutes = now.ToString("mm");

                        if (isMiniDeck == true)
                        {
                            //send current time to ImageManager
                            ImageManager.ClockStateMini(hours, minutes);
                        }
                        else
                        {
                            //send current time to ImageManager
                            ImageManager.ClockState(hours, minutes);
                        }

                        //wait 10 seconds between getting current time
                        System.Threading.Thread.Sleep(10000);

                        //remove handler
                        ImageManager.deck.KeyStateChanged -= DeckKeyPressed;
                    }

                    catch (Exception)
                    {
                        ExitApp();
                    }
                }
            }
        }
Esempio n. 2
0
        //private void a

        private bool ShowMsiState()
        {
            txtLog.Clear();
            //lvMsi.Items.Clear();
            //lvMsi.Clear();

            int normalColumnWidth = 20;

            dgvMSI.Rows.Clear();
            dgvMSI.Columns.Clear();
            dgvMSI.AutoGenerateColumns       = false;
            dgvMSI.RowHeadersVisible         = false;
            dgvMSI.MultiSelect               = false;
            dgvMSI.SelectionMode             = DataGridViewSelectionMode.FullRowSelect;
            dgvMSI.AutoSizeRowsMode          = DataGridViewAutoSizeRowsMode.AllCells;
            dgvMSI.DefaultCellStyle.WrapMode = DataGridViewTriState.True;

            //dgvMSI.Columns.Add(new DataGridViewTextBoxColumn() {HeaderText = "Index", ReadOnly = true, AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill, FillWeight = normalColumnWidth });
            //dgvMSI.Columns.Add(new DataGridViewTextBoxColumn() {HeaderText = "Device", ReadOnly = true, AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill, FillWeight = normalColumnWidth });
            //dgvMSI.Columns.Add(new DataGridViewTextBoxColumn() {HeaderText = "GpuId", ReadOnly = true, AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill, FillWeight = normalColumnWidth });

            dgvMSI.Columns.Add(new DataGridViewTextBoxColumn()
            {
                HeaderText = "", ReadOnly = true, FillWeight = normalColumnWidth
            });
            dgvMSI.Columns.Add(new DataGridViewTextBoxColumn()
            {
                HeaderText = "Index", ReadOnly = true, FillWeight = normalColumnWidth
            });
            dgvMSI.Columns.Add(new DataGridViewTextBoxColumn()
            {
                HeaderText = "Device", ReadOnly = true, FillWeight = normalColumnWidth
            });
            dgvMSI.Columns.Add(new DataGridViewTextBoxColumn()
            {
                HeaderText = "GpuId", ReadOnly = true, FillWeight = normalColumnWidth
            });
            dgvMSI.Columns.Add(new DataGridViewTextBoxColumn()
            {
                HeaderText = "Val", ReadOnly = true, FillWeight = normalColumnWidth
            });

            dgvMSI.Columns.Add(new DataGridViewTextBoxColumn()
            {
                HeaderText = "FanSpeed", ReadOnly = true, FillWeight = normalColumnWidth
            });
            dgvMSI.Columns.Add(new DataGridViewTextBoxColumn()
            {
                HeaderText = "CoreClock", ReadOnly = true, FillWeight = normalColumnWidth
            });
            dgvMSI.Columns.Add(new DataGridViewTextBoxColumn()
            {
                HeaderText = "ShaderClock", ReadOnly = true, FillWeight = normalColumnWidth
            });
            dgvMSI.Columns.Add(new DataGridViewTextBoxColumn()
            {
                HeaderText = "MemoryClock", ReadOnly = true, FillWeight = normalColumnWidth
            });
            dgvMSI.Columns.Add(new DataGridViewTextBoxColumn()
            {
                HeaderText = "CoreVoltage", ReadOnly = true, FillWeight = normalColumnWidth
            });
            dgvMSI.Columns.Add(new DataGridViewTextBoxColumn()
            {
                HeaderText = "MemoryVoltage", ReadOnly = true, FillWeight = normalColumnWidth
            });
            dgvMSI.Columns.Add(new DataGridViewTextBoxColumn()
            {
                HeaderText = "AuxVoltage", ReadOnly = true, FillWeight = normalColumnWidth
            });
            dgvMSI.Columns.Add(new DataGridViewTextBoxColumn()
            {
                HeaderText = "CoreVoltageBoost", ReadOnly = true, FillWeight = normalColumnWidth
            });
            dgvMSI.Columns.Add(new DataGridViewTextBoxColumn()
            {
                HeaderText = "MemoryVoltageBoost", ReadOnly = true, FillWeight = normalColumnWidth
            });
            dgvMSI.Columns.Add(new DataGridViewTextBoxColumn()
            {
                HeaderText = "AuxVoltageBoost", ReadOnly = true, FillWeight = normalColumnWidth
            });
            dgvMSI.Columns.Add(new DataGridViewTextBoxColumn()
            {
                HeaderText = "PowerLimit", ReadOnly = true, FillWeight = normalColumnWidth
            });
            dgvMSI.Columns.Add(new DataGridViewTextBoxColumn()
            {
                HeaderText = "CoreClockBoost", ReadOnly = true, FillWeight = normalColumnWidth
            });
            dgvMSI.Columns.Add(new DataGridViewTextBoxColumn()
            {
                HeaderText = "MemoryClockBoost", ReadOnly = true, FillWeight = normalColumnWidth
            });


            //lvMsi.Columns.Add("Index", normalColumnWidth);
            //lvMsi.Columns.Add("Device", normalColumnWidth);
            //lvMsi.Columns.Add("GpuId", normalColumnWidth);

            //foreach (ColumnHeader cl in lvMsi.Columns)
            //{
            //  //cl.
            //}

            bool result = true;

            try
            {
                if (macm == null)
                {
                    macm = new ControlMemory();
                }
                else
                {
                    macm.Disconnect();
                    macm.Connect();
                }
            }
            catch (Exception e)
            {
                Wr(e.Message);
                result = false;
                //return false;
            }

            try
            {
                if (mahm == null)
                {
                    mahm = new HardwareMonitor();
                }
                else
                {
                    mahm.Disconnect();
                    mahm.Connect();
                }
            }
            catch (Exception e)
            {
                Wr(e.Message);
                result = false;
                //return false;
            }

            if (!result)
            {
                return(result);
            }

            for (int i = 0; i < mahm.Header.GpuEntryCount; i++)
            {
                //wr("***** MSI AFTERTERBURNER GPU " + i + " *****");
                ControlMemoryGpuEntry ge = macm.GpuEntries[i];
                dgvMSI.Rows.Add(new String[]
                                { i.ToString(),
                                  mahm.GpuEntries[i].Index.ToString(),
                                  mahm.GpuEntries[i].Device,
                                  mahm.GpuEntries[i].GpuId,
                                  "Cur:" + "\n" + "Min:" + "\n" + "Max:" + "\n" + "Def:",
                                  ge.FanSpeedCur.ToString() + "\n" + ge.FanSpeedMin.ToString() + "\n" + ge.FanSpeedMax.ToString() + "\n" + ge.FanSpeedDef.ToString(),
                                  ge.CoreClockCur.ToString() + "\n" + ge.CoreClockMin.ToString() + "\n" + ge.CoreClockMax.ToString() + "\n" + ge.CoreClockDef.ToString(),
                                  ge.ShaderClockCur.ToString() + "\n" + ge.ShaderClockMin.ToString() + "\n" + ge.ShaderClockMax.ToString() + "\n" + ge.ShaderClockDef.ToString(),
                                  ge.MemoryClockCur.ToString() + "\n" + ge.MemoryClockMin.ToString() + "\n" + ge.MemoryClockMax.ToString() + "\n" + ge.MemoryClockDef.ToString(),
                                  ge.CoreVoltageCur.ToString() + "\n" + ge.CoreVoltageMin.ToString() + "\n" + ge.CoreVoltageMax.ToString() + "\n" + ge.CoreVoltageDef.ToString(),
                                  ge.MemoryVoltageCur.ToString() + "\n" + ge.MemoryVoltageMin.ToString() + "\n" + ge.MemoryVoltageMax.ToString() + "\n" + ge.MemoryVoltageDef.ToString(),
                                  ge.AuxVoltageCur.ToString() + "\n" + ge.AuxVoltageMin.ToString() + "\n" + ge.AuxVoltageMax.ToString() + "\n" + ge.AuxVoltageDef.ToString(),
                                  ge.CoreVoltageBoostCur.ToString() + "\n" + ge.CoreVoltageBoostMin.ToString() + "\n" + ge.CoreVoltageBoostMax.ToString() + "\n" + ge.CoreVoltageBoostDef.ToString(),
                                  ge.MemoryVoltageBoostCur.ToString() + "\n" + ge.MemoryVoltageBoostMin.ToString() + "\n" + ge.MemoryVoltageBoostMax.ToString() + "\n" + ge.MemoryVoltageBoostDef.ToString(),
                                  ge.AuxVoltageBoostCur.ToString() + "\n" + ge.AuxVoltageBoostMin.ToString() + "\n" + ge.AuxVoltageBoostMax.ToString() + "\n" + ge.AuxVoltageBoostDef.ToString(),
                                  ge.PowerLimitCur.ToString() + "\n" + ge.PowerLimitMin.ToString() + "\n" + ge.PowerLimitMax.ToString() + "\n" + ge.PowerLimitDef.ToString(),
                                  ge.CoreClockBoostCur.ToString() + "\n" + ge.CoreClockBoostMin.ToString() + "\n" + ge.CoreClockBoostMax.ToString() + "\n" + ge.CoreClockBoostDef.ToString(),
                                  ge.MemoryClockBoostCur.ToString() + "\n" + ge.MemoryClockBoostMin.ToString() + "\n" + ge.MemoryClockBoostMax.ToString() + "\n" + ge.MemoryClockBoostDef.ToString() });

                //ListViewItem li =  lvMsi.Items.Add(mahm.GpuEntries[i].Index.ToString());
                //li.SubItems.Add(mahm.GpuEntries[i].Device);
                //li.SubItems.Add(mahm.GpuEntries[i].GpuId);

                //li.SubItems.Add(mahm.Entries[i].);
            }

            Wr("***** macm.Header.MasterGpu " + macm.Header.MasterGpu.ToString());
            Wr();
            for (int i = 0; i < macm.Header.GpuEntryCount; i++)
            {
                Wr("***** MSI AFTERTERBURNER GPU " + i + " *****");
                Wr("Index: " + macm.GpuEntries[i].Index.ToString());
                Wr(macm.GpuEntries[i].ToString().Replace(";", Environment.NewLine));
                Wr();
            }

            Wr();
            Wr("****************************************************************");
            Wr();
            for (int i = 0; i < mahm.Header.EntryCount; i++)
            {
                Wr("***** MSI AFTERTERBURNER DATA SOURCE " + i + " *****");
                Wr(mahm.Entries[i].ToString());//.Replace(";", "\n"));
                Wr();
            }
            return(true);
        }