private void SaveKeyboardLayoutList() { int idxFilename = lvLayouts.Columns.IndexOf(colFileName); int idxDisplay = lvLayouts.Columns.IndexOf(colDisplayText); int idxHotkey = lvLayouts.Columns.IndexOf(colHotkey); KeyboardLayoutList keyboardList = new KeyboardLayoutList(); foreach (ListViewItem lvi in lvLayouts.Items) { keyboardList.Add(new KeyboardLayout( lvi.SubItems[idxFilename].Text, lvi.SubItems[idxDisplay].Text, lvi.SubItems[idxHotkey].Text, lvi.Group.Name == "Enabled")); } FileStream fs = null; System.Xml.XmlWriter writer = null; try { fs = new FileStream(layoutXMLFile, FileMode.Create); System.Xml.XmlWriterSettings settings = new System.Xml.XmlWriterSettings(); settings.Indent = true; settings.IndentChars = (" "); writer = System.Xml.XmlWriter.Create(fs, settings); writer.WriteStartElement("Layouts"); keyboardList.WriteXml(writer); writer.WriteEndElement(); } catch (UnauthorizedAccessException) { AskToRunAsAdministrator("Access is denied and failed to save keyboard layouts list. Do you want to run KeyMagic as administrator?"); } catch (Exception ex) { Console.WriteLine(ex); } finally { if (writer != null) writer.Close(); if (fs != null) fs.Close(); } }