public unsafe Config SaveCurrentScreenColorToConfig(string configName) { List <Config> configs = _configService.GetConfigs(); Config configToModify = configs.FirstOrDefault(x => x.ConfigName == configName); if (configToModify == null) //If the config doesn't exist { configToModify = new Config() { ConfigName = configName == "" ? "config" : configName, Monitors = new List <Monitor>(), Order = configs.Count }; } else //If the config already exists { if (MessageBox.Show($"Are you sure you want to erase this config: {configName}?", "", MessageBoxButton.OKCancel) == MessageBoxResult.OK) { configToModify.Monitors = new List <Monitor>(); } else { return(null); } } List <Monitor> monitors = _monitorService.GetMonitorsExceptAllMonitorsInOne(); foreach (Monitor monitor in monitors) { ushort *gArray = stackalloc ushort[3 * 256]; bool retVal = GetDeviceGammaRamp(monitor.Hdc.ToInt32(), gArray); //Get screen data if (retVal) //If it' ok { List <ushort> rgb = new List <ushort>(); for (int i = 0; i < 256 * 3; i++) { rgb.Add(gArray[i]); } configToModify.Monitors.Add(new Monitor() { Name = monitor.Name, Rgb = rgb.ToArray() }); } else { MessageBox.Show("Can't get screen data. \r\nTry again or restart application.", "Error"); return(null); } } return(_configService.SaveConfig(configToModify)); }