掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 1475|回复: 12

[经验交流] Mdict 软件是否能支持 鼠标取词 划词?

[复制链接]

该用户从未签到

发表于 2016-2-14 10:01:18 | 显示全部楼层 |阅读模式
如题,我找了选项,好像是没有,我感觉需要在看文档的时候,能够屏幕鼠标划词,这样方便点吧。
, P9 j/ k- |" v# @- k
% S* K' H2 v& ^1 t1 G; L- fgolddict软件好像也不可以直接显示  翻译框,需要按键盘才行。可有一劳永逸的解决办法。

该用户从未签到

发表于 2016-2-15 23:08:17 | 显示全部楼层
本帖最后由 gnoweb 于 2016-2-17 11:12 编辑 3 b, v1 w4 j+ ^. D# l/ g

. C0 E& V* s) h4 `$ U目前 Windows 下可以通过 Autoit V3 脚本来实现剪贴板取词(鼠标划词选择,复制到剪贴板),脚本后台监测,调用 MDict PC。
8 @) a0 g- X- `9 P5 Q" Y同样这种方法也适用于 GoldenDict PC 无法取词的程序,比如 Chrome,只需要改动一下程序的名称及路径信息,当然没有 GoldenDict PC 自带的即点即译方便,仅作权宜之计。
4 G. ~  F3 t7 G8 C) H% K
# ^  B  U( z  ^" G7 W  \0 h
  1. #include <StringConstants.au3>; H4 R$ V, M5 m- B# j# a# ?
  2. #include <MsgBoxConstants.au3>
    ) S( m0 Q, K$ V' s3 S0 s
  3. / w/ c, G! \1 k- n' |' N% h2 x
  4. Func get_word_from_clip()) X6 O6 U" g; T9 j; |& M
  5.    Local $clip_string = ClipGet()
    , z  a* B9 [$ ^
  6.    ;MsgBox("", "剪贴板文本", $clip_string)7 ~+ F; M0 w' n6 v' M+ T
  7.    Return $clip_string
    " P3 ?. K" d  G& X# c
  8. EndFunc4 S- b. T1 \: _" X1 f" @; ^
  9. : @' Z3 \& `4 u' @1 z; `: B/ S; W
  10. Func look_up_definition($word)
    4 w% w' x2 k  J9 |5 b7 x+ T
  11.    If Not ProcessExists("MDict.exe") Then
    0 k( [" a! e& y( F7 f; F4 c8 Z
  12.           Run("E:\Software\MDictPC\MDict.exe")                ; 此处改成你自己的 MDict 实际安装目录
      F4 T2 r4 g. y: n
  13.           Sleep(100)
    # L: ^8 a6 K& ?* T
  14.    EndIf0 v( f7 Y! Q3 q

  15. 1 j9 f1 ~; g9 ^; a; P6 G8 K
  16.    WinActivate("MDict"); B8 d# A! k9 z, ]
  17.    Send("{ENTER}")" X! K- U, \" [" G
  18.    ControlSend("MDict", "", 1000, $word)! O- _! x5 N2 K3 i: h; z/ e
  19.    Send("{ENTER}")
    # F1 q, ]( c! k
  20. EndFunc
    ; ]/ L% ]0 X* p% }! ~% T9 L
  21. " K4 G; K2 b8 m+ R. l
  22. Func pretreatment($str)# Z# M, s9 H; s. G2 C
  23.    ; 对字符串进行预处理:去除左右空白字符、转小写、判断是否全部为字符且长度小于指定值5 i, F  d( S0 W4 X2 U5 b" x
  24.    ; 默认不对带空格的词组取词,不对汉字取词2 C4 |3 ~+ I+ F, m$ ?3 p
  25.    ; 符合上述条件返回新的字符串,否则返回 0/ r* l% l- |1 s, l
  26.    $str = StringStripWS($str, $STR_STRIPLEADING + $STR_STRIPTRAILING)) X0 \6 Q' }( ^; v8 c
  27.    $str = StringLower($str)
    0 D% M  C" o# U' J6 v8 j/ v
  28.    If StringLen($str) < 20 And StringIsASCII($str) And StringIsAlpha($str) And Not StringInStr($str, @CR) Then. G) A( I( q: x, \8 ~9 {% i; a
  29.           ;MsgBox($MB_SYSTEMMODAL, "20", $str)
    4 ~: x! g3 |# o4 }
  30.           Return $str1 F1 c3 [' Z3 W9 c/ a9 @# ]
  31.    ElseIf StringLen($str) < 4 And StringIsAlpha($str) And Not StringInStr($str, @CR) Then
    3 z- Y  I9 f" W5 v0 x% V
  32.           ;MsgBox($MB_SYSTEMMODAL, "4", $str). X6 m: ^, Z) l/ h) [( o. V) D1 ^
  33.           Return $str% e" {9 u: R' b
  34.    Else& b3 {3 P* V; E" c7 _6 T' l
  35.           Return Null
    / `" Y; D) Q: ^
  36.    EndIf9 a+ h) q/ `* l4 G! z
  37. EndFunc
    9 s* Q$ y* ^$ C% u* ^. Y2 G
  38. 7 S) e' _& {9 u7 E( p3 o# I

  39. & P7 ], w  r" ?
  40. Func my_exit()
    . r4 G  a) P; Z. O9 }% F
  41.    Exit
    2 f; C$ {- C: w- t
  42. EndFunc
      I9 ^; b3 K1 N% Y/ x  j

  43. ! r- J& U$ ^; r  J" c0 S6 @
  44. HotKeySet("^!l", "my_exit"); ^ Ctrl    ! Alt        l6 s2 ]6 U1 x7 b$ H! s# ~% Z
  45. 8 Q& ~) ]% H5 q; m# }
  46. Local $preview = pretreatment(get_word_from_clip())
    / C& j  F; u# D
  47. Local $current6 u' E) ~9 P- ?' }- W

  48. % ]4 h5 X, O# v, T, r' S8 U: i4 X
  49. While True( `. M  e" q- ^1 R! \
  50.    $current = pretreatment(get_word_from_clip())
    ! e0 O- ~& H* J7 R: w; U1 j% X
  51.    if $current == $preview Then
    ; h( M4 y! B) |3 z0 n7 ]0 w1 t
  52.           Sleep(1000)" R9 O$ M; @( ^% S# k
  53.           ContinueLoop) V  U1 P& c0 A7 K* x( r& z
  54.    ElseIf $current <> Null Then; g. O/ g4 b7 H: r& L9 _3 V
  55.           $preview = $current
    ; o9 F! s& Y" S; i- y  E/ y4 T
  56.           look_up_definition($current)
    + A5 b1 Y. ]1 d3 r, S; W0 C. @
  57.           Sleep(1000)
    ! X  C+ X( a) L# r
  58.    ElseIf $current == Null Then        ; 防止循环空耗 CPU, ]; v+ _5 T9 {5 V
  59.           Sleep(1000)
    ) d8 g! M! @2 _  E" U
  60.    EndIf9 s/ v! [2 Y  r5 b8 a; @# v
  61. WEnd
复制代码
. y. T4 A  C" D1 [1 Z" Z

- q7 |; l" Z: q7 A7 P

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x
  • TA的每日心情

    2024-6-6 22:56
  • 签到天数: 87 天

    [LV.6]常住居民II

    发表于 2016-2-16 23:34:17 | 显示全部楼层
    是可以的!而且本坛就有解决方案及工具下载!你用论坛搜索即可得。
  • TA的每日心情
    开心
    2018-8-8 03:13
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2016-2-17 03:15:14 | 显示全部楼层
    gnoweb 发表于 2016-2-15 23:08% c" I: O. B! k. g1 |* B8 P( Z
    目前 Windows 下可以通过 Autoit V3 脚本来实现剪贴板取词(鼠标划词选择,复制到剪贴板),脚本后台监测, ...

    ' w& L- a( P* x& U" zgnoweb兄:: `  Y$ F" W& X2 i8 s2 m6 H
    能否提供此代碼檔案
    $ z# w, X7 B, M& n5 Y1 G复制代码時太多亂碼- o  {/ `. j7 e2 T9 E! c
    $ u' W& p+ I! A
    謝謝2 l3 k1 A6 i" s, `. ^0 h6 z

    点评

    见 2 楼附件  发表于 2016-2-17 11:12
  • TA的每日心情
    开心
    2018-8-8 03:13
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2016-2-17 12:29:36 | 显示全部楼层
    gnoweb 发表于 2016-2-15 23:08
    7 P. G$ n& @  B. h! d8 ]; U: P目前 Windows 下可以通过 Autoit V3 脚本来实现剪贴板取词(鼠标划词选择,复制到剪贴板),脚本后台监测, ...
    ) C, t8 ~9 w9 O0 Y( H9 J
    Thanks a lot
  • TA的每日心情
    开心
    2018-8-8 03:13
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2016-2-20 07:08:18 | 显示全部楼层
    本帖最后由 喬治兄 于 2016-2-20 07:17 编辑
    ; ^4 U" s% c* i8 q
    gnoweb 发表于 2016-2-15 23:08
    / j9 c$ _! S: z. B' E% n+ ~目前 Windows 下可以通过 Autoit V3 脚本来实现剪贴板取词(鼠标划词选择,复制到剪贴板),脚本后台监测, ...

    9 V: T* @+ l% A; A9 i" Q, w7 _6 b
    gnoweb兄:- J1 v6 P6 H) R! F3 X
    你好,小弟試了你的MDict_Enhance.au3 效果蠻好的0 g+ g+ S4 P; s* m' [; \8 t; u
    但是否能再修改一下,只要拷貝鼠標所選的內容直接傳送到 mdict 就好了
    ' ?$ z8 p2 V( D1 Q, {9 S$ Z因 mdict  本身已有 Stripkey 處理,且目前無法查片語
    - A! G- b& @6 q# u但中文也可拷貝7 |9 y& a: ~9 \" J
    直接讓mdict 判斷是否有此字條
    2 q) c) r, r8 F$ v8 V/ ~0 O% P. X8 L0 \- y4 P0 G7 n5 ]" g
    另外改成GoldenDict 是無法執行的6 U- k/ |: H" c  S
    是否是需調用其GoldenDict 內的dll來達成0 z' h9 a5 m: |- W
    能否麻煩gnoweb兄再寫一個GoldenDict的取詞; }+ |  N2 [( t: Z; q
      ~) w" V6 Y; i8 n' Q
    辛苦你了$ s0 ~' e* Y! m$ y4 x
    7 y8 j- h' G% Z% N8 W4 X
    謝謝
    1 Y2 L) d3 Q7 K6 Q

    该用户从未签到

    发表于 2016-2-20 11:04:48 | 显示全部楼层
    喬治兄 发表于 2016-2-20 07:088 ~. b8 f4 y% Z' W
    gnoweb兄:
    8 e" m$ ~: n6 [% s0 }$ Z你好,小弟試了你的MDict_Enhance.au3 效果蠻好的" |& `/ a+ w  J) _; h' B% k
    但是否能再修改一下,只要拷貝鼠標所選的 ...

    2 X5 N" O& }9 k2 }9 i5 a8 h只需要简单改动 look_up_definition 函数即可使用 GD:
    8 O1 i& Q' o) i' k' K5 Z; y' r3 \/ ~- ?5 P1 f& {
    1. Func look_up_definition($word)7 z" V# P4 R, W7 d  n( W' O0 s
    2.         Run("E:\Software\GoldenDict\GoldenDict.exe " & $word)
      6 {) m) L/ Z; y- f
    3.         ; !!!这里记得改成你自己的安装路径!!!
      2 a3 g# y4 |. p4 `% v1 r. z' O- C
    4. EndFunc
    复制代码

    , n2 g. S! g+ f; D$ D$ i5 Z5 H
    % _  p( ]7 p& v2 q+ k. J/ Z1 V2 G! j$ `# Y
    针对你提出的需要,只需改动 pretreatment 函数即可:9 e# @1 B/ s4 L/ \
    , W9 r3 ?$ E% e; J
    1. Func pretreatment($str)
      & A+ V- l4 e. _; L9 I7 W
    2.    $str = StringStripWS($str, $STR_STRIPLEADING + $STR_STRIPTRAILING)4 j) F1 h5 p% `% x' c9 S
    3.    If StringLen($str) < 50 And Not StringInStr($str, ' ') And Not StringInStr($str, @CR) Then# @7 g7 Y0 k+ b  Z0 B. @
    4.           Return $str. m% i8 i9 N, ?5 l% Y8 A+ F
    5.    ElseIf StringLen($str) < 100 And StringInStr($str, ' ') And Not StringInStr($str, @CR) Then
      ( D( {% e. [1 A4 n- q/ l
    6.       Return '"' & $str & '"'' l3 W7 q3 F7 d4 r* y
    7.    Else  W8 N" V. B3 t  Z
    8.           Return Null/ h0 |7 @/ [, T4 T! p1 y- R
    9.    EndIf
      9 A. E' O1 C% ], A: M
    10. EndFunc
    复制代码
    0 U( \5 W! v) q, n
      p  Y. {8 V) U/ V6 t
    代码可以参考这里:
    ! {( T0 e- g) v4 A& }
    2 q& u. ]- _7 R" H( M# k# ?9 b9 [& j7 \# q

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?免费注册

    x
  • TA的每日心情
    开心
    2018-8-8 03:13
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2016-2-20 13:45:50 | 显示全部楼层
    gnoweb 发表于 2016-2-20 11:045 D# F' {  L; d! ?  P3 F2 m# T. `
    只需要简单改动 look_up_definition 函数即可使用 GD:

    3 h3 W! H: ]2 W- O: ?( m, e" Vgnoweb 兄:) F3 n1 t! Y# A

    " F3 u7 d7 n( A5 w9 e2 V) S謝謝你,用起來蠻順暢的也都沒什問題5 D2 C$ ?' v/ l% A
    4 d; `' q6 _% d! ~
    Thanks again

    该用户从未签到

     楼主| 发表于 2016-2-23 20:18:04 | 显示全部楼层
    gnoweb 发表于 2016-2-15 23:08
      f/ \' ]* V) O8 K+ [1 N/ {" p目前 Windows 下可以通过 Autoit V3 脚本来实现剪贴板取词(鼠标划词选择,复制到剪贴板),脚本后台监测, ...

    ; X6 Z" M8 m3 e! @: z谢谢 。。。如果这个方便么就好了,我先试一下,差点想用钩子的方式了,

    该用户从未签到

    发表于 2016-2-23 23:02:43 | 显示全部楼层
    要是mac 的goldendict也可以实现就好了

    该用户从未签到

     楼主| 发表于 2016-2-24 16:49:13 | 显示全部楼层
    gnoweb 发表于 2016-2-15 23:08
    6 O1 f" p+ R* b4 D7 Z目前 Windows 下可以通过 Autoit V3 脚本来实现剪贴板取词(鼠标划词选择,复制到剪贴板),脚本后台监测, ...
    , S! j" U! x+ x: j5 C
    你好,我安装了 Autoit V3  ,编译你的 脚本,好像需要 按ctrl  c才可以读取到单词,鼠标划词是哪个函数实现的功能啊。。而且,发送到mdict不成功,  
    ' y( B. I3 }; _; w- H) D ;MsgBox("","ffsa",$word)这里显示的$word已经是剪切板上的单词了,但是  mdict也没有翻译。mdict已经运行起来。mdict已经设置 监视剪切板。
    + X; A; J, x8 l& i% U' u8 W   ControlSend("MDict", "", 10, $word)

    该用户从未签到

    发表于 2016-2-24 18:07:34 | 显示全部楼层
    fanrongqi 发表于 2016-2-24 16:49
    ' A$ R( y1 E$ p$ g, H你好,我安装了 Autoit V3  ,编译你的 脚本,好像需要 按ctrl  c才可以读取到单词,鼠标划词是哪个函数 ...

    7 R; k. L- h& K3 {$ @
    4 d4 E" Z% F1 L/ q( |这个脚本是用鼠标选择文本,必须 Ctrl + C 或者鼠标右键复制到剪贴板后,才可以被传送到 Mdict 的。, Z6 d/ ]5 K4 n4 O
    * p8 C5 ^7 D! p- _
    如果用鼠标划取单词就被检测到,那你要自己去读 AutoIt v3 的文档 >> Function Reference >> Mouse Management >>% L7 O7 A$ |- M( N# d+ _( y

    ( B* C( a% C! N, A: D6 B  r8 W
    * I2 r% h+ F& m2 m) D" C( P
    + U1 {$ Z- J1 A3 s. J# R7 U看看有没有可能实现,目前我暂时想不出来怎么用 AutoIt v3 提供的函数实现。8 ~" o) e, l  x
    ; h7 V/ s0 w8 E: e5 J1 s
    ————————————————————————————————————————————————
    * z& B  P" R3 v8 l$ W& G1 q) }: ^+ }- d, \% L( `! L
    另外,你把 ControlSend 函数里面的 controlID 从 1000 改成了 10,所以无法翻译:
    , {' \( [9 |4 p9 L7 W" O& c- I% y6 X% A; I
    1. ControlSend("MDict", "", 10, $word)
    复制代码

    , X6 ], \* g8 |+ d; p
    7 c" w- O# g5 @7 a8 a( ]$ k那个 1000 的意思是控件 ID 的代号,表示取词栏,就是要把单词传送给这个控件(黄色处):
    + z! i8 F; L9 |& A" j; Q/ m% I* b$ }! r. P/ o8 o: N3 B
    ! h# u  [, s+ Q

    3 p6 g7 j+ t6 @3 \% g( i+ n; U改成 10 当然不行了,那个不是延时毫秒的意思,你从 1000 改为 10,并不会给整个过程提速。4 {8 ]8 y, s' L4 _+ `' Q6 c% N" }! j7 L

    2 Y& h9 V# |& C3 x( ~+ m
    : a* p3 Y& X1 z3 G. W; G1 Z

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?免费注册

    x
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

    小黑屋|手机版|Archiver|PDAWIKI |网站地图

    GMT+8, 2025-7-10 04:53 , Processed in 0.024668 second(s), 27 queries .

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

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