UINT m_ListCtrlHandle = 0x206EE;//显示单词的列表框的句柄,用spyXX得到
UINT m_FrameHandle = 0x206E6;//程序主窗口的句柄
if( ! ::IsWindow((HWND)m_ListCtrlHandle) )
return;
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;
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的指针调用,在状态栏显示进度。
::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();
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());
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),
然后读取剪贴板就得到了需要的东西,存入文本文件里面。