提取金山词霸2005的词库

UINT m_ListCtrlHandle = 0x206EE;//显示单词的列表框的句柄,用spyXX得到
 UINT m_FrameHandle = 0x206E6;//程序主窗口的句柄
 
 if( ! ::IsWindow((HWND)m_ListCtrlHandle) )
  return;
 
 if( ! ::IsWindow((HWND)m_FrameHandle) )
  return;
 
 //total items
 DWORD nCount = ::SendMessage((HWND)m_ListCtrlHandle,LVM_GETITEMCOUNT,0,0);
 //nCount = 457542
 CFile file;
 if( ! file.Open("e://jscbWords.txt",CFile::modeCreate | CFile::modeWrite))
  return;//把获得的单词存入文件
 CStringArray saWords;
 saWords.SetSize(1000);//每读取1000个单词写一次磁盘。
 int iIndex = 0;
 
 for(DWORD i = 1;i<nCount;i++){
  ::SendMessage((HWND)m_ListCtrlHandle,WM_KEYDOWN,VK_DOWN,0);//列表框显示下一个单词,将自动查询该单词的解释。
//  ::SendMessage((HWND)m_FrameHandle,WM_COMMAND,0X802A,0);//加入金山词霸的生子本,该方法速度太慢,且不停的写磁盘,不行,硬盘受罪。
  
  ::SendMessage((HWND)m_FrameHandle,WM_COMMAND,0X8007,0);//复制解释。
  CString sProgress;
  sProgress.Format("%f",(double)i / (double)nCount);
  AfxGetMainWnd()->SetMessageText(sProgress);//该函数必须用CMainFrame的指针调用,在状态栏显示进度。
 
  OpenClipboard();
  HANDLE handle = GetClipboardData(CF_TEXT);
  saWords[iIndex++] = (char*)handle;//这里可以对单词作一些处理。
  CloseClipboard();
 
  if(iIndex == 1000){
   iIndex = 0;
   for(int j = 0;j<1000;j++){
    file.Write(saWords[j],saWords[j].GetLength());
   }
  }
 } 
 
 for(int k = 0;k< iIndex;k++)
  file.Write(saWords[k],saWords[k].GetLength());
 
 file.Close();
///
实现方法就是给显示单词的CListCtrl发(WM_KEYDOWN,VK_DOWN)消息,金山词霸就把该单词的解释查询出来,然后给主窗口发(WM_COMMAND,ID_COPY)消息,把单词连同解释复制到剪贴板,(ID_COPY等于0X8007),
然后读取剪贴板就得到了需要的东西,存入文本文件里面。
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值