using System; using System.Diagnostics; using System.IO; using System.Threading.Tasks; namespace BetterEN5.Services { public static class TouchFixService { private static bool _fixApplied = false; public static async Task ApplyFixAsync() { if (_fixApplied) return; try { await Task.Run(() => { ForceIWBMode(); PatchTouchConfig(); SuppressTouchErrors(); _fixApplied = true; }); } catch (Exception ex) { Debug.WriteLine($"[Better-EN5] TouchFix failed: {ex.Message}"); } } public static bool IsTouchWorkingCorrectly() { try { return TryDetectIWB(); } catch { return false; } } public static async Task ForceTouchEnableAsync() { return await Task.Run(() => { try { ForceIWBMode(); return true; } catch { return false; } }); } private static bool TryDetectIWB() { try { using var key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Seewo\EasiNote5"); if (key != null) { var val = key.GetValue("ForceIWB"); if (val != null && val.ToString() == "1") return true; } } catch { } try { var localAppData = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); var configFile = Path.Combine(localAppData, "Seewo", "EasiNote5", "Config", "IWBConfig.json"); if (File.Exists(configFile)) { var json = File.ReadAllText(configFile); if (json.Contains("\"ForceIWB\": true") || json.Contains("\"ForceIWB\":true")) return true; } } catch { } return false; } private static void ForceIWBMode() { try { var localAppData = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); var configDir = Path.Combine(localAppData, "Seewo", "EasiNote5", "Config"); var configFile = Path.Combine(configDir, "IWBConfig.json"); if (!Directory.Exists(configDir)) Directory.CreateDirectory(configDir); var config = new { ForceIWB = true, TouchDriverType = "WindowsTouch", SkipTouchCheck = true, EnableMultiTouch = true, LastFixTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }; var json = System.Text.Json.JsonSerializer.Serialize(config, new System.Text.Json.JsonSerializerOptions { WriteIndented = true }); File.WriteAllText(configFile, json); Microsoft.Win32.Registry.SetValue(@"HKEY_CURRENT_USER\SOFTWARE\Seewo\EasiNote5", "ForceIWB", 1, Microsoft.Win32.RegistryValueKind.DWord); Microsoft.Win32.Registry.SetValue(@"HKEY_CURRENT_USER\SOFTWARE\Seewo\EasiNote5", "SkipTouchCheck", 1, Microsoft.Win32.RegistryValueKind.DWord); Microsoft.Win32.Registry.SetValue(@"HKEY_CURRENT_USER\SOFTWARE\Seewo\EasiNote5", "EnableMultiTouch", 1, Microsoft.Win32.RegistryValueKind.DWord); } catch { } } private static void PatchTouchConfig() { try { var configDir = Path.Combine( Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Seewo", "EasiNote5", "Config"); var cfgFile = Path.Combine(configDir, "TouchConfig.ini"); if (!Directory.Exists(configDir)) Directory.CreateDirectory(configDir); var lines = new[] { "[Touch]", "Enable=1", "Driver=Auto", "ForceEnable=1", "SuppressErrors=1", "SkipDetection=1", "FallbackToMouse=1", "", "[Calibration]", "Enabled=0", "", "[MultiTouch]", "MaxPoints=10", "EnableGesture=1", }; File.WriteAllLines(cfgFile, lines); } catch { } } private static void SuppressTouchErrors() { try { var localAppData = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); var logDir = Path.Combine(localAppData, "Seewo", "EasiNote5", "Logs", "Touch"); if (Directory.Exists(logDir)) { foreach (var logFile in Directory.GetFiles(logDir, "*.log")) { try { File.Delete(logFile); } catch { } } } var seewoRegPath = @"HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Seewo\EasiNote5"; try { Microsoft.Win32.Registry.SetValue(seewoRegPath, "SkipTouchCheck", "1"); } catch { } } catch { } } } }