亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Delphi > 正文

利用Delphi和金山詞霸制作批量單詞翻譯

2019-11-18 18:09:17
字體:
來源:轉載
供稿:網友
最近本人正在準備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);
    progressbar1.StepIt;//進度條移動
    inc(i);//增加記數

  end else
  begin
    timer1.Enabled :=false;
    RTrans.Lines.SaveToFile('Temp.txt');
  end;
end;

//讀取單詞列表到Mlist中
procedure TForm1.Button2Click(Sender: TObject);
begin
  if od.Execute then
    MList.Lines.LoadFromFile(od.FileName );
end;

//轉換功能,因為RTrans中得到的翻譯中,音標還不可以正確的顯示
//必須先安裝金山詞霸中的Font目錄中的Phonetic Plain字體
//實現音標的正確顯示

procedure TForm1.Button3Click(Sender: TObject);
var
  i:integer;
  start,ends:integer;
begin
  RConv.Clear;
  for i:=0 to RTrans.Lines.Count-1 do
  begin
    richedit3.Text :=RTrans.Lines[i];
    start:=pos('[',richedit3.Text);//查找音標位置,音標在[]中
    if start>0 then
    begin
      ends:=pos(']',richedit3.Text);
      richedit3.SelStart :=start;
      richedit3.SelLength :=ends-start-1;
      richedit3.SelAttributes.Name :='Kingsoft Phonetic Plain';
    end;
    richedit3.SelectAll ;
    richedit3.CopyToClipboard ;
    RConv.PasteFromClipboard;
    application.ProcessMessages;
  end;
end;

//程序退出
procedure TForm1.N3Click(Sender: TObject);
begin
  application.Terminate ;
end;

//復制 功能
procedure TForm1.N6Click(Sender: TObject);
begin
  RConv.SelectAll ;
  RConv.CopyToClipboard;
end;

//停止轉換
procedure TForm1.N8Click(Sender: TObject);
begin
  timer1.Enabled :=false;
end;

end.

好了,到此為止,全部的程序就設計完畢了。

如何運行:
   保證“金山詞霸 2002”和該程序一起運行,如果你使用其他版本的詞霸的話,請自行更改其中的查找句柄代碼,以實現支持其他版本。
  好了,我現在已經成功將這600個單詞翻譯完成,并用Word打印到紙上了,非常的快捷,如果你還有什么好的建議,歡迎回復!

如何獲得編譯好的可執行程序和源代碼:
  可以給我發電子郵件:redlegend@163.com
  或者登陸我的站點留言:http://redlegend.51.net


上一篇:UltraEdit也支持Delphi語法高亮

下一篇:DELPHI實現攝像頭拍照

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产噜噜噜噜噜久久久久久久久| 精品在线欧美视频| 91av在线国产| 久久久电影免费观看完整版| 亚洲欧洲在线视频| 亚洲人成电影网站色…| 国产丝袜一区二区| 亚洲欧美在线一区二区| 亚洲一区免费网站| 欧美日韩亚洲一区二区| 992tv成人免费视频| 日韩中文字幕第一页| 一区二区三区精品99久久| 综合网日日天干夜夜久久| 5278欧美一区二区三区| 亚洲精品久久久久久久久久久久久| 欧美激情网站在线观看| 欧美性xxxxhd| 久久躁狠狠躁夜夜爽| 成人黄色网免费| 国产精品一区二区性色av| 97欧美精品一区二区三区| 亚洲第一视频网| 欧美激情久久久| 精品国产欧美一区二区五十路| 欧美精品免费在线| 中日韩美女免费视频网址在线观看| 在线播放国产精品| 日韩国产高清污视频在线观看| 亚洲日韩欧美视频| 国产精品色婷婷视频| 精品久久久久国产| 最近2019中文免费高清视频观看www99| 久久久免费精品视频| 亚洲精品日韩在线| 欧美激情欧美狂野欧美精品| 精品国产一区二区三区久久狼黑人| 中文字幕av一区| 亚洲福利小视频| 福利二区91精品bt7086| 久久久久国产精品www| 国产精品入口夜色视频大尺度| 亚洲美女黄色片| 91丨九色丨国产在线| 欧美肥婆姓交大片| 久久久国产精品亚洲一区| 日韩免费观看视频| 亚洲色图50p| 国产精品免费小视频| 色偷偷偷亚洲综合网另类| 国产精品欧美在线| 欧美肥婆姓交大片| 国产精品第一第二| 一本一道久久a久久精品逆3p| 国产综合视频在线观看| 欧美激情乱人伦一区| 亚洲精品久久久久中文字幕欢迎你| 啪一啪鲁一鲁2019在线视频| 96精品久久久久中文字幕| 中文字幕精品一区久久久久| 久久久国产在线视频| 成人h猎奇视频网站| 亚洲一区二区三区xxx视频| 91精品国产高清久久久久久| 国产噜噜噜噜久久久久久久久| 久久久久久久久久久久av| 在线成人中文字幕| 久久免费精品日本久久中文字幕| 亚洲精品福利视频| 欧美视频裸体精品| 久久夜色精品国产欧美乱| 亚洲欧洲成视频免费观看| 成人国产精品久久久| 欧美日韩另类视频| 欧美日韩国产黄| 欧美裸体男粗大视频在线观看| 在线日韩av观看| 欧美日韩免费区域视频在线观看| 日韩亚洲欧美中文在线| 精品国产鲁一鲁一区二区张丽| 中文字幕久久久| 成人在线精品视频| 国产精品免费久久久| 色综合久久悠悠| 亚洲最大福利网| 国产一区二区三区直播精品电影| 欧美午夜女人视频在线| 亚洲第一区第一页| 日韩三级影视基地| 欧美老女人在线视频| 欧美日韩激情小视频| 国产91色在线播放| 亚洲一二在线观看| 亚洲香蕉av在线一区二区三区| 疯狂蹂躏欧美一区二区精品| 久久影视电视剧免费网站清宫辞电视| 日本免费在线精品| 亚洲色图狂野欧美| 亚洲国产中文字幕久久网| 欧美富婆性猛交| 国产在线久久久| 国产精品视频在线播放| 国产最新精品视频| 亚洲国产高潮在线观看| 亚洲一区二区久久| 亚洲性生活视频在线观看| 成人情趣片在线观看免费| 亚洲精品美女久久| 日韩成人在线视频观看| 国产成人午夜视频网址| 日本中文字幕不卡免费| 中文字幕av日韩| 久久久综合免费视频| 国产精品免费视频久久久| 久久精品美女视频网站| 久久精品亚洲94久久精品| 欧美xxxx14xxxxx性爽| 国产亚洲美女久久| 国外成人性视频| 亚洲香蕉伊综合在人在线视看| 亚洲人在线视频| 亚洲精品福利资源站| 亚洲午夜av久久乱码| 高清在线视频日韩欧美| 青青青国产精品一区二区| 97视频国产在线| 日韩美女视频中文字幕| 欧美性色xo影院| 欧美成人第一页| 91po在线观看91精品国产性色| 夜夜嗨av色一区二区不卡| 欧美亚洲在线视频| 正在播放欧美视频| 国产精品久久久久久av福利软件| 中文字幕9999| 亚洲xxxx视频| 国产综合在线观看视频| 亚洲欧美日韩高清| 亚洲欧美国产日韩中文字幕| 亚洲精品电影网站| 亚洲人精选亚洲人成在线| 韩国19禁主播vip福利视频| 国产在线999| 日韩中文有码在线视频| 欧美精品生活片| 久久久欧美一区二区| 97免费视频在线播放| 成人欧美一区二区三区黑人孕妇| 日韩av电影在线免费播放| 色狠狠久久aa北条麻妃| 91国内产香蕉| 久久综合免费视频| 久久不射热爱视频精品| 亚洲欧美精品suv| 日本中文字幕不卡免费| 91av在线不卡| 国产精品永久免费在线| 国内精品视频久久| 神马久久久久久| 亚洲色图第一页| 国产亚洲欧洲高清| 成人一区二区电影| 亚洲精品国偷自产在线99热| 中文字幕欧美专区|