众所周知,vnr的翻译窗口和左侧菜单是可以伴随游戏移动的,想在C#中实现,查找了一下正好有,这是利用SetWinEventHook实现的https://stackoverflow.com/questions/48767318/move-window-when-external-applications-window-moves,极少数游戏可能不适用,C#的Process类不一定是我们想要的主窗口
这是通过SetWinEventHook实现,当目标窗口位置或者大小改变后,利用GetWindowRect函数获取目标窗口坐标,从而更新翻译窗口坐标。
在wpf中,可以绑定Top和Left属性,设定两个坐标偏移量作为两个窗口之间的桥梁。如果翻译窗口自身位置发生变化,可以通过一些窗口事件,比如MouseLeave事件更新偏移量。根据偏移量更新窗口Top和Left属性就行了。不过注意一下某些游戏全屏,翻译窗口可能会跑到屏幕之外。不过很多游戏全屏状态无法显示翻译窗口,或许采用类似D3DHook的东西能较好实现。
窗口用到的东西:
日文分词 MeCab.DotNet :https://github.com/kekyo/MeCab.DotNet
分词词典 mecab-ipadic-neologd https://github.com/neologd/mecab-ipadic-neologd ,词汇量比默认的mecab-ipadic多得多,缺点是很大,800多m左右。
或者 unidic https://unidic.ninjal.ac.jp/download
窗口模糊 FluentWPF 此方法仅限win10):https://github.com/sourcechord/FluentWPF/blob/e1d8176e8d81c6b1b7e6fe65a2c19cf27a4fe270/FluentWPF/Utility/AcrylicHelper.cs
窗口样式则是仿Yuki 做了一下 :(Copy了一下文字颜色)https://github.com/project-yuki/YUKI
Comments | 8 条评论
嘿 lgztx作者
视频里的是你自己调用的vnr吗?
太强了,那个在线翻译的速度真的让人羡慕。能否帮我们指个道,想要自学这方面知识和技巧。
@1093667520 并非调用,自己搞的类似vnr的程序,只不过实现和vnr一样的功能,实际上vnr的人工字幕和共享辞书也搞得差不多了,等我有时间搞完就放出来,
如果你也想弄,当然是去学编程,如果你有一定基础或者会点C#,我倒是能帮助你一点
@lgztx 感谢好意耶,没想到你会这么快回复。
我自己大概也想到这是涉及编程相关的,所以对你能做出这种自用的简洁软件很羡慕。我倒是有不少高中一起升上去的朋友有在学编程,但我对这方面可以说完全是新手,虽然有着些许的兴趣,但现在上学 学的跟编程完全不相干,而是绘画艺术类。
若之后,我有能力,我也愿意尝试做一个这种程序。
请问该软件开源吗?看了御坂翻译器和YUKI之后,我也打算用Textractor和MeCab搞个翻译工具,准备用C#和WPF,您这个软件的大致思路和我的正好一样……
@ZUIcat 会开源,本来是想等10月份winui正式版发布,win10用winui,win7用wpf,不过考虑到winui的进度(支持窗体透明或者窗体亚克力背景),可能会先发wpf版本
@lgztx 感谢回复!我也先把已有的这些代码研究研究,期待您软件的发布。
@ZUIcat 大家都是想造VNR才来到这个博客的吧,哈哈😂
我也鼓捣出一个了,不过是用java搞的,只有翻译功能哈哈,https://imgur.com/a/7BqcVRT
大佬这个看起来完成度很高了,能不能放出来让大家试试水😁