转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
利用Delphi和金山词霸制作批量单词翻译         ★★★★

利用Delphi和金山词霸制作批量单词翻译

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1195 更新时间:2009/4/23 18:29:19

  最近本人正在准备CET-4的考试,从同学那得到了一份“四级高频词”的doc文档,该文档只有单词,并没有音标和解释,如果进行人工一个一个翻译很是费事,因此本人利用Delphi和金山词霸2002特别制作了一个单词批量翻译,并且可以将翻译结果直接保存为RTF文件的程序。其程序界面如下:


原理分析:
  利用“金山词霸2002”的翻译功能,进行单词的翻译,利用Delphi获取“金山词霸2002”中翻译的结果的控件的句柄,利用粘贴复制功能,即可以获得翻译的结果了。

API函数说明:
  HWND FindWindow(
            LPCTSTR lpClassName,
 // 欲搜索的窗体的类名
            LPCTSTR lpWindowName  // 欲搜索的窗体的标题名称
         );//查找与指定条件相符的第一个子窗口

  HWND FindWindowEx(
      HWND hwndParent,
 // 在其中查找子的父窗口的句柄
      HWND hwndChildAfter, // 从这个窗体后开始查找 
      LPCTSTR lpszClass, // 欲搜索的窗体的类名
      LPCTSTR lpszWindow // 欲搜索的窗体的标题名称
     );//在指定窗体列表中查找与指定条件相符的第一个子窗口

  BOOL ShowWindow(
      HWND hWnd,
 // 窗体的句柄
      int nCmdShow  // 窗体的显示方式
     );//指定窗口的可见性

  BOOL BringWindowToTop(
      HWND hWnd
 // 窗体的句柄
     );//将指定的窗口带至窗口列表的顶部

  BOOL SetForegroundWindow(
      HWND hWnd
  //窗体的句柄
    );//将窗口设为系统的前台程序

  HWND SetFocus(
      HWND hWnd
 // 聚焦的窗体的句柄
    );//将窗口聚焦

  VOID keybd_event(
      BYTE bVk,
 // virtual-key code
      BYTE bScan, // hardware scan code
      DWORD dwFlags, // flags specifying various function options
      DWORD dwExtraInfo  // additional data associated with keystroke
    );//模拟按键的产生

这里提供了基本Api的声明,具体的使用方法,你可以其它相关资料。

具体分析:
  首先利用Spy++工具,对“金山词霸2002”进行分析,分析结果如下:
  金山词霸2002的窗体的名称是:金山词霸 2002 
  金山词霸2002的单词输入控件类名:Edit (属于Combobox的子窗体)
  金山词霸2002的翻译结果控件类名:XDICT_ExplainView

程序界面:
  一个Timer控件(Timer1,其间隔时间为3秒),一个Memo控件(MList),两个RichEdit控件(RTrans,RConv),具体的代码如下:


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,Forms, Dialogs, StdCtrls, ComCtrls, Clipbrd,Buttons, ExtCtrls, Menus;

type
  TForm1 = class(TForm)
    MList: TMemo;
    RTrans: TRichEdit;
    Button1: TButton;
    Timer1: TTimer;
    Button2: TButton;
    RConv: TRichEdit;
    Button3: TButton;
    od: TOpenDialog;
    RichEdit3: TRichEdit;
    MainMenu1: TMainMenu;
    F1: TMenuItem;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    C1: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    RTF1: TMenuItem;
    Panel1: TPanel;
    ProgressBar1: TProgressBar;
    Splitter1: TSplitter;
    Splitter2: TSplitter;
    E1: TMenuItem;
    N6: TMenuItem;
    N7: TMenuItem;
    N8: TMenuItem;
    Edit1: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure N3Click(Sender: TObject);
    procedure N6Click(Sender: TObject);
    procedure N8Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  i:integer=0;//声明一个全局变量,用于单词的记数
implementation

{$R *.dfm}

//开始转换事件
procedure TForm1.Button1Click(Sender: TObject);
begin
  RTrans.Clear;//清空转换区
  RConv.Clear;
  timer1.Interval:=strtoint(edit1.Text)*1000;//设置间隔时间
  timer1.Enabled :=true;//
  progressbar1.Position:=0;//设置进度条状态
  i:=0;//初始化变量,用于记数
  progressbar1.Max:=MList.Lines.Count;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  King,//金山词霸 2002 主窗口句柄
  combo,//单词输入框父窗口句柄
  edit,//单词输入框句柄
  means:thandle;//翻译显示窗口句柄
begin
  if i<=MList.Lines.Count-1 then
  begin
    king:=findwindow(nil,pchar(''''金山词霸 2002''''));
    combo:=findwindowex(king,0,''''ComboBox'''',nil);
    edit:=findwindowex(combo,0,''''Edit'''',nil);
    means:=findwindowex(king,0,''''XDICT_ExplainView'''',nil);
    //信息显示
    label3.Caption :=''''(''''+inttostr(i+1)+''''/''''+inttostr(MList.Lines.Count)+'''') ''''+MList.Lines[i];
    //存储信息
    clipboard.AsText := MList.Lines[i];

    showwindow(king,sw_shownormal);
    bringwindowtotop(king);
    SetForegroundWindow(king);
    windows.SetFocus(edit);
    //模拟Ctrl+V 粘贴
    keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0);
    keybd_event(Ord(''''V''''), MapVirtualKey(Ord(''''V''''), 0), 0, 0);
    keybd_event(Ord(''''V''''), MapVirtualKey(Ord(''''V''''), 0), KEYEVENTF_KEYUP, 0);
    keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0);

    SetForegroundWindow(means);
    windows.SetFocus(means);
    //模拟Ctrl+A 全选
    keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0);
    keybd_event(Ord(''''A''''), MapVirtualKey(Ord(''''A''''), 0), 0, 0);
    keybd_event(Ord(''''A''''), MapVirtualKey(Ord(''''A''''), 0), KEYEVENTF_KEYUP, 0);
    keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0);

    SetForegroundWindow(means);
    windows.SetFocus(means);
    //模拟Ctrl+C 复制
    keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0);
    keybd_event(Ord(''''C''''), MapVirtualKey(Ord(''''C''''), 0), 0, 0);
    keybd_event(Ord(''''C''''), MapVirtualKey(Ord(''''C''''), 0), KEYEVENTF_KEYUP, 0);
    keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0);

    windows.SetFocus(RTrans.Handle );
    //模拟Ctrl+V 粘贴
    keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0);
    keybd_event(Ord(''''V''''), MapVirtualKey(Ord(''''V''''), 0), 0, 0);
    keybd_event(Ord(''''V''''), MapVirtualKey(Ord(''''V''''), 0), KEYEVENTF_KEYUP, 0);
    keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0);

    RTrans.Lines.Add(''''==================''''+#13);
   

[1] [2]  下一页


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台