Codejie's C++ Space

Using C++

LingosHook:Lingoes生词本第一版


    啥也不说,上图:






    数据通过Hook方式从Lingoes的结果中提取再放入本地数据文件中,然后再查询出来。两张图分别显示了树状方式结果显示和HTML方式结果显示。有点样子了吧~
    目前的主要问题集中在Lingoes结果的处理上,通过HTML数据分析数据是下一步的首要目标,打算先考察先wxWidgets带的XML解析对象,如果不行再试试tinyxml,再不行就不知道了,Lingoes的HTML结果应该是直接字符串拼接的,不是有一定规则,这对分析来说比较麻烦。
    存在的问题:
                     1.HTML显示有些走样;这个应该是wxHtmlWindow对DIV标签支持的问题,这个控件不知道是如何实现的,直接嵌入的IE还是其他方式?反正显示没有直接用IE显示好看;还有就是不支持内容中'file:///'定位的图像,这个很恼火,每次显示前,要先剔除HTML数据中的'file:///'字串;先看看了,不是主要功能,如果必要,可以直接使用IE内嵌方式,而不用wxHtmlWindow;
                     2.字典只能支持一种:Vicon(维科)字典,就是Lingoes缺省带的,现在测试时,就开这一个字典;
                     3.Lingoes界面语言的问题也是比较烦的地方,不仅仅对Hook过程有影响,而且结果的字典解析上也有影响,这也是急需通过HTML方式,而不是TEXT方式分析数据的主要原因;
                     4.等等,等等,很多地方~

    这里是LingosHook程序,源码也在里面,有兴趣下载试试。(不能运行,请尝试先安装MS的VC9的实时库-‘vcredist_x86.exe')开发中,任何问题请评论~
    由于Lingoes的界面语言对LingosHook运行影响较大,提供了一个配置的地方,如下图,注意的是,每次都需要设置下,因此配置没有被记录还。。。

posted on 2009-11-23 17:36 codejie 阅读(1050) 评论(14)  编辑 收藏 引用 所属分类: C++

评论

# re: LingosHook:Lingoes生词本第一版 2009-11-23 19:33 missdeer

不是直接嵌入IE,wx自己写的一个,就好比QT的WebKit一样,不然就不能跨平台了。
http://www.kirix.com/labs/wxwebconnect.html 这里有个Gecko内核的wx控件。  回复  更多评论   

# re: LingosHook:Lingoes生词本第一版 2009-11-23 19:36 missdeer

wxCode中还有个iehtmlwin的控件,是嵌入ie的。  回复  更多评论   

# re: LingosHook:Lingoes生词本第一版[未登录] 2009-11-23 23:49 codejie

@missdeer
收到,回头就去看~wxWidgets用的不多,很多都不知道啊~  回复  更多评论   

# re: LingosHook:Lingoes生词本第一版[未登录] 2009-11-24 10:10 Liu

没其他地方和你联系

请教一个技术问题
有一个指定的整数数组
每个整数(4byte 长)前5bit是特殊位,后面的bit才是数据
要写一个程序
把前5bit去掉
然后数据往前挪(不留下那5bit的空位)
形成一个char * 的东西出来
要你会怎么实现?

实现起来要顾及空间和效率……

  回复  更多评论   

# re: LingosHook:Lingoes生词本第一版 2009-11-24 11:25 codejie

@Liu
如需要,发gmail或者直接电我,都没有变~
问题先看看,你知道我写算法最差了~  回复  更多评论   

# re: LingosHook:Lingoes生词本第一版 2009-11-24 11:54 codejie

@Liu
int ai[N];
for(int i = 0; i < N; ++i)
{
ai[i] = ai[i] << 5;
}

char* pc = ai;
for(int i = 3; i < N; ++ i, ++pc)
{
*pc = (*pc && 0xE0) || (*(pc + 1) && 0x1F);
}

这应该是个笨方法,还不知道对错,怎么想就怎么写了,感觉应该可以在一个循环中搞定,让我在想想啊,你先试试上面的法子对不对~  回复  更多评论   

# re: LingosHook:Lingoes生词本第一版 2009-11-24 12:34 codejie

@Liu
不用看上面的了,猪一样的想法,大脑完全被要吃大排的思想占领了~容我再想想~  回复  更多评论   

# re: LingosHook:Lingoes生词本第一版 2009-11-24 13:21 codejie

@Liu
int ai[N];
for(int i = 0; i < N; ++i)
{
ai[i] = ai[i] << 5;
}

int* pi = NULL;
char* pc = NULL;
int cnt = 0;

for(int i = N - 1; i >= 0; -- i)
{
pi = ai[i];
pc = (char*)pi - 1;
cnt = N - 1 - i;
cnt = cnt * 4 - (5 * cnt / 8);
for(int j = 0; j < cnt; ++ j, ++ pc)
{
*pc = (*pc && 0xE0) || (*(pc + 1) && 0x1F);
}
}

上面的方法省空间,但效率肯定不行,对错也不知道,只是我能力就这些了~你看着办吧~~  回复  更多评论   

# re: LingosHook:Lingoes生词本第一版[未登录] 2009-11-25 01:59 Liu

老实说把,这题是我最近在面试的时候碰到的。

我第一个解法就是和你一样的想法有点类似,先逐个拷贝过来,再想办法把中间的5bit空位删除掉。结果对面那个印度阿三说我的空间利用率和效率不高,要我重写……

我还在那里想的时候,丫就不耐烦了说算了算了下一题

所以这东西让我有点小小的郁闷,因为才给了我20分钟不到写代码。5bit的位操作让人很难受阿,中间想解法也没给人足够的时间

  回复  更多评论   

# re: LingosHook:Lingoes生词本第一版 2009-11-25 09:35 codejie

@Liu
表郁闷了,要这样想,做不出来说明你已经上升到一个新的阶段了,不再是coder了,是Leader了~好事啊~  回复  更多评论   

# re: LingosHook:Lingoes生词本第一版 2009-11-26 09:28 wu

根据(32-20)*2%8==0每2个整数转换成3个字符,零头另算
union Helper {int val[2];
struct {char nul1:5; char ch1:8; char ch2:8 ... };};
// 可能存在对齐及大头小头问题……
  回复  更多评论   

# re: LingosHook:Lingoes生词本第一版 2009-11-26 12:50 codejie

@wu
我是永远想不起用union类型的。。。  回复  更多评论   

# re: LingosHook:Lingoes生词本第一版 2009-12-24 17:45 lawrence

有没有想过HOOK界面的句柄呢?而不需要用HOOK DLL的做法?  回复  更多评论   

# re: LingosHook:Lingoes生词本第一版 2009-12-25 09:44 codejie

@lawrence
什么叫做HOOK界面?我也没有HOOK任何Lingoes的DLL的。  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


公告

Using C++

导航

统计

留言簿(73)

随笔分类(513)

积分与排名

最新评论

阅读排行榜

评论排行榜