186 lines
5.9 KiB
C#
186 lines
5.9 KiB
C#
|
|
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<bool> 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 { }
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|