日期:2014-05-18  浏览次数:21233 次

请教如何进行屏幕取词
网上金山词霸的例子做了很多,没有一个能成功的。下面是我的代码
C# code

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.Runtime.InteropServices;
using XDICTGRB;
using CBGrabProxyLib;

namespace WindowsFormsApplication3
{
    public partial class Form1 : Form, IXDictGrabSink /*  ICBGrabSink */
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            GrabProxy gp = new GrabProxy();
          gp.GrabInterval = 2;//指抓取时间间隔   
          gp.GrabMode = XDICTGRB.XDictGrabModeEnum.XDictGrabMouse;//设定取词的属性   
          gp.GrabEnabled = true;//是否取词的属性   
          gp.AdviseGrab(this);
           
        }

       
        int IXDictGrabSink.QueryWord(string WordString, int lCursorX, int lCursorY, string SentenceString, ref int lLoc, ref int lStart)
        {
            //this.textBox1.Text = SentenceString.Substring(lLoc + 1,1);//鼠标所在字符
            //Console.WriteLine(SentenceString);
            this.textBox1.Text = SentenceString;
            return 1;
        }

    }
}





------解决方案--------------------
操作系统是什么系统,Windows7某些显示方式可能不是调用的以前的API了。
------解决方案--------------------
用微软提供的detours库试试吧。

我记得曾经看过WindowsXP使用TextOut这个API输出文字,通过拦截这类函数,就能取到了。

划词可以通过拦截反显文字的API,不过反显文字可能有些软件没调用系统API,而自己写的那样就取不到了。
------解决方案--------------------
我记得以前我看过一本书,那本书上好像用的是钩子的方法截取系统的消息来进行处理的。