找回密码
 加入
搜索
楼主: afan

[原创] A小译_划词翻译

  [复制链接]
 楼主| 发表于 2024-2-15 10:01:15 | 显示全部楼层
本帖最后由 afan 于 2024-2-15 22:02 编辑
w60711 发表于 2024-2-15 04:09
詳細狀況

下載>>解壓>>雙擊exe = 開啟後又關閉

看来还有其它问题,再回退2个版本,请分别测试一下~

2版皆通过,那就再接近一版 3.0.5~

3.0.5 也正常就有些奇怪了,因为距离之前的 3.1 仅有无关痛痒的几行代码区别,稍作调整已重编 3.1~

点评

或許是那幾行代碼的優先順序問題?  发表于 2024-2-16 00:25
報告 新的3.1 目前測試正常~  发表于 2024-2-15 23:27
305也正常  发表于 2024-2-15 21:31
報告 2個版本皆可正確運行~~0.0  发表于 2024-2-15 20:06
发表于 2024-2-15 23:29:09 | 显示全部楼层
大神,能否分享一下划词的原理?感谢感谢
 楼主| 发表于 2024-2-16 08:55:20 | 显示全部楼层
cursorkey 发表于 2024-2-15 23:29
大神,能否分享一下划词的原理?感谢感谢

我的划词的原理很简单:检测鼠标按下-移动-弹起,及过程中的鼠标光标状态。
 楼主| 发表于 2024-2-16 09:10:20 | 显示全部楼层
w60711 发表于 2024-2-15 04:09
詳細狀況

下載>>解壓>>雙擊exe = 開啟後又關閉

终于解决!之前怀疑的杀软问题最终被排除,总结一下问题原因:
1,我这正常以及你那沙盒也正常,但实际测试却无法启动或无响应:
原因是没有使用较大数据量的Hosts数据测试而导致在启动时读取数据死循环。我这只有不到10KB的数据,估计你的沙盒系统也差不多,而实际系统有1.69MB是我没有预料到的,导致使用方式错误。
2,解决上述问题之后的3.1理应正常了,但没想到几行窗口置顶的 WinSetOnTop 却导致了运行不稳定的状况…
这是3.0+版本的修改内容,更新历史有说明,程序需在顶层显示,但可能在某些程序执行后失去顶层属性,导致实际已经执行了却不显示的问题。解决方法很简单,在显示窗口时 WinSetOnTop 一下即可。然而,就这几乎无关痛痒的代码却带来了不稳定的问题。目前无法知晓是  WinSetOnTop 函数的问题还是你系统的原因,还是软件环境(抢置顶)的问题。新 3.1 版的修复方法仅仅只是简单添加了个 Sleep 而已…

评分

参与人数 1金钱 +40 收起 理由
w60711 + 40 大大辛勞了 新年快樂~~

查看全部评分

发表于 2024-2-17 00:45:03 | 显示全部楼层
afan 发表于 2024-2-16 09:10
终于解决!之前怀疑的杀软问题最终被排除,总结一下问题原因:
1,我这正常以及你那沙盒也正常,但实际测 ...

我之前使用 WinSetOnTop 時ˊ有時候會遇到置頂失效或是怪問題

後來直接用這方式就正常了
雖然ˊˊ我不知道背後原理是不是完全一樣、或有影響就是了 (汗
        ;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        ;;|                          使用API將窗體保持最前                          |
        ;;| 作者:健啖客WTohrV                                                      |
        ;;| 網址:http://www.manew.com/blog-166183-23254.html                      |
        ;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        Func _SetWindowPos($hWnd,$x,$y,$cX,$cY,$hWndInsertAfter = -1,$wFlags = 1)
        ;使用API將窗體保持最前 x,y -->>座標 $hWndInsertAfter >> Z位置、深度(3D)
                DllCall("user32.dll","long","SetWindowPos","long",$hWnd,"long",$hWndInsertAfter,"long",$x,"long",$y,"long",$cX,"long",$cY,"long",$wFlags)
        EndFunc;==>_SetWindowPos
_SetWindowPos($Form1,-1,-1,-1,-1,$HWND_TOPMOST,$SWP_NOMOVE+$SWP_NOSIZE);;置頂
_SetWindowPos($Form1,-1,-1,-1,-1,$HWND_NOTOPMOST,$SWP_NOMOVE+$SWP_NOSIZE);;取消置頂

评分

参与人数 1金钱 +50 收起 理由
afan + 50

查看全部评分

 楼主| 发表于 2024-2-17 10:51:52 | 显示全部楼层
本帖最后由 afan 于 2024-2-17 19:22 编辑
w60711 发表于 2024-2-17 00:45
我之前使用 WinSetOnTop 時ˊ有時候會遇到置頂失效或是怪問題

後來直接用這方式就正常了

兄弟新年好~!你们那边过年肯定很热闹吧~ 是不是被我这贴耽误了不少放飞自我的美好时光

这次问题的关键其实是找到导致问题的原因,因为没有重现问题的测试环境,还劳你配合测试这么多天,最终发现就是两处简单问题导致的。找到原因后解决起来就很容易了。我一般会从最简单的方式下手,比如知道是 WinSetOnTop 引起的,结合反馈的描述,可能存在冲突的时机,先简单的 Sleep(10) 测试一下,结果就行了。如果不行,那就要找其它的方式(包括你提供的函数 _SetWindowPos,即au3自带的udf函数 _WinAPI_SetWindowPos,该函数我也用得不少,但用它来置顶窗口却不多,因为也曾测试过,没发现它有强于专职的内置函数 WinSetOnTop,你这一提,以后会在此方面留意一下了)或者仍使用 WinSetOnTop ,但修改设置的时间点等等。奇怪的是 WinSetOnTop 我用得非常多,但从未遇到过问题,如遇到过肯定早就发现及解决了。


Bug解决就又可以继续开发了 ^ ^
240217 更新 3.2 版
        [新增]在划词后显示的进度条上增加三个可点击的色块 C T R,点击可快速执行相应的动作
           划词后进度条走完(约1-2秒)会自动执行翻译,但如果想划词后无需等待立即翻译就需要此功能了
           划词后的进度条新增了3个颜色鲜明的色块,分别代表三个功能: 红C(仅复制)|绿T(翻译)|蓝R(翻译并替换)
           划词后鼠标光标首先就落在中间的“绿T(翻译)”上,即划词后直接点击即可立即翻译,无需等待进度条走完的自动执行
           若在进度区移动了鼠标,则进度停止,保留界面方便点击,此前的移动鼠标即关闭也修改为离开整个进度界面才关闭
           有时候仅需复制,那就直接点击“红C(仅复制)”即可
           由于添加了点击功能,进度条界面也因此也做了高DPI适配,放大的界面清晰也更适合点击

此功能在开发设计之初就有此想法的,觉得写起来有点麻烦,加之代码比较长,光主脚本就有近6000行代码了,改起来麻烦就一直懒得搞,今天总算加上了,一划一点简直不要太方便~


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2024-2-18 00:24:43 | 显示全部楼层
本帖最后由 w60711 于 2024-2-18 00:30 编辑
afan 发表于 2024-2-17 10:51
兄弟新年好~!你们那边过年肯定很热闹吧~ 是不是被我这贴耽误了不少放飞自我的美好时光

这次问题的关键 ...


不會啦
找出Bug和可能的問題點也是小小娛樂之一啦
而且有時候也可以學習到新知識或是獲得靈感 哈哈

這個色塊在翻譯文檔時簡直太方便了!!



小玩了一下 目前為止都是ˋ正常的~



不過我之前就有個想說的了
快捷鍵被綁定後,有時候打標點符號之類的就會誤觸
像是 ctrl+, 之類的,我知道可以改但是改成啥都有可能會重複 ><"

小小意見,或許之後版本可以增加:
排除ˊ的窗口清單(不要觸發快捷鍵):像是在LOL中...
未排除的先監測輸入法是否輸入中(或暫停快捷開關)...之類的:像是人工校正時打字會被攔截



不對耶...後來想想
如果沒有再次公開版的話好像也不用特別做這種功能


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×

评分

参与人数 1威望 +1 金钱 +50 贡献 +1 收起 理由
afan + 1 + 50 + 1 很好的建议,应该可以实现~

查看全部评分

 楼主| 发表于 2024-2-18 12:20:44 | 显示全部楼层
本帖最后由 afan 于 2024-2-18 12:50 编辑
w60711 发表于 2024-2-18 00:24
不會啦
找出Bug和可能的問題點也是小小娛樂之一啦
而且有時候也可以學習到新知識或是獲得靈感 哈哈

很好的建议~!
刚才想了下,对于正在输入法打字时的确会被翻译热键干扰,虽双方都可设置其它的热键避开,但相对麻烦,有时候的习惯可能也不容易改变。那么在发送热键前做个检测输入法应该是最合理的了~
用 _WinAPI_GetKeyboardLayout 可以获取目标窗口的键盘状态,但在Win11的记事本中测试似乎无效,在Win7中可正常检测到切换状态。然而又有一个问题,就算检测到了非英文状态,但当前并未处于打字状态,那么发送热键也应该是不拦截才对。基于这两点,放弃了这个检测方式。可能检测输入法输入时弹出的显示浮窗才是正确的,但这需要自行获取浮窗的窗口类,因为大家所用的输入法肯定不会一致……  包括另一条建议,需排除的目标窗口,同样需要自行获取窗口类。

对此,我想可在 [opt] 字段中添加以下关键词以启用这些功能:

; 热键翻译时排除的窗口列表
ExcludeList_Win =

; 热键翻译时排除的输入法浮窗列表

ExcludeList_IME =


以上添加值时如有多个用“|”隔开(因此捕获的类名表达式要避开该符号),符号两侧可添加空格以便于查看或修改,如 [CLASS:SoPY_Comp]  |  [CLASS:xxx] | xxxx

捕获窗口时,特别是捕获全屏窗口或输入法浮窗这类不能用拖动靶标方式获取的 ,可用我写的那个 Au3.WProbe 并用热键方式捕获。
目前想到的就这些,之后就开码了……


发表于 2024-2-18 13:49:02 | 显示全部楼层
afan 发表于 2024-2-18 12:20
很好的建议~!
刚才想了下,对于正在输入法打字时的确会被翻译热键干扰,虽双方都可设置其它的热键避开, ...

a大新年好!有新版的话发一个给我,谢谢!
发表于 2024-2-18 14:19:49 | 显示全部楼层
afan 发表于 2024-2-18 12:20
很好的建议~!
刚才想了下,对于正在输入法打字时的确会被翻译热键干扰,虽双方都可设置其它的热键避开, ...

我原本想到的是

排ˊ除窗口 是INI紀錄程序名XD
就一般使用者來說應該比用類名直觀~
例如:LolClient.exe、notepad.exe

輸入法部分,不知道這是否能夠直接偵測?
https://learn.microsoft.com/zh-t ... bout-keyboard-input


WEB JS思路
https://blog.csdn.net/maryword/article/details/88033074

 楼主| 发表于 2024-2-18 14:29:01 | 显示全部楼层
chishingchan 发表于 2024-2-18 13:49
a大新年好!有新版的话发一个给我,谢谢!

新年好~ 3.2 已发送~
 楼主| 发表于 2024-2-18 14:36:56 | 显示全部楼层
w60711 发表于 2024-2-18 14:19
我原本想到的是

排ˊ除窗口 是INI紀錄程序名XD

用程序名也行,怎么方便怎么来吧,以你的意见为准~
至于输入法,WEB的应该没多大意义,上面的繁体内容看不习惯,粗看了下似乎也没有侦测输入法的内容
发表于 2024-2-18 15:40:16 | 显示全部楼层
afan 发表于 2024-2-18 14:36
用程序名也行,怎么方便怎么来吧,以你的意见为准~
至于输入法,WEB的应该没多大意义,上面的繁体内容看 ...

抱歉抱歉 平时都用浏览器简繁插件忽略了...

程序名或类名都可以啦
应该是要以开发者的意见为准才是 ^^"
我只是习惯ˋ默认用户啥都不懂的状况下做开发~

输入法部分当我没说
是我误解了那篇的意思了  ><"
 楼主| 发表于 2024-2-18 15:58:35 | 显示全部楼层
本帖最后由 afan 于 2024-2-18 15:59 编辑
w60711 发表于 2024-2-18 15:40
抱歉抱歉 平时都用浏览器简繁插件忽略了...

程序名或类名都可以啦

已经写得差不多啦~ 程序名比类名少了一个捕获操作,对于用户来说更简单,肯定采纳这种方式~!
至于输入法确实似乎没有找到很理想的方法,不过就算需要该功能也仅需捕获一次,比如搜狗拼音:SoPY_Comp 就完事了~  我通常直接划词 ^ ^
 楼主| 发表于 2024-2-18 16:47:57 | 显示全部楼层
w60711 发表于 2024-2-18 15:40
抱歉抱歉 平时都用浏览器简繁插件忽略了...

程序名或类名都可以啦

ok了~
240218 更新 3.3 版
        [新增]使用热键翻译时排除指定的程序窗口
           在配置文件[OTP]下添加一行 ExcludeList_Exe = 排除的程序名.exe(如需排除多个用|分隔)
        [新增]使用热键翻译时如遇正在使用指定的输入法则忽略本次热键,以免干扰输入
           在配置文件[OTP]下添加一行 ExcludeList_IME = 排除的输入法浮窗类名(如搜狗|手心: SoPY_Comp | PalmInputUICand)
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-28 16:37 , Processed in 0.087716 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表