掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 1099|回复: 12

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

[复制链接]

该用户从未签到

发表于 2016-2-14 10:01:18 | 显示全部楼层 |阅读模式
如题,我找了选项,好像是没有,我感觉需要在看文档的时候,能够屏幕鼠标划词,这样方便点吧。. l. n- S% p! ]# Z# u) w
9 ^4 m( ^( p+ T- Q
golddict软件好像也不可以直接显示  翻译框,需要按键盘才行。可有一劳永逸的解决办法。

该用户从未签到

发表于 2016-2-15 23:08:17 | 显示全部楼层
本帖最后由 gnoweb 于 2016-2-17 11:12 编辑 ; X, e( |; Q- i  ?$ o
$ }; B: y' Z, x: Y* P- y+ b$ x' E
目前 Windows 下可以通过 Autoit V3 脚本来实现剪贴板取词(鼠标划词选择,复制到剪贴板),脚本后台监测,调用 MDict PC。3 l  F% G3 r3 T: L6 I! R# V
同样这种方法也适用于 GoldenDict PC 无法取词的程序,比如 Chrome,只需要改动一下程序的名称及路径信息,当然没有 GoldenDict PC 自带的即点即译方便,仅作权宜之计。1 |5 V! s. {' ^; g1 ~+ t! J
& S; D* b7 o6 s9 A! l$ F
  1. #include <StringConstants.au3>
    0 b, B4 ~4 {" ^: G
  2. #include <MsgBoxConstants.au3>
    8 }/ @( s$ E  Q, d

  3. & ~; t: m6 Q2 z* @- r4 Y' X9 v
  4. Func get_word_from_clip()
    $ u) B$ t8 A+ h5 X4 E0 Z
  5.    Local $clip_string = ClipGet()
    2 |  F4 o( ~9 g! B% g
  6.    ;MsgBox("", "剪贴板文本", $clip_string)
    * g4 n3 V- X9 [: p8 @: w. }
  7.    Return $clip_string3 _/ [2 Y1 f4 ]0 d+ F) q6 F& E7 Z
  8. EndFunc
    # a* d; [# ^2 ]. X, d
  9. ( i& T* e" J: O- F" ?6 _% K
  10. Func look_up_definition($word)% X. U/ J) @! z8 Y" ?) r, }
  11.    If Not ProcessExists("MDict.exe") Then
    6 @7 d7 ?! \; ~5 ]
  12.           Run("E:\Software\MDictPC\MDict.exe")                ; 此处改成你自己的 MDict 实际安装目录
      l# N$ f! x. Q6 p$ q
  13.           Sleep(100)( m4 s  v& |' p9 ?1 |4 b
  14.    EndIf
    9 p& L2 s# T5 i% I, S9 V7 ^2 G8 O

  15. 7 g  e: Z1 m! g, T
  16.    WinActivate("MDict")" ]! |; |' K9 K0 g
  17.    Send("{ENTER}")9 |% o4 ~' ?  E" ?& }/ _" h
  18.    ControlSend("MDict", "", 1000, $word)8 K/ j8 k+ v8 {" [+ N3 r9 q
  19.    Send("{ENTER}")
    3 {% x, L, A. y9 Q* |
  20. EndFunc5 h0 \5 l  u1 L
  21. , r! B$ Q  \/ K1 b: Y& N
  22. Func pretreatment($str)
    * Y8 X1 C+ {  {! z7 {& w: v
  23.    ; 对字符串进行预处理:去除左右空白字符、转小写、判断是否全部为字符且长度小于指定值
    6 |* r4 z% r0 R% G/ w/ {8 \1 V7 m
  24.    ; 默认不对带空格的词组取词,不对汉字取词
    * M5 F% k2 U5 x; `) W
  25.    ; 符合上述条件返回新的字符串,否则返回 0. M3 L: T! o& b
  26.    $str = StringStripWS($str, $STR_STRIPLEADING + $STR_STRIPTRAILING)
    8 c* T( r# [! B& C# W0 k
  27.    $str = StringLower($str)4 x- ~8 b1 \  m6 P; O0 D8 R
  28.    If StringLen($str) < 20 And StringIsASCII($str) And StringIsAlpha($str) And Not StringInStr($str, @CR) Then8 i; w% m2 `0 b7 O" m! o
  29.           ;MsgBox($MB_SYSTEMMODAL, "20", $str)
    : I! c7 w& x! C# A. `4 L5 P
  30.           Return $str
    7 \5 F9 W6 z, X
  31.    ElseIf StringLen($str) < 4 And StringIsAlpha($str) And Not StringInStr($str, @CR) Then
    ' q+ K, V. ^3 [! {: j
  32.           ;MsgBox($MB_SYSTEMMODAL, "4", $str)  y: O8 p' p! z/ m  P) z! }1 Q
  33.           Return $str
    " Z( i) P4 A' p8 V) z2 E. U( l
  34.    Else  T$ D3 R6 a/ n' g% D$ v
  35.           Return Null
    4 H7 h$ X: k. q+ k5 Z, y
  36.    EndIf
    ( B; L8 F5 f9 Y& c8 d/ f# ~
  37. EndFunc3 ?  v1 b! k2 b" G5 x3 V" `0 I

  38. 2 I' v4 X/ n* v4 g/ ^- v

  39. , X2 u4 D; {1 q. S8 }  R2 ~1 @
  40. Func my_exit()2 l# Q4 a& [7 z
  41.    Exit
    ) R; P/ g" H# i' N
  42. EndFunc
    $ O3 E2 n/ `4 w2 x
  43.   q( ^  l! S7 E$ d6 q2 S
  44. HotKeySet("^!l", "my_exit"); ^ Ctrl    ! Alt        l
    - _- y- q; g' ?9 T! g

  45. 0 R' V$ D& D, S  q( z0 X
  46. Local $preview = pretreatment(get_word_from_clip())2 R) B- i4 J# z, ]7 t
  47. Local $current
    4 z, W6 |: v( l

  48. " ^( C: Z8 A( f
  49. While True
    / o- ^; D; {  u. F4 @
  50.    $current = pretreatment(get_word_from_clip())
    & t' _) K! v! s
  51.    if $current == $preview Then' f* ?+ I7 l8 o
  52.           Sleep(1000)+ ]5 U& U0 Q, J* C  \
  53.           ContinueLoop
    1 h3 m0 G+ n2 a) n
  54.    ElseIf $current <> Null Then
    " q$ `# f! m2 F, r! [0 b, h
  55.           $preview = $current
    4 @+ A4 s$ i/ f! C8 U# }
  56.           look_up_definition($current)
    9 g& e  h& H1 J$ T& e' K
  57.           Sleep(1000)
    ; d7 ^0 Q/ F: ]0 `8 T+ d! m
  58.    ElseIf $current == Null Then        ; 防止循环空耗 CPU
    $ h4 G9 z+ Z1 m
  59.           Sleep(1000)1 Y1 M( @! H0 [; g6 ?$ k' d4 ^6 |
  60.    EndIf
    7 t8 Q7 J+ n2 x& R9 J. S2 \: t2 _4 {
  61. WEnd
复制代码
- d# i8 u6 m1 D  O% D$ Y3 d
/ z6 m* }+ U: g, G% C

本帖子中包含更多资源

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

x
  • TA的每日心情
    开心
    2023-2-28 18:48
  • 签到天数: 84 天

    [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
    6 C* w8 c  ^7 n8 `目前 Windows 下可以通过 Autoit V3 脚本来实现剪贴板取词(鼠标划词选择,复制到剪贴板),脚本后台监测, ...

    % F1 E9 f$ f: V, Pgnoweb兄:
    4 d0 P0 `/ f# ?' e" w+ ^. l能否提供此代碼檔案
    4 q- _4 |) }+ Z3 m  Z) w+ V复制代码時太多亂碼% c: Q$ R' b; d7 A5 F

    5 k" C$ M+ `' j' H謝謝1 u7 }  o, h5 n) {* @- ?" y; y

    点评

    见 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& d/ H1 J* @6 ^0 v
    目前 Windows 下可以通过 Autoit V3 脚本来实现剪贴板取词(鼠标划词选择,复制到剪贴板),脚本后台监测, ...
    ' T2 }8 H7 d, z0 V
    Thanks a lot
  • TA的每日心情
    开心
    2018-8-8 03:13
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2016-2-20 07:08:18 | 显示全部楼层
    本帖最后由 喬治兄 于 2016-2-20 07:17 编辑
    1 u0 n6 j% T& p/ D/ F+ [: t
    gnoweb 发表于 2016-2-15 23:08
    2 G& Z) F9 m1 X! j# j/ A4 {0 M目前 Windows 下可以通过 Autoit V3 脚本来实现剪贴板取词(鼠标划词选择,复制到剪贴板),脚本后台监测, ...

    2 A+ Z9 I) L( e& N, U- f
    & D3 Y4 Q0 t9 F. agnoweb兄:
    9 [; n) ?/ j2 K你好,小弟試了你的MDict_Enhance.au3 效果蠻好的8 d. V4 q: O4 H  m% P# b) j
    但是否能再修改一下,只要拷貝鼠標所選的內容直接傳送到 mdict 就好了6 }# t+ q  i' k' Z* F
    因 mdict  本身已有 Stripkey 處理,且目前無法查片語% E' e5 H/ e% j5 f* s$ p  m  l
    但中文也可拷貝
    ! U; W/ l; L' F/ }) o5 d8 l直接讓mdict 判斷是否有此字條
    , E- v# r* M* x
    ' u" k9 |* f1 ^! g# ~另外改成GoldenDict 是無法執行的1 {4 D" o- F5 h5 I3 v
    是否是需調用其GoldenDict 內的dll來達成* V, k' I, O2 T3 e! S
    能否麻煩gnoweb兄再寫一個GoldenDict的取詞, T+ u" z. Z8 E) {5 m; ]3 }
    - l% j8 ?3 Z# v5 |% z, E
    辛苦你了
    1 ^9 d/ L4 ]( l9 Z5 `& h- { , F$ \6 C5 j5 [0 b
    謝謝
    ( x7 K! w, n& d7 f  T# K

    该用户从未签到

    发表于 2016-2-20 11:04:48 | 显示全部楼层
    喬治兄 发表于 2016-2-20 07:08; ~7 ^/ E: x5 x: l( J- f. Y
    gnoweb兄:! G$ m* N/ ~9 d9 ^2 }9 c, a. c0 d
    你好,小弟試了你的MDict_Enhance.au3 效果蠻好的/ p3 `5 Z* W: ]  ?+ n
    但是否能再修改一下,只要拷貝鼠標所選的 ...
    ! B0 w5 a& b# h' u+ Z8 j
    只需要简单改动 look_up_definition 函数即可使用 GD:; z2 L! @4 O' d* g9 W$ c% c
    6 W* d) @8 G" u( h* c8 P1 ~; h3 U
    1. Func look_up_definition($word)
      1 `& B( m; x- n9 [
    2.         Run("E:\Software\GoldenDict\GoldenDict.exe " & $word)1 q+ u3 k$ y3 p5 {5 m" N. ]
    3.         ; !!!这里记得改成你自己的安装路径!!!; i$ b% J& }& L# y$ `4 L  }) t
    4. EndFunc
    复制代码

    . `( U# A: E6 W8 V9 y% F( b1 K0 p, Y3 R/ K6 G4 F9 \6 C8 r! M
    , v! ^% C3 m, _9 b$ O0 D
    针对你提出的需要,只需改动 pretreatment 函数即可:
    " F- f0 A" v9 \
    , c$ H6 Z" U0 s% d! L& C3 ]
    1. Func pretreatment($str)
      8 k( k( T) _; ~2 P3 G# n
    2.    $str = StringStripWS($str, $STR_STRIPLEADING + $STR_STRIPTRAILING)
      ; r5 {4 o2 }1 ^9 C3 K+ v8 ]
    3.    If StringLen($str) < 50 And Not StringInStr($str, ' ') And Not StringInStr($str, @CR) Then
      # J6 ?; |4 Y" m
    4.           Return $str) [) z' L, G! K: |# ?( {
    5.    ElseIf StringLen($str) < 100 And StringInStr($str, ' ') And Not StringInStr($str, @CR) Then
      & {; V/ l" r9 S' S# L) Y2 }
    6.       Return '"' & $str & '"'
      ) q& E0 B) n& C& j! S; N
    7.    Else& c* B1 K0 M  H
    8.           Return Null! y  c2 Y8 U  Y" K' |+ h6 ?' M
    9.    EndIf
      9 V& p" W; m. N1 e% ~& I0 l: F
    10. EndFunc
    复制代码

      c+ e) c) B% H  b1 ]4 Q5 _  b8 h& J8 ~9 a" Y; w5 ]2 ]4 B4 K
    代码可以参考这里:* T* L6 B" i. H9 }
    * W, a" K( V1 \: J9 [

    % Z' y# o/ N9 s  m) F) A' [! o) Y

    本帖子中包含更多资源

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

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

    [LV.1]初来乍到

    发表于 2016-2-20 13:45:50 | 显示全部楼层
    gnoweb 发表于 2016-2-20 11:04! B/ @% k& A6 C+ h+ p
    只需要简单改动 look_up_definition 函数即可使用 GD:

    $ e0 P, S. C  d% q9 k7 `gnoweb 兄:
    ! d8 P3 c$ a$ H
    " f, q. O3 H. c8 K0 J謝謝你,用起來蠻順暢的也都沒什問題
    $ V* v& [; Y: y7 v
    0 s/ I1 F5 q3 ~$ K% ^$ \7 G- O" h) A Thanks again

    该用户从未签到

     楼主| 发表于 2016-2-23 20:18:04 | 显示全部楼层
    gnoweb 发表于 2016-2-15 23:087 p- |* @2 R0 s  u. \+ E
    目前 Windows 下可以通过 Autoit V3 脚本来实现剪贴板取词(鼠标划词选择,复制到剪贴板),脚本后台监测, ...

    : a1 A0 s9 t# p% g9 H% h, @( E谢谢 。。。如果这个方便么就好了,我先试一下,差点想用钩子的方式了,

    该用户从未签到

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

    该用户从未签到

     楼主| 发表于 2016-2-24 16:49:13 | 显示全部楼层
    gnoweb 发表于 2016-2-15 23:08  e+ S  B, ^6 W9 E5 m( b
    目前 Windows 下可以通过 Autoit V3 脚本来实现剪贴板取词(鼠标划词选择,复制到剪贴板),脚本后台监测, ...

    6 G! t5 _+ V+ }6 u# ^& t7 b你好,我安装了 Autoit V3  ,编译你的 脚本,好像需要 按ctrl  c才可以读取到单词,鼠标划词是哪个函数实现的功能啊。。而且,发送到mdict不成功,  - J1 {; x8 R" G' c. X. @
    ;MsgBox("","ffsa",$word)这里显示的$word已经是剪切板上的单词了,但是  mdict也没有翻译。mdict已经运行起来。mdict已经设置 监视剪切板。. U6 W: ~) @; _) G9 }+ k. n
       ControlSend("MDict", "", 10, $word)

    该用户从未签到

    发表于 2016-2-24 18:07:34 | 显示全部楼层
    fanrongqi 发表于 2016-2-24 16:49
    & Y9 k  ~: i& |9 D0 I& S你好,我安装了 Autoit V3  ,编译你的 脚本,好像需要 按ctrl  c才可以读取到单词,鼠标划词是哪个函数 ...

    5 b2 G, o2 z1 \2 h: k' G" i+ {1 j6 Z( ]: N9 O
    这个脚本是用鼠标选择文本,必须 Ctrl + C 或者鼠标右键复制到剪贴板后,才可以被传送到 Mdict 的。) R% e, s. a! a, S* X6 {9 b
    . T& _! l0 F5 N6 m
    如果用鼠标划取单词就被检测到,那你要自己去读 AutoIt v3 的文档 >> Function Reference >> Mouse Management >>2 Y$ k" }) N8 ]! h6 C
    4 X4 w* k0 V! l) e& w3 }

    3 r- J# q( G' W' v0 V. V) C  T# ]3 ~0 B
    看看有没有可能实现,目前我暂时想不出来怎么用 AutoIt v3 提供的函数实现。2 w# M; U! f& ^

    . T' r! }. F) q1 U0 J2 a% D. D1 S; m' T————————————————————————————————————————————————; G& E* Y" V: X1 A

    - y9 S; f& `- U: M7 f另外,你把 ControlSend 函数里面的 controlID 从 1000 改成了 10,所以无法翻译:% N+ D3 v% `. ~3 w1 u  b1 F; B0 `0 ?

    8 T  Y" ?9 o# b  P/ g, g) `
    1. ControlSend("MDict", "", 10, $word)
    复制代码
    $ [+ B9 P& Z3 L- Y9 \0 K) ]/ P

    / r5 W* G# G) H4 X- x" i4 L0 [那个 1000 的意思是控件 ID 的代号,表示取词栏,就是要把单词传送给这个控件(黄色处):* C0 P( I* F/ d- Y) X
    9 O  N8 k8 e' u  I4 L

    " V" ^( i7 Q0 ^1 n0 r1 G# o
    4 _8 {3 d7 `0 s改成 10 当然不行了,那个不是延时毫秒的意思,你从 1000 改为 10,并不会给整个过程提速。
    6 c8 c2 n, [7 I4 d4 z2 `- k2 m. |) s: N$ c

    . e: G; P' @3 y! _

    本帖子中包含更多资源

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

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

    本版积分规则

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

    GMT+8, 2024-5-14 05:03 , Processed in 0.058501 second(s), 12 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2023, Tencent Cloud.

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