Delphi例程源码利用Delphi和金山词霸制作批量单词翻译.docx
- 文档编号:18009995
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:10
- 大小:17.10KB
Delphi例程源码利用Delphi和金山词霸制作批量单词翻译.docx
《Delphi例程源码利用Delphi和金山词霸制作批量单词翻译.docx》由会员分享,可在线阅读,更多相关《Delphi例程源码利用Delphi和金山词霸制作批量单词翻译.docx(10页珍藏版)》请在冰点文库上搜索。
Delphi例程源码利用Delphi和金山词霸制作批量单词翻译
利用Delphi和金山词霸制作批量单词翻译
有些文档只有单词并没有音标和解释,如果进行人工个个翻译很是费事,因此有人利用Delphi和金山词霸2002特别制作了个单词批量翻译,并且可以将翻译结果直接保存为RTF文件。
原理分析
利用“金山词霸2002”翻译功能,进行单词翻译利用Delphi获取“金山词霸2002”中翻译结果Control控件句柄,利用粘贴复制功能即可以获得翻译结果了。
API介绍说明
HWNDFindWindow(
LPCTSTRlpClassName,//欲搜索窗体类名
LPCTSTRlpWindowName//欲搜索窗体标题名称
);//查找和指定条件相符第个子窗口
HWNDFindWindowEx(
HWNDhwndParent,//在其中查找子父窗口句柄
HWNDhwndChildAfter,//从这个窗体后开始查找
LPCTSTRlpszClass,//欲搜索窗体类名
LPCTSTRlpszWindow//欲搜索窗体标题名称
);//在指定窗体列表中查找和指定条件相符第个子窗口
BOOLShowWindow(
HWNDhWnd,//窗体句柄
nCmdShow//窗体显示方式
);//指定窗口可见性
BOOLBringWindowToTop(
HWNDhWnd//窗体句柄
);//将指定窗口带至窗口列表顶部
BOOLSetForegroundWindow(
HWNDhWnd//窗体句柄
);//将窗口设为系统前台
HWNDSetFocus(
HWNDhWnd//聚焦窗体句柄
);//将窗口聚焦
VOIDkeybd_event(
BYTEbVk,//virtual-keycode
BYTEbScan,//hardwarescancode
DWORDdwFlags,//flagsspecyingvariousfunctionoptions
DWORDdwExtraInfo//additionaldataassociatedwithkeystroke
);//模拟按键产生
这里提供了基本Api声明具体使用思路方法你可以其它相关资料
具体分析
首先利用Spy工具对“金山词霸2002”进行分析分析结果如下
金山词霸2002窗体名称是金山词霸2002
金山词霸2002单词输入Control控件类名Edit (属于Combobox子窗体)
金山词霸2002翻译结果Control控件类名XDICT_ExplainView
界面
个TimerControl控件(Timer1其间隔时间为3秒)个MemoControl控件(MList)两个RichEditControl控件
(RTransRConv)具体代码如下
unitUnit1;
erface
uses
Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,ComCtrls,
Clipbrd,Buttons,ExtCtrls,Menus;
type
TForm1=(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;
procedureButton1Click(Sender:
TObject);
procedureTimer1Timer(Sender:
TObject);
procedureButton2Click(Sender:
TObject);
procedureButton3Click(Sender:
TObject);
procedureN3Click(Sender:
TObject);
procedureN6Click(Sender:
TObject);
procedureN8Click(Sender:
TObject);
private
{Privatedeclarations}
public
{Publicdeclarations}
end;
var
Form1:
TForm1;
i:
eger=0;//声明个全局变量用于单词记数
implementation
{$R*.dfm}
//开始转换事件
procedureTForm1.Button1Click(Sender:
TObject);
begin
RTrans.Clear;//清空转换区
RConv.Clear;
timer1.Interval:
=strto(edit1.Text)*1000;//设置间隔时间
timer1.Enabled:
=true;//
progressbar1.Position:
=0;//设置进度条状态
i:
=0;//化变量用于记数
progressbar1.Max:
=MList.Lines.Count;
end;
procedureTForm1.Timer1Timer(Sender:
TObject);
var
King,//金山词霸2002主窗口句柄
combo,//单词输入框父窗口句柄
edit,//单词输入框句柄
means:
thandle;//翻译显示窗口句柄
begin
i<=MList.Lines.Count-1then
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:
=\'(\'+tostr(i+1)+\'/\'+tostr(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
begin
timer1.Enabled:
=false;
RTrans.Lines.SaveToFile(\'Temp.txt\');
end;
end;
//读取单词列表到Mlist中
procedureTForm1.Button2Click(Sender:
TObject);
begin
od.Executethen
MList.Lines.LoadFromFile(od.FileName);
end;
//转换功能RTrans中得到翻译中音标还不可以正确显示
//必须先安装金山词霸中Font目录中PhoneticPlain字体
//实现音标正确显示
procedureTForm1.Button3Click(Sender:
TObject);
var
i:
eger;
start,ends:
eger;
begin
RConv.Clear;
fori:
=0toRTrans.Lines.Count-1do
begin
richedit3.Text:
=RTrans.Lines[i];
start:
=pos(\'[\',richedit3.Text);//查找音标位置音标在中
start>0then
begin
ends:
=pos(\']\',richedit3.Text);
richedit3.SelStart:
=start;
richedit3.SelLength:
=ends-start-1;
richedit3.SelAttributes.Name:
=\'KingsoftPhoneticPlain\';
end;
richedit3.SelectAll;
richedit3.CopyToClipboard;
RConv.PasteFromClipboard;
application.ProcessMessages;
end;
end;
//退出
procedureTForm1.N3Click(Sender:
TObject);
begin
application.Terminate;
end;
//复制功能
procedureTForm1.N6Click(Sender:
TObject);
begin
RConv.SelectAll;
RConv.CopyToClipboard;
end;
//停止转换
procedureTForm1.N8Click(Sender:
TObject);
begin
timer1.Enabled:
=false;
end;
end.
好了到此为止全部就设计完毕了。
如何运行:
保证“金山词霸2002”运行,如果你使用其他版本词霸,请自行更改其中查找句柄代码以实现支持其他版本。
好了我现在已经成功将这600个单词翻译完成并用Word打印到纸上了非常快捷如果你还有什么好建议欢迎
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Delphi 例程 源码 利用 金山词霸 制作 批量 单词 翻译