请教如何进行屏幕取词
网上金山词霸的例子做了很多,没有一个能成功的。下面是我的代码
- 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,而自己写的那样就取不到了。
[解决办法]
我记得以前我看过一本书,那本书上好像用的是钩子的方法截取系统的消息来进行处理的。