掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 1100|回复: 12

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

[复制链接]

该用户从未签到

发表于 2016-2-14 10:01:18 | 显示全部楼层 |阅读模式
如题,我找了选项,好像是没有,我感觉需要在看文档的时候,能够屏幕鼠标划词,这样方便点吧。# Q: y, G5 L# e! m

: C! [4 b1 n7 b; h+ c3 @# B. Lgolddict软件好像也不可以直接显示  翻译框,需要按键盘才行。可有一劳永逸的解决办法。

该用户从未签到

发表于 2016-2-15 23:08:17 | 显示全部楼层
本帖最后由 gnoweb 于 2016-2-17 11:12 编辑 - D7 ~; s/ Q( r$ L- ^8 Y

) r  A, A3 b  e8 ~目前 Windows 下可以通过 Autoit V3 脚本来实现剪贴板取词(鼠标划词选择,复制到剪贴板),脚本后台监测,调用 MDict PC。
/ o2 R8 Z# b' S  ?同样这种方法也适用于 GoldenDict PC 无法取词的程序,比如 Chrome,只需要改动一下程序的名称及路径信息,当然没有 GoldenDict PC 自带的即点即译方便,仅作权宜之计。
6 p, E( }" j( [' a7 z
; w1 q' F* ?- J, N& K7 I6 g7 y6 s
  1. #include <StringConstants.au3>1 O& F7 j! R8 X4 |
  2. #include <MsgBoxConstants.au3>
      E) N1 ^$ S6 i, f( F4 U, e
  3. * F4 f  J; s3 ~7 n% P' }
  4. Func get_word_from_clip()
    * h) T/ d) O( n# |! A
  5.    Local $clip_string = ClipGet()- g; O% P" F, `4 M0 e! B- \
  6.    ;MsgBox("", "剪贴板文本", $clip_string)5 p4 d) Y( r' E- x8 U# z! e( a1 z! h
  7.    Return $clip_string
    . C2 |# b- c7 X3 ?; v
  8. EndFunc& x  k. t1 d- ]! d4 l8 L4 B6 a! J
  9. / ~& n' T9 x- Q. r. m/ _! N% D8 q
  10. Func look_up_definition($word)
    ! o3 _5 |6 C3 `2 `! V# j
  11.    If Not ProcessExists("MDict.exe") Then
    - J7 t8 u' N2 C6 G7 `
  12.           Run("E:\Software\MDictPC\MDict.exe")                ; 此处改成你自己的 MDict 实际安装目录  v, `1 N7 [1 v+ s0 i) }* Q
  13.           Sleep(100)
    / q5 i3 H* N8 a! n" x" I- i3 m8 {
  14.    EndIf: q; K" }$ d) u/ z4 A9 W8 C
  15. 5 i- j& m5 \: |
  16.    WinActivate("MDict")% D; i4 ~1 R' T. W! F' u
  17.    Send("{ENTER}")
      Q5 D0 ~: O5 r9 N$ q" n( v6 r  ~* w
  18.    ControlSend("MDict", "", 1000, $word)
    5 N: L& ^  `+ B" _
  19.    Send("{ENTER}")
    ) b8 O0 U) h+ \* |
  20. EndFunc
    : K3 _$ T5 M- H0 T

  21. - D3 b% ]" U3 ^( Z# q) `, G% U
  22. Func pretreatment($str)0 O1 i1 S. F3 T" ~4 B5 P( x  [
  23.    ; 对字符串进行预处理:去除左右空白字符、转小写、判断是否全部为字符且长度小于指定值
    , J# H$ c; n9 r& S/ X
  24.    ; 默认不对带空格的词组取词,不对汉字取词; I9 |& ]5 q4 }# w- `2 e
  25.    ; 符合上述条件返回新的字符串,否则返回 0
    # k/ J$ _/ X3 D  c6 L1 H
  26.    $str = StringStripWS($str, $STR_STRIPLEADING + $STR_STRIPTRAILING)9 H/ S7 ?) `  ~6 ]+ ^
  27.    $str = StringLower($str)1 Z; F3 y: J+ h6 P
  28.    If StringLen($str) < 20 And StringIsASCII($str) And StringIsAlpha($str) And Not StringInStr($str, @CR) Then9 J0 S. q2 B& o& x) h/ O
  29.           ;MsgBox($MB_SYSTEMMODAL, "20", $str)# Y+ g# y$ ~- ]1 _5 N
  30.           Return $str
    * ]" x! ~% L( d
  31.    ElseIf StringLen($str) < 4 And StringIsAlpha($str) And Not StringInStr($str, @CR) Then
    * R5 A8 `* ^6 @9 d
  32.           ;MsgBox($MB_SYSTEMMODAL, "4", $str)2 y( f+ K0 Z3 O" w/ L; o) H( l" [7 C
  33.           Return $str
    9 u- S2 L* e& g7 I8 U
  34.    Else
    5 M$ E! a, B7 s( f
  35.           Return Null) m! ~/ H/ L: k0 t+ i2 M7 Q/ T5 w
  36.    EndIf8 D2 d8 q: O: z& \. D
  37. EndFunc  k& \  y3 f2 t: {
  38. $ v) b! s4 y. o# [

  39. + D$ M/ k7 a1 w2 ~+ a& i$ B
  40. Func my_exit()6 X* ?" v7 y! U0 O( e
  41.    Exit* S- D' K& _* l" R) L4 H5 [
  42. EndFunc
    , q7 ?( s* u) l* I6 m7 g0 c8 m% i* n/ i
  43. * r* h# W$ ~% G9 X
  44. HotKeySet("^!l", "my_exit"); ^ Ctrl    ! Alt        l
    0 N7 T& Z6 U1 o1 ?1 O9 {7 A2 q

  45. . A9 E4 D# d3 v0 P
  46. Local $preview = pretreatment(get_word_from_clip())
    . F$ M9 S+ V3 Y5 V2 [
  47. Local $current$ R( m0 q% v5 m- O/ ^

  48. 7 q# g/ _! z- }/ @% Z+ X9 _5 v
  49. While True8 Q: @7 }, F, A3 _2 c
  50.    $current = pretreatment(get_word_from_clip())- \# i3 y  U7 S5 _9 ^+ \3 b
  51.    if $current == $preview Then" Q  m0 w! H' ?) \1 X6 `" ]
  52.           Sleep(1000)0 {% s) Q+ D- k
  53.           ContinueLoop1 O& [2 r- j. z8 g* x
  54.    ElseIf $current <> Null Then
    7 {. b1 G) k0 f( D( m
  55.           $preview = $current
    $ a2 Y, q- P( U" E$ @! [8 Q  _
  56.           look_up_definition($current)
    ) Y& ?3 ?: X$ F) ?6 n+ \$ k
  57.           Sleep(1000)
    0 B2 T. j2 J% o# x# Z' X# H7 p
  58.    ElseIf $current == Null Then        ; 防止循环空耗 CPU
    # Y2 [2 Q/ Z& S+ O- s; y3 I
  59.           Sleep(1000)2 @- R5 S8 Z5 G8 e
  60.    EndIf) h  \' t8 W' U0 e' e5 c0 _
  61. WEnd
复制代码
; O8 N& P; U& J( T+ ?
! j# }7 C! M/ P  S7 z, X+ B

本帖子中包含更多资源

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

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
    5 B0 v* h# I9 ]9 {! w2 ^目前 Windows 下可以通过 Autoit V3 脚本来实现剪贴板取词(鼠标划词选择,复制到剪贴板),脚本后台监测, ...
    ) c+ h% o/ H9 }$ g7 g% @
    gnoweb兄:
    * O6 I5 |1 ?, @7 ^3 z, a能否提供此代碼檔案  }+ c! |  L9 C( b, J8 F4 `
    复制代码時太多亂碼( P8 x- F0 j8 R5 G  A9 A, ~
    7 g6 s# Z* C: o3 [: a7 f% @! q& O! z. ^
    謝謝& R" C3 l$ ~3 n- x* f

    点评

    见 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
    0 G! l. m. m8 G9 h! e, x目前 Windows 下可以通过 Autoit V3 脚本来实现剪贴板取词(鼠标划词选择,复制到剪贴板),脚本后台监测, ...
    3 j; Z* F! X! P% ]  ]; H
    Thanks a lot
  • TA的每日心情
    开心
    2018-8-8 03:13
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2016-2-20 07:08:18 | 显示全部楼层
    本帖最后由 喬治兄 于 2016-2-20 07:17 编辑 ! u- ?9 _9 L* D  w. u/ k
    gnoweb 发表于 2016-2-15 23:08
    8 B" }. S6 l7 b- K+ ]) |+ X目前 Windows 下可以通过 Autoit V3 脚本来实现剪贴板取词(鼠标划词选择,复制到剪贴板),脚本后台监测, ...

    " F. V( }5 C( g% P3 H$ @6 [, [
    + p7 u# P! P/ H: r( q/ Ignoweb兄:
    3 h/ C, M$ `7 I5 w你好,小弟試了你的MDict_Enhance.au3 效果蠻好的
    $ v! k5 {( z$ @" Y但是否能再修改一下,只要拷貝鼠標所選的內容直接傳送到 mdict 就好了
    + Q% x$ E: K6 D& r因 mdict  本身已有 Stripkey 處理,且目前無法查片語4 Q' q8 z: V$ K5 C! y" K8 ]1 b: F
    但中文也可拷貝6 `- l$ z, |7 ^/ ?: w
    直接讓mdict 判斷是否有此字條3 o* g1 _. y% \2 v6 ?7 _2 f
    7 g6 M/ `, z, L
    另外改成GoldenDict 是無法執行的
    4 G7 M2 D2 H# j是否是需調用其GoldenDict 內的dll來達成# q' Q6 ]4 ^. d# d5 a
    能否麻煩gnoweb兄再寫一個GoldenDict的取詞3 O; ~( U  I( c, e3 K

    1 R' q# T: `9 a辛苦你了. K5 S/ o  O$ L; V4 P

    " J; @( M( Q- ~0 R* k謝謝9 j! j6 _& L% B5 K' Z5 ]

    该用户从未签到

    发表于 2016-2-20 11:04:48 | 显示全部楼层
    喬治兄 发表于 2016-2-20 07:08
    2 E' k; N: h# E+ F9 _gnoweb兄:
    4 |$ @4 K5 U2 ~- E: p你好,小弟試了你的MDict_Enhance.au3 效果蠻好的
    ' h' {1 U& |4 e3 W+ E; ^) A# w但是否能再修改一下,只要拷貝鼠標所選的 ...
    , z# d9 l& U% ?3 {! N6 ]
    只需要简单改动 look_up_definition 函数即可使用 GD:$ J5 d2 f: o; s/ g& y

    - }4 H7 P2 g# o1 Z- q7 Z4 Q
    1. Func look_up_definition($word)
      * \/ L3 v9 m3 {3 k! s4 I/ _
    2.         Run("E:\Software\GoldenDict\GoldenDict.exe " & $word), w. l' v& c& E3 _, I$ z2 O; i) M: C
    3.         ; !!!这里记得改成你自己的安装路径!!!) a: T3 u9 w: e: i) w# i
    4. EndFunc
    复制代码

    ) d+ W) E9 c& S$ t( E4 d  N9 _% P) C% u* g/ [) X6 T
    8 h/ g) I: q! j& o6 l( @% m
    针对你提出的需要,只需改动 pretreatment 函数即可:( n; Z7 L; m6 J. [* l8 G$ }6 v4 E
    4 o8 K# a. S8 U. O# O9 S' o2 w# {
    1. Func pretreatment($str)3 Y; h  O7 k- E8 L0 I, F$ u
    2.    $str = StringStripWS($str, $STR_STRIPLEADING + $STR_STRIPTRAILING)
      - r* P" `' C$ }( k8 ~: e( d
    3.    If StringLen($str) < 50 And Not StringInStr($str, ' ') And Not StringInStr($str, @CR) Then4 Y- h  z" k: B" }* Z* _
    4.           Return $str
      5 Q2 `! P: a- u1 x/ J: J; B
    5.    ElseIf StringLen($str) < 100 And StringInStr($str, ' ') And Not StringInStr($str, @CR) Then+ ?' B* \% ]4 _$ c5 g% J
    6.       Return '"' & $str & '"'
      + }7 g- E) k  b
    7.    Else
      0 d1 U. N1 {1 l5 T  R5 P( p
    8.           Return Null, F- M  B- q( L) o
    9.    EndIf7 ~& G8 s4 Q+ l7 |  Y# B
    10. EndFunc
    复制代码
    ) t- {6 C: ?1 [

    + y* Q/ F$ A* @9 d7 e+ h代码可以参考这里:
    % u) m9 [% z3 X9 C- D, ^. H) }) m2 M. O
    2 R* n  a: B/ R* F1 M- K
    0 ~6 a0 R$ P0 m5 s

    本帖子中包含更多资源

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

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

    [LV.1]初来乍到

    发表于 2016-2-20 13:45:50 | 显示全部楼层
    gnoweb 发表于 2016-2-20 11:04
    % F' f, |! s7 S只需要简单改动 look_up_definition 函数即可使用 GD:
    " _$ ~7 L; w0 B, w$ c. B6 J
    gnoweb 兄:
    , Q1 y3 u2 W$ I- z; r9 o* \, u* ?; |# |9 u7 C0 F; P0 s
    謝謝你,用起來蠻順暢的也都沒什問題
    " F& ?# t" W  c4 p) u# M1 j2 V! K; u) u$ ^
    Thanks again

    该用户从未签到

     楼主| 发表于 2016-2-23 20:18:04 | 显示全部楼层
    gnoweb 发表于 2016-2-15 23:082 p7 I: P3 c6 L9 S4 m% N
    目前 Windows 下可以通过 Autoit V3 脚本来实现剪贴板取词(鼠标划词选择,复制到剪贴板),脚本后台监测, ...
    0 [- x; u8 a9 ?. G- ^
    谢谢 。。。如果这个方便么就好了,我先试一下,差点想用钩子的方式了,

    该用户从未签到

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

    该用户从未签到

     楼主| 发表于 2016-2-24 16:49:13 | 显示全部楼层
    gnoweb 发表于 2016-2-15 23:08
    1 P, M  a! P; ~目前 Windows 下可以通过 Autoit V3 脚本来实现剪贴板取词(鼠标划词选择,复制到剪贴板),脚本后台监测, ...
    1 r! Y9 X/ o3 `% o( `
    你好,我安装了 Autoit V3  ,编译你的 脚本,好像需要 按ctrl  c才可以读取到单词,鼠标划词是哪个函数实现的功能啊。。而且,发送到mdict不成功,  * |( u/ h# _8 H; b; _' ]' t
    ;MsgBox("","ffsa",$word)这里显示的$word已经是剪切板上的单词了,但是  mdict也没有翻译。mdict已经运行起来。mdict已经设置 监视剪切板。
    ) D' y- c2 K2 b/ u8 R: T   ControlSend("MDict", "", 10, $word)

    该用户从未签到

    发表于 2016-2-24 18:07:34 | 显示全部楼层
    fanrongqi 发表于 2016-2-24 16:498 u  j+ F' G, u( c# A, a1 i8 B& T
    你好,我安装了 Autoit V3  ,编译你的 脚本,好像需要 按ctrl  c才可以读取到单词,鼠标划词是哪个函数 ...

    , O. ?1 h: P1 [+ }' J# Z' S3 G# k9 ^& c% y$ T( ?. a/ M
    这个脚本是用鼠标选择文本,必须 Ctrl + C 或者鼠标右键复制到剪贴板后,才可以被传送到 Mdict 的。
    4 C: n- k5 o) B/ U- Q
    7 ?" ]. H* l2 G: P/ i; t如果用鼠标划取单词就被检测到,那你要自己去读 AutoIt v3 的文档 >> Function Reference >> Mouse Management >>
    $ R9 x8 b" z& k8 S/ G/ C
    - o; O! x2 V4 Z* S2 I
    3 U4 R0 U. P1 r, o, Q4 d! |5 I* ], O: h  m( b3 X8 U" o# _" ^
    看看有没有可能实现,目前我暂时想不出来怎么用 AutoIt v3 提供的函数实现。
    , R/ T' s3 y- B/ M. i2 j% ~  D2 r0 ^
    ————————————————————————————————————————————————
    ! D- M- Z8 D+ v8 y% _& X' L" R1 S$ v% W! L7 [
    另外,你把 ControlSend 函数里面的 controlID 从 1000 改成了 10,所以无法翻译:! U6 D5 p" M3 Z* F% h
    * }" Y( P5 i6 `6 j+ \* z0 v
    1. ControlSend("MDict", "", 10, $word)
    复制代码

    : Y: E8 l7 n' W, _
    * _$ w0 N6 v# c- \0 w5 c那个 1000 的意思是控件 ID 的代号,表示取词栏,就是要把单词传送给这个控件(黄色处):
    8 A. T% \& J% w% b8 y% u5 i' ]
    ' b" y  ~* k* K8 M6 D. h
    8 y, N+ Y3 }* C+ D# v! r8 F
    & @( W1 F9 u1 _改成 10 当然不行了,那个不是延时毫秒的意思,你从 1000 改为 10,并不会给整个过程提速。
    3 J+ d: |- l; \. \/ ~6 M( @! j; J, N% x. c+ D  G
    / T+ m* F3 f! ^' L4 Q

    本帖子中包含更多资源

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

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

    本版积分规则

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

    GMT+8, 2024-5-15 06:36 , Processed in 0.059124 second(s), 14 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2023, Tencent Cloud.

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