/// <summary> /// 初始化Textractor /// </summary> /// <returns>成功返回真,失败返回假</returns> public bool Init(bool x86 = true) { string DllPath = ""; string ModulePath = ""; Console.WriteLine("Init()"); if (x86 == true) { //复制x86的dll ModulePath = Environment.CurrentDirectory + "\\lib\\TextHook\\x86\\texthost.dll"; DllPath = Environment.CurrentDirectory + "\\lib\\TextHook\\x86\\texthook.dll"; } else { //复制x64的dll ModulePath = Environment.CurrentDirectory + "\\lib\\TextHook\\x64\\texthost.dll"; DllPath = Environment.CurrentDirectory + "\\lib\\TextHook\\x64\\texthook.dll"; } Console.WriteLine(ModulePath); if (File.Exists(DllPath) && File.Exists(ModulePath))//判断要复制的文件是否存在 { try { File.Copy(DllPath, Environment.CurrentDirectory + "\\texthook.dll", true); File.Copy(ModulePath, Environment.CurrentDirectory + "\\texthost.dll", true); } catch (System.IO.IOException) { throw new Exception("无法复制texthook.dll或texthost.dll,请重启游戏和翻译器后再试!"); } } else { return(false); } createthread = CreateThreadHandle; output = OutputHandle; removethread = RemoveThreadHandle; callback = CallBackHandle; Console.WriteLine("TextHostInit()"); TextHostLib.TextHostInit(callback, callback, createthread, removethread, output); return(true); }
/// <summary> /// 添加剪切板监视线程 /// </summary> /// <param name="winHandle"></param> public void AddClipBoardThread(IntPtr winHandle) { TextHostLib.AddClipboardThread(winHandle); }
/// <summary> /// 根据Hook入口地址卸载一个Hook /// </summary> /// <param name="pid"></param> public void DetachProcessByHookAddress(int pid, string HookAddress) { TextHostLib.RemoveHook((uint)pid, long.Parse(HookAddress)); }
/// <summary> /// 给定特殊码注入 /// </summary> /// <param name="pid"></param> public void AttachProcessByHookCode(int pid, string HookCode) { TextHostLib.InsertHook((uint)pid, HookCode); }
/// <summary> /// 结束注入进程 /// </summary> /// <param name="pid"></param> public void DetachProcess(int pid) { TextHostLib.DetachProcess((uint)pid); }
/// <summary> /// 注入进程 /// </summary> /// <param name="pid"></param> public void AttachProcess(int pid) { TextHostLib.InjectProcess((uint)pid); }