最近、私はCET-4試験を準備しており、クラスメートから「クラス4の高頻度の単語」のドキュメントドキュメントを取得していますしたがって、手動では、DelphiとKingsoft Powerword 2002を使用して単語のバッチ翻訳を特別に作成し、翻訳結果をRTFファイルとして直接保存できます。プログラムインターフェイスは次のとおりです。
原則分析:
「Kingsoft Powerword 2002」の翻訳関数を使用して単語を翻訳し、Delphiを使用して「Kingsoft Powerword 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、//仮想キーコード
バイトbscan、 //ハードウェアスキャンコード
dword dwflags、 //さまざまな関数オプションを指定するフラグ
dword dwextrainfo //キーストロークに関連付けられた追加データ
); //キーの生成をシミュレートします
ここでは、基本的なAPI、特定の使用方法のステートメントを提供し、他の関連情報を使用できます。
特定の分析:
まず、Spy ++ツールを使用して「Kingsoft Powerword 2002」を分析します。分析結果は次のとおりです。
Kingsoft Powerword 2002の形式の名前は次のとおりです。
Kingsoft Powerword 2002の単語入力コントロールクラス名:編集(コンボボックスの子形式)
Kingsoft Powerword 2002の翻訳結果コントロールクラス名: XDICT_EXPLAINVIEW
プログラムインターフェイス:
タイマーコントロール(間隔が3秒であるTimer1)、メモコントロール(MLIST)、および2つのRichEditコントロール(RTRAN、RCONV)、特定のコードは次のとおりです。
インタフェース
用途
窓、メッセージ、sysutils、バリアント、クラス、グラフィック、コントロール、フォーム、ダイアログ、stdctrls、comctrls、clipbrd、ボタン、extctrls、メニュー。
タイプ
tform1 = class (tform)
mlist:tmemo;
rtrans:Trichedit;
Button1:Tbutton;
Timer1:Ttimer;
Button2:tbutton;
RCONV:Trichedit;
Button3:Tbutton;
OD:Tapendialog;
rithedit3:trichedit;
mainmenu1:tmainmenu;
F1:Tmenuitem;
N1:Tmenuitem;
N2:Tmenuitem;
N3:tmenuitem;
C1:Tmenuitem;
N4:Tmenuitem;
n5:tmenuitem;
rtf1:tmenuitem;
パネル:Tpanel;
ProgressBar1:Tprogressbar;
splitter1:tsplitter;
splitter2:tsplitter;
E1:tmenuitem;
N6:Tmenuitem;
N7:Tmenuitem;
N8:Tmenuitem;
編集1:tedit;
ラベル1:tlabel;
ラベル2:tlabel;
ラベル3:tlabel;
手順button1click(sender:tobject);
手順timer1timer(sender:tobject);
手順button2click(sender:tobject);
手順button3click(sender:tobject);
手順n3click(送信者:tobject);
手順n6click(送信者:tobject);
手順n8click(送信者:tobject);
プライベート
{プライベート宣言}
公共
{公開宣言}
終わり;
var
form1:tform1;
I:integer = 0; //単語の記憶のためにグローバル変数を宣言します
実装
{$ r *.dfm}
//変換イベントを開始します
手順tform1.button1click(sender:tobject);
始める
rtrans.clear; //変換領域をクリアします
rconv.clear;
Timer1.interval:= strtoint(edit1.text)*1000; //間隔時間を設定します
Timer1.Enabled:= true; //
ProgressBar1.Position:= 0; // Progress Barステータスを設定します
i:= 0; //カウントの初期化
Progressbar1.max:= mlist.lines.count;
終わり;
手順tform1.timer1timer(sender:tobject);
var
キング、// Kingsoft Powerword 2002メインウィンドウハンドル
コンボ、//ワード入力ボックス親ウィンドウハンドル
編集、//単語入力ボックスハンドル
平均:thandle; //翻訳ディスプレイウィンドウハンドル
始める
i <= mlist.lines.count-1の場合
始める
キング:= FindWindow (nil、pchar( 'Kingsoft Powerword 2002'));
コンボ:= FindWindowex (King、0、 'Combobox'、nil);
編集:= FindWindowex (Combo、0、 'Edit'、nil);
手段:= 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 (編集);
// 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 (手段);
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 (手段);
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( '==================================================================================
ProgressBar1.Stepit; // Progress Barの移動
Inc(i); //カウントを増やします
ENSEを終了します
始める
Timer1.Enabled:= false;
rtrans.lines.savetofile( 'temp.txt');
終わり;
終わり;
//単語リストをmlistに読み取ります
手順tform1.button2click(sender:tobject);
始める
od.executeの場合
mlist.lines.loadfromfile(od.filename);
終わり;
//変換機能、RTRANで得られた翻訳では音声記号を正しく表示できないため
//最初にKingsoft PowerWordのフォントディレクトリにPhonetic Plain Fontをインストールする必要があります
//音声記号の正しい表示を実装します
手順tform1.button3click(sender:tobject);
var
I:整数;
開始、終了:整数;
始める
rconv.clear;
i:= 0からrtrans.lines.count-1の場合
始める
rithedit3.text:= rtrans.lines [i];
start:= pos( '['、richedit3.text); //音声記号の位置を見つけ、音声記号は[]にあります
開始> 0の場合
始める
終了:= pos( ']'、rithedit3.text);
rithedit3.selstart:= start;
rithedit3.sellength:= end-start-1;
rithedit3.selattributes.name:= 'Kingsoft Phonetic Plain';
終わり;
rithedit3.selectall;
rithedit3.copytoclipboard;
rconv.pastefromclipboard;
application.processmessages;
終わり;
終わり;
//プログラム終了
手順tform1.n3click(sender:tobject);
始める
Application.Terminate;
終わり;
//関数をコピーします
手順tform1.n6click(sender:tobject);
始める
rconv.selectall;
rconv.copytoclipboard;
終わり;
//変換を停止します
手順tform1.n8click(sender:tobject);
始める
Timer1.Enabled:= false;
終わり;
終わり。
OK、これまでのところ、すべてのプログラムが設計されています。
実行方法:
「Kingsoft Powerword 2002」がこのプログラムで実行されていることを確認してください。
わかりました、私はこれらの600の単語を翻訳し、それはあなたが非常に速いものであるならば、それらを紙に印刷しました。
コンパイルされた実行可能プログラムとソースコードを取得する方法:
メールを送信できます:[email protected]
または私のサイトにログインしてメッセージを残します:http://redlegend.51.net