afan
发表于 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~
cursorkey
发表于 2024-2-15 23:29:09
大神,能否分享一下划词的原理?感谢感谢
afan
发表于 2024-2-16 08:55:20
cursorkey 发表于 2024-2-15 23:29
大神,能否分享一下划词的原理?感谢感谢
我的划词的原理很简单:检测鼠标按下-移动-弹起,及过程中的鼠标光标状态。
afan
发表于 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 而已…
w60711
发表于 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);;取消置頂
afan
发表于 2024-2-17 10:51:52
本帖最后由 afan 于 2024-2-17 19:22 编辑
w60711 发表于 2024-2-17 00:45
我之前使用 WinSetOnTop 時ˊ有時候會遇到置頂失效或是怪問題
後來直接用這方式就正常了
兄弟新年好~!你们那边过年肯定很热闹吧~ 是不是被我这贴耽误了不少放飞自我的美好时光 {:1_617:}
这次问题的关键其实是找到导致问题的原因,因为没有重现问题的测试环境,还劳你配合测试这么多天,最终发现就是两处简单问题导致的。找到原因后解决起来就很容易了。我一般会从最简单的方式下手,比如知道是 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行代码了,改起来麻烦就一直懒得搞,今天总算加上了,一划一点简直不要太方便~ {:3_96:}
w60711
发表于 2024-2-18 00:24:43
本帖最后由 w60711 于 2024-2-18 00:30 编辑
afan 发表于 2024-2-17 10:51
兄弟新年好~!你们那边过年肯定很热闹吧~ 是不是被我这贴耽误了不少放飞自我的美好时光
这次问题的关键 ...
不會啦
找出Bug和可能的問題點也是小小娛樂之一啦
而且有時候也可以學習到新知識或是獲得靈感 哈哈
這個色塊在翻譯文檔時簡直太方便了!!
小玩了一下 目前為止都是ˋ正常的~
不過我之前就有個想說的了
快捷鍵被綁定後,有時候打標點符號之類的就會誤觸
像是 ctrl+, 之類的,我知道可以改但是改成啥都有可能會重複 ><"
小小意見,或許之後版本可以增加:
排除ˊ的窗口清單(不要觸發快捷鍵):像是在LOL中...
未排除的先監測輸入法是否輸入中(或暫停快捷開關)...之類的:像是人工校正時打字會被攔截
:face (15):
不對耶...後來想想
如果沒有再次公開版的話好像也不用特別做這種功能
:face (1):
afan
发表于 2024-2-18 12:20:44
本帖最后由 afan 于 2024-2-18 12:50 编辑
w60711 发表于 2024-2-18 00:24
不會啦
找出Bug和可能的問題點也是小小娛樂之一啦
而且有時候也可以學習到新知識或是獲得靈感 哈哈
很好的建议~!
刚才想了下,对于正在输入法打字时的确会被翻译热键干扰,虽双方都可设置其它的热键避开,但相对麻烦,有时候的习惯可能也不容易改变。那么在发送热键前做个检测输入法应该是最合理的了~
用 _WinAPI_GetKeyboardLayout 可以获取目标窗口的键盘状态,但在Win11的记事本中测试似乎无效,在Win7中可正常检测到切换状态。然而又有一个问题,就算检测到了非英文状态,但当前并未处于打字状态,那么发送热键也应该是不拦截才对。基于这两点,放弃了这个检测方式。可能检测输入法输入时弹出的显示浮窗才是正确的,但这需要自行获取浮窗的窗口类,因为大家所用的输入法肯定不会一致……包括另一条建议,需排除的目标窗口,同样需要自行获取窗口类。
对此,我想可在 字段中添加以下关键词以启用这些功能:
; 热键翻译时排除的窗口列表
ExcludeList_Win =
; 热键翻译时排除的输入法浮窗列表
ExcludeList_IME =
以上添加值时如有多个用“|”隔开(因此捕获的类名表达式要避开该符号),符号两侧可添加空格以便于查看或修改,如 | | xxxx
捕获窗口时,特别是捕获全屏窗口或输入法浮窗这类不能用拖动靶标方式获取的 ,可用我写的那个 Au3.WProbe 并用热键方式捕获。
目前想到的就这些,之后就开码了……
chishingchan
发表于 2024-2-18 13:49:02
afan 发表于 2024-2-18 12:20
很好的建议~!
刚才想了下,对于正在输入法打字时的确会被翻译热键干扰,虽双方都可设置其它的热键避开, ...
a大新年好!有新版的话发一个给我,谢谢!
w60711
发表于 2024-2-18 14:19:49
afan 发表于 2024-2-18 12:20
很好的建议~!
刚才想了下,对于正在输入法打字时的确会被翻译热键干扰,虽双方都可设置其它的热键避开, ...
我原本想到的是
排ˊ除窗口 是INI紀錄程序名XD
就一般使用者來說應該比用類名直觀~
例如:LolClient.exe、notepad.exe
輸入法部分,不知道這是否能夠直接偵測?
https://learn.microsoft.com/zh-tw/windows/win32/inputdev/about-keyboard-input
WEB JS思路
https://blog.csdn.net/maryword/article/details/88033074
afan
发表于 2024-2-18 14:29:01
chishingchan 发表于 2024-2-18 13:49
a大新年好!有新版的话发一个给我,谢谢!
新年好~ 3.2 已发送~
afan
发表于 2024-2-18 14:36:56
w60711 发表于 2024-2-18 14:19
我原本想到的是
排ˊ除窗口 是INI紀錄程序名XD
用程序名也行,怎么方便怎么来吧,以你的意见为准~
至于输入法,WEB的应该没多大意义,上面的繁体内容看不习惯,粗看了下似乎也没有侦测输入法的内容
w60711
发表于 2024-2-18 15:40:16
afan 发表于 2024-2-18 14:36
用程序名也行,怎么方便怎么来吧,以你的意见为准~
至于输入法,WEB的应该没多大意义,上面的繁体内容看 ...
抱歉抱歉 平时都用浏览器简繁插件忽略了...
程序名或类名都可以啦
应该是要以开发者的意见为准才是 ^^"
我只是习惯ˋ默认用户啥都不懂的状况下做开发~
输入法部分当我没说
是我误解了那篇的意思了><"
afan
发表于 2024-2-18 15:58:35
本帖最后由 afan 于 2024-2-18 15:59 编辑
w60711 发表于 2024-2-18 15:40
抱歉抱歉 平时都用浏览器简繁插件忽略了...
程序名或类名都可以啦
已经写得差不多啦~ 程序名比类名少了一个捕获操作,对于用户来说更简单,肯定采纳这种方式~!
至于输入法确实似乎没有找到很理想的方法,不过就算需要该功能也仅需捕获一次,比如搜狗拼音:SoPY_Comp 就完事了~我通常直接划词 ^ ^
afan
发表于 2024-2-18 16:47:57
w60711 发表于 2024-2-18 15:40
抱歉抱歉 平时都用浏览器简繁插件忽略了...
程序名或类名都可以啦
ok了~ {:3_106:}
240218 更新 3.3 版
[新增]使用热键翻译时排除指定的程序窗口
在配置文件下添加一行 ExcludeList_Exe = 排除的程序名.exe(如需排除多个用|分隔)
[新增]使用热键翻译时如遇正在使用指定的输入法则忽略本次热键,以免干扰输入
在配置文件下添加一行 ExcludeList_IME = 排除的输入法浮窗类名(如搜狗|手心: SoPY_Comp | PalmInputUICand)