From c7afc657476faf52a24aec5886efcce8fe721af2 Mon Sep 17 00:00:00 2001 From: d0vgan Date: Thu, 10 Dec 2020 19:23:13 +0200 Subject: [PATCH] Reading the Hash Keys from a file --- SharpKeys/Dialog_Main.cs | 58 +++++++++++++++++++++++++++ SharpKeys/bin/Debug/SharpKeys.keys | Bin 0 -> 18190 bytes SharpKeys/bin/Release/SharpKeys.keys | Bin 0 -> 18190 bytes 3 files changed, 58 insertions(+) create mode 100644 SharpKeys/bin/Debug/SharpKeys.keys create mode 100644 SharpKeys/bin/Release/SharpKeys.keys diff --git a/SharpKeys/Dialog_Main.cs b/SharpKeys/Dialog_Main.cs index fd7e940..c7fd7f7 100644 --- a/SharpKeys/Dialog_Main.cs +++ b/SharpKeys/Dialog_Main.cs @@ -5,6 +5,7 @@ using System.Windows.Forms; using System.ComponentModel; using System.IO; +using System.Text.RegularExpressions; using Microsoft.Win32; namespace SharpKeys @@ -853,11 +854,68 @@ private void btnSaveKeys_Click(object sender, EventArgs e) } } + private string UnquoteString(string s) + { + // remove the leading & trailing '"' + if (s.StartsWith("\"") && s.EndsWith("\"")) + { + s = s.Substring(1, s.Length - 2); + } + return s; + } + + private bool ReadHashKeysFromFile(string pathToKeysFile) + { + if (!File.Exists(pathToKeysFile)) + return false; // the file does not exist + + string[] lines = File.ReadAllLines(pathToKeysFile, System.Text.Encoding.Unicode); + if (lines.Length == 0) + return false; // the file is empty + + m_hashKeys = new Hashtable(); + + foreach (string line in lines) + { + if (line.TrimStart().StartsWith("//")) + continue; // skipping a comment + + string[] items = line.Split(new char[]{','}, 2); + if (items.GetLength(0) == 2) + { + string param1 = items[0].Trim(); // w/o leading & trailing spaces + string param2 = items[1].Trim(); // w/o leading & trailing spaces + + int n = param2.LastIndexOf('"'); + if (n != -1) + { + // removing the trailing '//' after the last '"', if any + n = param2.IndexOf("//", n); + if (n != -1) + { + param2 = param2.Remove(n).TrimEnd(); + } + } + + param2 = Regex.Unescape(UnquoteString(param2)); + param1 = Regex.Unescape(UnquoteString(param1)); + + m_hashKeys.Add(param1, param2); + } + } + return true; + } + private void BuildParseTables() { if (m_hashKeys != null) return; + string pathToExeDir = Path.GetDirectoryName(Application.ExecutablePath); + string pathToKeysFile = Path.Combine(pathToExeDir, "SharpKeys.keys"); + if (ReadHashKeysFromFile(pathToKeysFile)) + return; + // the hash table uses a string in the form of Hi_Lo scan code (in Hex values) // that most sources say are scan codes. The 00_00 will disable a key - everything else // is pretty obvious. There is a bit of a reverse lookup however, so labels changed here diff --git a/SharpKeys/bin/Debug/SharpKeys.keys b/SharpKeys/bin/Debug/SharpKeys.keys new file mode 100644 index 0000000000000000000000000000000000000000..bf89f81855aa73364a4a15fcd1bcc8f57a520e90 GIT binary patch literal 18190 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