diff --git a/.gitignore b/.gitignore index 1aa9b08..f3134d0 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ obj packages .vs .suo +.idea/.idea.CAOS diff --git a/CAOS/CaosInjector.cs b/CAOS/CaosInjector.cs index 27996f9..c957cda 100644 --- a/CAOS/CaosInjector.cs +++ b/CAOS/CaosInjector.cs @@ -13,6 +13,7 @@ public class CaosInjector private EventWaitHandle ResultEventHandle; private EventWaitHandle RequestRventHandle; private string GameName; + private static readonly Encoding Encoder = Encoding.GetEncoding(1252); public CaosInjector(string gameName) { @@ -113,7 +114,7 @@ public CaosResult ExecuteCaos(string CaosAsString, string Action = "execute") { //Need more exception checking here - JG InitInjector(); - byte[] CaosBytes = Encoding.UTF8.GetBytes(Action + "\n" + CaosAsString + "\n"); + byte[] CaosBytes = Encoder.GetBytes(Action + "\n" + CaosAsString + "\n"); int BufferPosition = 24; Mutex.WaitOne(1000); foreach (byte Byte in CaosBytes) @@ -142,7 +143,7 @@ public CaosResult ExecuteCaos(string CaosAsString, string Action = "execute") Mutex.ReleaseMutex(); CloseInjector(); Thread.Sleep(50); - return new CaosResult(ResultCode, Encoding.UTF8.GetString(ResultBytes), ProcessID); + return new CaosResult(ResultCode, Encoder.GetString(ResultBytes), ProcessID); } public int ProcessID() diff --git a/Demo/Program.cs b/Demo/Program.cs index 7783542..03d2fe4 100644 --- a/Demo/Program.cs +++ b/Demo/Program.cs @@ -14,6 +14,7 @@ static void Main(string[] args) { TryCatchStrategy(injector); TryReturnBoolStrategy(injector); + TryCp1252Encoding(injector); } else { @@ -64,5 +65,37 @@ private static void TryReturnBoolStrategy(CaosInjector injector) Console.WriteLine("Execution failed. Game may have exited."); } } + + private static void TryCp1252Encoding(CaosInjector injector) + { + CaosResult result; + var testString = "bonjour, ça va? très bien!"; + if (injector.TryExecuteCaos($"outs \"{testString}\"", out result)) + { + if (result.Success) + { + var stringWithoutTerminator = result.Content.Substring(0, result.Content.Length - 1); + if (stringWithoutTerminator == testString) + { + Console.WriteLine("CP1252 Encoding was used successfully"); + } + else + { + Console.Error.WriteLine( + "CP1252 result was unexpected. Expected: '" + testString + + "'; Found: '" + result.Content + "'"); + } + } + else + { + Debug.Assert(result.ResultCode != 0); + Console.WriteLine($"Error Code: {result.ResultCode}"); + } + } + else + { + Console.WriteLine("Execution failed. Game may have exited."); + } + } } }