掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 1435|回复: 12

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

[复制链接]

该用户从未签到

发表于 2016-2-14 10:01:18 | 显示全部楼层 |阅读模式
如题,我找了选项,好像是没有,我感觉需要在看文档的时候,能够屏幕鼠标划词,这样方便点吧。
& Y& d% v( h: N1 P7 M4 x" B2 J. y; a! e
golddict软件好像也不可以直接显示  翻译框,需要按键盘才行。可有一劳永逸的解决办法。

该用户从未签到

发表于 2016-2-15 23:08:17 | 显示全部楼层
本帖最后由 gnoweb 于 2016-2-17 11:12 编辑
& i% I: p3 Y5 D; m3 o3 E+ ^% i" ^; J( Y( v
目前 Windows 下可以通过 Autoit V3 脚本来实现剪贴板取词(鼠标划词选择,复制到剪贴板),脚本后台监测,调用 MDict PC。
. `  K, _" Z* N; ~5 [1 v1 |% e) o6 m同样这种方法也适用于 GoldenDict PC 无法取词的程序,比如 Chrome,只需要改动一下程序的名称及路径信息,当然没有 GoldenDict PC 自带的即点即译方便,仅作权宜之计。
- y+ l: S+ ^# u$ Q3 y; R: z, ^' W# A1 T
  1. #include <StringConstants.au3>
    7 h3 @& J, i; D' \
  2. #include <MsgBoxConstants.au3>
    , k# `3 Z& p3 I0 b, ^+ V6 I8 F
  3. ; Y' ^$ ~/ u9 \1 }. ?# @
  4. Func get_word_from_clip()7 G3 O& H& {7 h3 O' K5 _3 j9 I& m
  5.    Local $clip_string = ClipGet()- K1 v6 Q3 r) J5 m7 C( L8 i
  6.    ;MsgBox("", "剪贴板文本", $clip_string)
    ) m: {2 j- j4 |* T
  7.    Return $clip_string
    5 m( x- T" ?* v/ o& M0 [
  8. EndFunc
    ! y  o# j6 ^; z- {9 k; u0 u- N- ~6 ^
  9. - \; c- I+ Y9 E( P  ^" c9 n# T( p
  10. Func look_up_definition($word)
    3 F4 u; E5 _6 u( w1 R
  11.    If Not ProcessExists("MDict.exe") Then+ w/ \( T3 ~  Y' i; s' j$ |
  12.           Run("E:\Software\MDictPC\MDict.exe")                ; 此处改成你自己的 MDict 实际安装目录9 {1 O+ q8 E7 t& y6 c
  13.           Sleep(100)
    , T- N0 b1 V3 ?
  14.    EndIf
    4 v5 R$ b8 V7 Y/ @/ M. R) Z% N9 {

  15. ) Y& t! Q5 c2 z' l/ T# J- y
  16.    WinActivate("MDict")
    . Z/ _4 }( q2 ?2 b" G
  17.    Send("{ENTER}")
    2 s( n4 l6 j; k8 G
  18.    ControlSend("MDict", "", 1000, $word)  w; `+ P" ~: \9 p( U+ \
  19.    Send("{ENTER}")
    & h" n- \  f% Y7 c+ M
  20. EndFunc1 z% N, \2 ^5 Z7 `6 R( ]1 V5 T

  21. # c" L, i' i5 }. Q" t* w7 f
  22. Func pretreatment($str)6 v8 P# U! T8 d- G, }  j2 a
  23.    ; 对字符串进行预处理:去除左右空白字符、转小写、判断是否全部为字符且长度小于指定值# n9 H: X: D! ~* x* N3 h8 M* Z
  24.    ; 默认不对带空格的词组取词,不对汉字取词, L: U: l* }: e6 p1 S
  25.    ; 符合上述条件返回新的字符串,否则返回 0" X8 m& B: `$ {9 d) f% N: A+ Z
  26.    $str = StringStripWS($str, $STR_STRIPLEADING + $STR_STRIPTRAILING)
    ! {$ T/ ]# `8 s% W4 c8 X& N4 m
  27.    $str = StringLower($str). ]& d. @# r! G. Q! U
  28.    If StringLen($str) < 20 And StringIsASCII($str) And StringIsAlpha($str) And Not StringInStr($str, @CR) Then
    " ]6 N7 \3 o: T) M3 U1 O( z
  29.           ;MsgBox($MB_SYSTEMMODAL, "20", $str)9 G+ f" \9 W9 d( k8 \& ]6 J
  30.           Return $str- f& O5 g; J) T1 [# x7 b
  31.    ElseIf StringLen($str) < 4 And StringIsAlpha($str) And Not StringInStr($str, @CR) Then
    8 F6 Y2 I2 b8 e9 M: l
  32.           ;MsgBox($MB_SYSTEMMODAL, "4", $str); x, t0 P/ ]1 \) R6 z- `2 ^% ^. y
  33.           Return $str
    6 J0 _) c6 N. a- G. K0 \
  34.    Else
    8 C7 P" S0 q/ R- I+ Y1 U
  35.           Return Null
    : d; ]5 V1 L2 T( D+ F, W" I
  36.    EndIf
    3 H4 D& a( {& W6 s
  37. EndFunc; ^( |' C9 \$ x# m) e: t

  38. . v6 v) w$ q: b$ L8 r; \

  39. , C$ b( \  J8 A: _" s  d( K
  40. Func my_exit()
    6 m: Q3 G+ F, D1 @: e1 b. ~5 p  w
  41.    Exit. C0 Z5 n! A  h8 C
  42. EndFunc/ V: C. A$ b, l9 S
  43. ! H, P0 ^( ]3 o( V0 t2 O
  44. HotKeySet("^!l", "my_exit"); ^ Ctrl    ! Alt        l* c2 Q3 A4 b6 T! ~% P$ _1 x

  45. % P7 W, ?, @3 C
  46. Local $preview = pretreatment(get_word_from_clip())- T( j) e- K0 R2 x1 ^
  47. Local $current! B* q& K$ H, _3 m; u% e
  48. 1 L* m6 w- @7 w
  49. While True$ V7 A  L5 K9 F: ]+ N& W) G
  50.    $current = pretreatment(get_word_from_clip())
    , }6 m  E0 R2 R0 ?: D3 ^* ~
  51.    if $current == $preview Then8 e9 L" ^* N/ z( R1 R
  52.           Sleep(1000)
    ; k# H0 [7 P7 a! v( z
  53.           ContinueLoop
    & ]3 Z# q! D, f0 p) n
  54.    ElseIf $current <> Null Then9 W' |; |3 I! j1 b8 x' H8 m/ i3 s
  55.           $preview = $current0 k% ~9 _( T+ v5 r
  56.           look_up_definition($current)8 @, j0 _( y; }5 ~- F  I" y
  57.           Sleep(1000)
    ) [* Z! V$ V* i$ h" e
  58.    ElseIf $current == Null Then        ; 防止循环空耗 CPU, J; ~( B, ?! U
  59.           Sleep(1000)
    1 K2 y% T  B+ H/ s% m
  60.    EndIf
    2 ]2 j8 Z- X2 B* `
  61. WEnd
复制代码

2 q1 x* t, B) M/ V- s+ J# c. L3 @  B7 s& i- m0 g3 }

本帖子中包含更多资源

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

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:080 q  H1 w; D" ^( K! K" ]% \* a
    目前 Windows 下可以通过 Autoit V3 脚本来实现剪贴板取词(鼠标划词选择,复制到剪贴板),脚本后台监测, ...

    7 d1 A0 S1 p' vgnoweb兄:( A6 E8 C' h0 x7 a9 k0 |+ ^% k! L
    能否提供此代碼檔案
    * c' P+ u: P5 n2 x/ h2 g复制代码時太多亂碼
    2 N+ h3 ^/ e$ b6 J8 T) |3 M0 q* A" I9 Q, ?
    謝謝
    9 P5 W( u: ~( w4 W

    点评

    见 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
    3 C( B  }4 I4 G* U目前 Windows 下可以通过 Autoit V3 脚本来实现剪贴板取词(鼠标划词选择,复制到剪贴板),脚本后台监测, ...
    : J9 M- v  b" V* e! Y: a
    Thanks a lot
  • TA的每日心情
    开心
    2018-8-8 03:13
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2016-2-20 07:08:18 | 显示全部楼层
    本帖最后由 喬治兄 于 2016-2-20 07:17 编辑 , S* A% O% z- j- S
    gnoweb 发表于 2016-2-15 23:08
    9 q2 }7 Q  e$ R/ y! A, ^7 t7 P目前 Windows 下可以通过 Autoit V3 脚本来实现剪贴板取词(鼠标划词选择,复制到剪贴板),脚本后台监测, ...

    % U4 r, D& b  V! m$ r
    : @- t- I2 p! M9 s% ]gnoweb兄:  t% e) d, A' \) o  x" b' X( g0 Y
    你好,小弟試了你的MDict_Enhance.au3 效果蠻好的
    6 O- e7 C, t! Q. r, K! F但是否能再修改一下,只要拷貝鼠標所選的內容直接傳送到 mdict 就好了
    : P1 j3 ^% T9 f1 M4 f因 mdict  本身已有 Stripkey 處理,且目前無法查片語
    # T) l7 I: j' r- U% Y但中文也可拷貝
    0 ^. Z9 Y: }# Y8 L& }直接讓mdict 判斷是否有此字條( S: R: a. q, l3 W  w

    . e* R$ L3 J# j  ^5 X* j9 g另外改成GoldenDict 是無法執行的
    3 u' a/ m7 d( Q5 p& e! R是否是需調用其GoldenDict 內的dll來達成- t) Z) l  Q5 ]8 j
    能否麻煩gnoweb兄再寫一個GoldenDict的取詞3 D, Z0 x% S: s9 r1 Z1 J/ S
    3 K9 H; ^: B/ z# {0 ]  w- j5 ]
    辛苦你了
    0 l: Q5 B8 i3 s0 L & w! j* a1 D7 D5 M! _* |3 ~9 o
    謝謝
    / g1 S1 r3 V& F; r- C+ G. g

    该用户从未签到

    发表于 2016-2-20 11:04:48 | 显示全部楼层
    喬治兄 发表于 2016-2-20 07:08  \. Q( u& F  C. t) P
    gnoweb兄:' {' j; d7 j' B+ S7 r7 }+ q
    你好,小弟試了你的MDict_Enhance.au3 效果蠻好的* Q. B! t) t, \, u- ]- w( n  d
    但是否能再修改一下,只要拷貝鼠標所選的 ...

    ! X; ]0 f9 x% Y+ ^8 r! J只需要简单改动 look_up_definition 函数即可使用 GD:  p. e4 p5 T! Y; }
    % O6 B7 g4 C( E  J* u; T' u2 e
    1. Func look_up_definition($word)
      $ `7 o; T' A* M' U- F0 B
    2.         Run("E:\Software\GoldenDict\GoldenDict.exe " & $word)2 X7 m( o  e( h: f, m
    3.         ; !!!这里记得改成你自己的安装路径!!!
      * }4 r; F7 F2 [5 [, `' Z3 k1 D2 g
    4. EndFunc
    复制代码
    ! b( J3 F3 |' v' R+ y# B/ q

    ( z: p& f. ?$ `5 X' a) P
    : U: j' ?) O1 m3 t3 M& B针对你提出的需要,只需改动 pretreatment 函数即可:
    1 l) J0 s; Y! K7 d6 b7 i$ v2 }! g$ n5 H$ m
    1. Func pretreatment($str)
      . e$ F) N! R7 S5 w/ r, w
    2.    $str = StringStripWS($str, $STR_STRIPLEADING + $STR_STRIPTRAILING)
      # S$ Y  @2 d* f' _/ J) l6 G. x% b
    3.    If StringLen($str) < 50 And Not StringInStr($str, ' ') And Not StringInStr($str, @CR) Then$ c$ \  V1 z, _  u0 x  |6 R8 J( X
    4.           Return $str
      1 F" V( Q/ K, B9 n* |' Y1 W' Z3 [
    5.    ElseIf StringLen($str) < 100 And StringInStr($str, ' ') And Not StringInStr($str, @CR) Then! ~6 G! ~4 T! t, S
    6.       Return '"' & $str & '"'
        k0 R9 s: J) x) n  P9 Q$ C! v# O) c
    7.    Else+ F3 o5 K- D0 h5 G0 H
    8.           Return Null
      * q. a% N' S# L) g4 F- P; U
    9.    EndIf$ ?4 h+ O# U3 G# y
    10. EndFunc
    复制代码
    # l2 p: c4 {7 \% M3 t1 y0 V* U, @
    " _# }! P& o( Z! Z
    代码可以参考这里:
    6 X: O" p9 P; H" d/ N6 ?
    1 b2 i! x; B1 q) T; Z/ p, ?( _3 t! F5 T4 ?3 a/ x

    本帖子中包含更多资源

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

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

    [LV.1]初来乍到

    发表于 2016-2-20 13:45:50 | 显示全部楼层
    gnoweb 发表于 2016-2-20 11:04- E: M% U. C& f! N
    只需要简单改动 look_up_definition 函数即可使用 GD:
    / J) @0 f' X. W5 b+ R! z& X
    gnoweb 兄:
    3 C6 k- k; }" `/ w
    ! Z% h9 h0 m/ R# M謝謝你,用起來蠻順暢的也都沒什問題/ H& H# x4 y& Y2 t% o" T3 R
    3 L! C+ }2 A9 l' T& t) X* r
    Thanks again

    该用户从未签到

     楼主| 发表于 2016-2-23 20:18:04 | 显示全部楼层
    gnoweb 发表于 2016-2-15 23:08
    $ [) w& I9 A  t9 R目前 Windows 下可以通过 Autoit V3 脚本来实现剪贴板取词(鼠标划词选择,复制到剪贴板),脚本后台监测, ...

    1 @( W3 M- w2 Y谢谢 。。。如果这个方便么就好了,我先试一下,差点想用钩子的方式了,

    该用户从未签到

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

    该用户从未签到

     楼主| 发表于 2016-2-24 16:49:13 | 显示全部楼层
    gnoweb 发表于 2016-2-15 23:08
    1 B$ ?9 M7 [+ [7 O, o  X6 h" i目前 Windows 下可以通过 Autoit V3 脚本来实现剪贴板取词(鼠标划词选择,复制到剪贴板),脚本后台监测, ...

    ; N0 S$ x& \: n" B# X' M3 o$ S你好,我安装了 Autoit V3  ,编译你的 脚本,好像需要 按ctrl  c才可以读取到单词,鼠标划词是哪个函数实现的功能啊。。而且,发送到mdict不成功,  
    ( e) E0 c. j6 ]6 p ;MsgBox("","ffsa",$word)这里显示的$word已经是剪切板上的单词了,但是  mdict也没有翻译。mdict已经运行起来。mdict已经设置 监视剪切板。
    6 Q8 {2 i3 ]2 S$ V- @   ControlSend("MDict", "", 10, $word)

    该用户从未签到

    发表于 2016-2-24 18:07:34 | 显示全部楼层
    fanrongqi 发表于 2016-2-24 16:49
    / G1 y4 _/ A6 x  W你好,我安装了 Autoit V3  ,编译你的 脚本,好像需要 按ctrl  c才可以读取到单词,鼠标划词是哪个函数 ...

      c0 D1 B  y, X0 S* H' q" F; S' ^/ G: [9 J1 x1 \$ q& J
    这个脚本是用鼠标选择文本,必须 Ctrl + C 或者鼠标右键复制到剪贴板后,才可以被传送到 Mdict 的。
    $ T! q0 y; J2 f1 x9 `, z- S% H1 E9 s4 B) i, X9 S. B
    如果用鼠标划取单词就被检测到,那你要自己去读 AutoIt v3 的文档 >> Function Reference >> Mouse Management >>
      r& W* k' n; |! w  Z6 l, N( w/ P1 h1 C, \6 C/ k* o  v: Y9 v
    . P) r" W7 n/ m+ ]
    ! N7 @' _& o6 z5 s( Q5 R. _% D: S
    看看有没有可能实现,目前我暂时想不出来怎么用 AutoIt v3 提供的函数实现。
    4 D9 X. Q: r6 d5 B* [
    3 D# _5 B3 q% u/ q! `0 `————————————————————————————————————————————————
    8 j  M4 m! r9 x' C: [4 Q5 M- j) U
    . J  U/ |7 Z& N另外,你把 ControlSend 函数里面的 controlID 从 1000 改成了 10,所以无法翻译:% p2 r+ r% }( p$ @# [1 o0 M  O
    % C) q' E0 S& N6 O+ V
    1. ControlSend("MDict", "", 10, $word)
    复制代码

      D. p5 A) X6 m: m+ M0 x4 w0 Z1 n+ n7 \% z9 P- B4 D# {/ y3 C
    那个 1000 的意思是控件 ID 的代号,表示取词栏,就是要把单词传送给这个控件(黄色处):
    2 T* i: h2 [! K* X1 T5 C/ e. j: \5 ^# k) Z  q2 t6 r" D

    ! G( ^9 ]4 |7 ?6 o( _% m' Z3 Y6 j( M2 @' [
    改成 10 当然不行了,那个不是延时毫秒的意思,你从 1000 改为 10,并不会给整个过程提速。
    1 I, ?0 F% }% C" \3 k/ o! @( S9 n" z) z4 \
    9 I/ G( a+ p1 V* f

    本帖子中包含更多资源

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

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

    本版积分规则

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

    GMT+8, 2025-5-4 09:30 , Processed in 0.025070 second(s), 27 queries .

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

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