金山词霸读取程序的源代码

原创 2004年06月27日 12:29:00

首先声明,这段代码是针对《金山词霸2003》的,金山词霸的其它版本需要稍为修改。

源代码说明:

1:请自己去下载LoadDll,并且研究它的使用(只需要简单修改命令行):

http://www.codeguru.com/Cpp/W-P/dll/article.php/c105/

2: 把其中的TestFunction()替换为4中的源代码

3:注意:

3.1) ////////////////////////////////////////////////////////////////////
 // The following code is to read explanationlist

 ///////////////// end of code to read explanation /////////////////

之间的代码是读取单词解释的。

3.2)

 ////////////////////////////////////////////////////////////////////
 // The following code is to read word list

 ///////////////// end of code to read word list /////////////////

是读取单词列表的。

请自己修改

4.源代码

FILE * g_fileCiba=NULL;
void WriteWord(int nIndex,LPCTSTR pszString)
{
 static const int STRING_MAX = 1024 * 100;
 static TCHAR pszBuffer[STRING_MAX + 1]="";

 if (pszString == NULL)
 {
  // flush the buffer: pszBuffer
  if (strlen(pszBuffer) > 0)
   fputs(pszBuffer,g_fileCiba);
  return;
 }
 if (strlen(pszString) > STRING_MAX) {
  ::MessageBox( 0, "Word too long!", _T("TestLib"), MB_OK );
  return;
 }

 if (strlen(pszString) + strlen(pszBuffer) > STRING_MAX)
 {
  // flush the buffer: pszBuffer
  fputs(pszBuffer,g_fileCiba);
  // clear the content
  memset(pszBuffer,0,sizeof(pszBuffer));

  strcpy(pszBuffer,pszString);
 }
 else {
  strcat(pszBuffer,"#####/r/n"); // Symbol to seperate each word
  strcat(pszBuffer,pszString);
  strcat(pszBuffer,"/r/n");
 }
}

ULONG TestFunction()
{
 /////////////////////////////////////////////////////////
 // Only for ?eé?′ê°?2003!
 /////////////////////////////////////////////////////////
 static const int WORD_MAX = 255;
 static const int STRING_MAX = 1024 * 10;
 TCHAR pszText[STRING_MAX + 1];
 TCHAR pszCaption[WORD_MAX];
 TCHAR pszWord[WORD_MAX + 1];

 // Find the main window
 HWND hWndCiba=GetWindow(GetDesktopWindow(),GW_CHILD);
 while (hWndCiba) {
  GetWindowText(hWndCiba,pszText,WORD_MAX);
  if (strstr(pszText,"?eé?′ê°?") != NULL)
   break;
  // did not find window, get next window in list.
  hWndCiba=GetWindow(hWndCiba,GW_HWNDNEXT);
 }
 if (hWndCiba == NULL) {
  ::MessageBox( 0, "?ò2?μ??eé?′ê°?", _T("TestLib"), MB_OK );
  return 0;
 }

 // Find the window which ID is 0x3EA , the ComboBox to show the word selected
 HWND hWndCombo=GetWindow(hWndCiba,GW_CHILD);
 while (hWndCombo) {
  GetWindowText(hWndCombo,pszText,WORD_MAX);
  if (GetWindowLong(hWndCombo,GWL_ID) == 0x3EA)
   break;
  hWndCombo=GetWindow(hWndCombo,GW_HWNDNEXT);
 }
 if (hWndCombo == NULL)  {
  ::MessageBox( 0, "Can NOT find the combo", _T("TestLib"), MB_OK );
  return 0;
 }

 // Find the window which ID is 0x434, the list of words. ( or which caption is "WordList")
 HWND hWndWordList=GetWindow(hWndCiba,GW_CHILD);
 while (hWndWordList) {
  GetWindowText(hWndWordList,pszText,WORD_MAX);
  if (GetWindowLong(hWndWordList,GWL_ID) == 0x434)
   break;
  hWndWordList=GetWindow(hWndWordList,GW_HWNDNEXT);
 }
 if (hWndWordList == NULL)  {
  ::MessageBox( 0, "Can NOT find the list", _T("TestLib"), MB_OK );
  return 0;
 }

 // Find the window which ID is 0x3F1, the explanation window.
 HWND hWndExplain=GetWindow(hWndCiba,GW_CHILD);
 while (hWndExplain) {
  GetWindowText(hWndExplain,pszText,WORD_MAX);
  if (GetWindowLong(hWndExplain,GWL_ID) == 0x3F1)
   break;
  hWndExplain=GetWindow(hWndExplain,GW_HWNDNEXT);
 }
 if (hWndExplain == NULL)  {
  ::MessageBox( 0, "Can NOT find the explanation window", _T("TestLib"), MB_OK );
  return 0;
 }

 /////////////////////////////////////////////////////////
 // Select the next item to enable the word shown in the ComboBox
 // Then read the word from the ComboBox
 // I have tried to use ListView_GetItemText(hWndWordList,0,0,lpszWord,255);
 // to read the word from list directly, but FAILED!
 // Maybe it is because ?eé?′ê°? encrypts the list??
 /////////////////////////////////////////////////////////
 int nPrevIndex,nIndex;
 int nCount;

 g_fileCiba=fopen("c://ciba.txt","w");
 if (g_fileCiba == NULL) {
  ::MessageBox( 0, "Can Not open the file!/nProgram exits...", _T("TestLib"), MB_OK );
  return 0;
 }
 GetWindowText(hWndCiba,pszCaption,WORD_MAX);
 nCount=ListView_GetItemCount(hWndWordList); // get item count
 nPrevIndex=ListView_GetNextItem(hWndWordList,-1,LVIS_SELECTED);

 ////////////////////////////////////////////////////////////////////
 // The following code is to read explanationlist
 LPTSTR lptstr;
 for (nIndex = 0;nIndex < nCount;nIndex++) {
  if (nPrevIndex != -1) {
   // un-select the previous item
   ListView_SetItemState(hWndWordList,nPrevIndex,UINT(~LVIS_SELECTED & ~LVIS_FOCUSED ),LVIS_SELECTED | LVIS_FOCUSED);
  }
  // select the current item
  ListView_SetItemState(hWndWordList,nIndex,LVIS_SELECTED  | LVIS_FOCUSED ,LVIS_SELECTED | LVIS_FOCUSED);
  nPrevIndex = nIndex; // save the previous index

  SendMessage(hWndCiba,WM_COMMAND,(WPARAM)32791,NULL);
  SendMessage(hWndCiba,WM_COMMAND,(WPARAM)32775,NULL);

  OpenClipboard(NULL);
  HGLOBAL hglb = GetClipboardData(CF_TEXT);
  if (hglb != NULL)
  {
   lptstr = (LPTSTR)GlobalLock(hglb);
   WriteWord(nIndex,lptstr); // write the word into the file
   GlobalUnlock(hglb);
  }
  CloseClipboard();

  // show the progress
  if (nIndex % 100 == 0) {
   _stprintf(pszText,"GetWords -[%d / %d] %%%.2f ",
    nIndex, nCount, (float)nIndex / nCount * 100.0f);
   HDC hDC=GetDC(NULL);
   TextOut(hDC,10,10,pszText,strlen(pszText));
   TextOut(hDC,10,10,pszText,strlen(pszText));
  }
 }
 ///////////////// end of code to read explanation /////////////////

 ////////////////////////////////////////////////////////////////////
 // The following code is to read word list
/* for (nIndex = 0;nIndex < nCount;nIndex++) {
  if (nPrevIndex != -1) {
   // un-select the previous item
   ListView_SetItemState(hWndWordList,nPrevIndex,UINT(~LVIS_SELECTED & ~LVIS_FOCUSED ),LVIS_SELECTED | LVIS_FOCUSED);
  }
  // select the current item
  ListView_SetItemState(hWndWordList,nIndex,LVIS_SELECTED  | LVIS_FOCUSED ,LVIS_SELECTED | LVIS_FOCUSED);
  GetWindowText(hWndCombo,pszWord,WORD_MAX);
//  _stprintf(pszText,_T("Count: %d/nword: %s"), nCount, pszWord);
//  ::MessageBox( 0, pszText, _T("TestLib"), MB_OK );
  nPrevIndex = nIndex; // save the previous index

  WriteWord(nIndex,pszWord); // write the word into the file

  // show the progress
  if (nIndex % 100 == 0) {
   _stprintf(pszText,"GetWords -[%d / %d] %%%.2f ",
    nIndex, nCount, (float)nIndex / nCount * 100.0f);
   HDC hDC=GetDC(NULL);
   TextOut(hDC,10,10,pszText,strlen(pszText));
   TextOut(hDC,10,10,pszText,strlen(pszText));
  }
 }
 */
 ///////////////// end of code to read word list /////////////////

 WriteWord(0,NULL); // flush the buffer
 fclose(g_fileCiba);
 return 1;

}

API HOOK 金山词霸取词功能原理

本文由本人整理  1 屏幕抓词       屏幕抓词(或者叫动态翻译)是指随着鼠标的移动,软件能够随时获知屏幕上鼠标位置的单词或汉字,并翻译出来提示用户。它对於上网浏览、在线阅读外文文章等很有帮助作用...
  • wanfustudio
  • wanfustudio
  • 2006年10月19日 22:16
  • 2560

读取金山词霸的词库程序

经过这个周末2天的奋战,终于完成了一个金山词霸的词库读取程序!当然,中间还看了2场欧洲杯,以及和老婆玩了几回坦克大战,否则可以更快完成吧!做这个程序的动机很久了,因为一直在背英语单词,如果可以有一个完...
  • tjulmy
  • tjulmy
  • 2008年06月18日 09:44
  • 1710

金山词霸的词库读取程序

啊哈 啊哈!金山词霸的词库读取程序完成! 经过这个周末2天的奋战,终于完成了一个金山词霸的词库读取程序!当然,中间还看了2场欧洲杯,以及和老婆玩了几回坦克大战,否则可以更快完成吧! 做...
  • ecai
  • ecai
  • 2004年06月26日 21:11
  • 3256

Android 图文数据JSON解析,金山词霸每日一句API的调用

Android 图文数据JSON解析,金山词霸每日一句API的调用 金山词霸开发的免费API http://open.iciba.com/dsapi/ 数据格式为 {"s...
  • gebitan505
  • gebitan505
  • 2014年08月06日 10:37
  • 2074

解决金山词霸2007无法在Acrobat Reader 7.0和Acrobat 7.0下取词的办法

金山词霸安装位置:C:/Program Files/Kingsoft/Powerword 2007Adobe 7.0安装位置:C:/Program Files/Adobe/Acrobat 7.0将金山...
  • tornadofeng
  • tornadofeng
  • 2008年05月07日 08:55
  • 2004

修复金山词霸只有最大化和最小化两种窗口状态的问题

首先,关闭金山词霸接着,修改XDICT.INI 中 WindowPos成:WindowPos=0,2,-32000,-32000,-1,-1,308,290,946,704 ...
  • looyo
  • looyo
  • 2006年08月17日 14:31
  • 2295

使用金山词霸突然卡死...

前段时间不知道怎么回事,金山词霸突然 卡死...怎么都关不了,只有重新启动,换了几个版本,还是一样.就只好把金山删除了,最近由于在网上查单词太麻烦了,就查了下原因,经过证实后,就是卡巴主动防御的缘故,...
  • zhaoyc_59211
  • zhaoyc_59211
  • 2007年05月16日 19:59
  • 1460

Ubuntu 下安装金山词霸替代软件

Ubuntu 下安装金山词霸替代软件:星际译王 stardict 首先,执行如下命令: sudo apt-get install stardict 安装完后,启动stardict,发现没有词典,提示...
  • evane1890
  • evane1890
  • 2007年04月17日 11:30
  • 2121

Python_金山词霸每日一句接口调用(可播放音频)

今天晚上闲着没事(其实事情很多的,只是不太想干,sign~)又开始折腾python了~之前用c#做了一个命令行下的简单的翻译工具,今天翻出来用的时候发现不太好用,于是乎,想再做一个,这次就用pytho...
  • pengjian444
  • pengjian444
  • 2015年12月29日 23:23
  • 790

金山词霸在360极速浏览器下不能取词

这个问题,整整一上午,我在网上搜了无数遍,看了无数个帖子,有说兼容模式运行的,360的工作人员居然还有说在快捷键的属相当中加什么-no-sandbox的,还有说安装取词插件的等等等等。没有一个是正确的...
  • wolfalcon
  • wolfalcon
  • 2015年04月08日 16:46
  • 7877
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:金山词霸读取程序的源代码
举报原因:
原因补充:

(最多只允许输入30个字)