เมื่อเร็ว ๆ นี้ฉันกำลังเตรียมการสอบ CET-4 และได้รับเอกสารเอกสารสำหรับ "คำศัพท์ความถี่สูงระดับ 4 จากเพื่อนร่วมชั้นของฉัน ด้วยตนเองด้วยตนเอง อินเทอร์เฟซโปรแกรมมีดังนี้:
การวิเคราะห์หลักการ:
ใช้ฟังก์ชั่นการแปลของ "Kingsoft Powerword 2002" เพื่อแปลคำศัพท์ใช้ Delphi เพื่อรับที่จับของการควบคุมที่แปลผลลัพธ์ใน "Kingsoft Powerword 2002" และใช้ฟังก์ชั่นการวางและคัดลอกเพื่อรับผลการแปล
ฟังก์ชั่น API คำอธิบาย:
hwnd findwindow (
lpctstr lpclassname, // ชื่อคลาสของแบบฟอร์มที่จะค้นหา
lpctstr lpwindowname // ชื่อชื่อของแบบฟอร์มที่จะค้นหา
); // ค้นหาหน้าต่างลูกแรกที่ตรงกับเงื่อนไขที่ระบุ
hwnd findwindowex (
hwnd hwndparent, // ที่จับของหน้าต่างหลักที่เด็กถูกค้นหา
hwnd hwndchilder, // เริ่มค้นหาหลังจากแบบฟอร์มนี้
lpctstr lpszclass, // ชื่อคลาสของแบบฟอร์มที่จะค้นหา
lpctstr lpszwindow // ชื่อชื่อของแบบฟอร์มที่จะค้นหา
); // ค้นหาหน้าต่างลูกแรกที่ตรงกับเงื่อนไขที่ระบุในรายการฟอร์มที่ระบุ
บูล showwindow (
hwnd hwnd, // ที่จับของแบบฟอร์ม
int ncmdshow // วิธีการแสดงแบบฟอร์ม
); // ระบุการมองเห็นของหน้าต่าง
บูล Bringwindowtotop (
hwnd hwnd // จัดการของแบบฟอร์ม
); // นำหน้าต่างที่ระบุไปที่ด้านบนของรายการหน้าต่าง
บูล setforegroundwindow (
hwnd hwnd // ที่จับของแบบฟอร์ม
); // ตั้งหน้าต่างเป็นโปรแกรมเบื้องหน้าของระบบ
hwnd setfocus (
hwnd hwnd // ที่จับของแบบฟอร์มโฟกัส
);
เป็นโมฆะ keybd_event (
byte bvk, // รหัสเสมือนจริง
Byte Bscan, // รหัสสแกนฮาร์ดแวร์
dword dwflags, // flags ระบุตัวเลือกฟังก์ชั่นต่างๆ
dword dwextrainfo // ข้อมูลเพิ่มเติมที่เกี่ยวข้องกับการกดแป้นพิมพ์
); // จำลองการสร้างคีย์
ที่นี่เราให้คำแถลงเกี่ยวกับ API พื้นฐานวิธีการใช้งานเฉพาะและคุณสามารถใช้ข้อมูลที่เกี่ยวข้องอื่น ๆ ได้
การวิเคราะห์เฉพาะ:
ขั้นแรกให้ใช้เครื่องมือ Spy ++ เพื่อวิเคราะห์ "Kingsoft Powerword 2002" และผลการวิเคราะห์มีดังนี้:
ชื่อของรูปแบบของ Kingsoft Powerword 2002 คือ: Kingsoft Powerword 2002
Kingsoft Powerword 2002 Word Input Interct Class ชื่อ: แก้ไข (รูปแบบเด็กของ Combobox )
Kingsoft Powerword 2002 ผลการแปลชื่อคลาสควบคุมชื่อ: XDICT_ExplainView
อินเทอร์เฟซโปรแกรม:
การควบคุมตัวจับเวลา (ตัวจับเวลา 1 ซึ่งมีช่วงเวลา 3 วินาที), การควบคุมบันทึก (MLIST) และการควบคุม RICHEDIT สองตัว (RTRANS, RCONV), รหัสเฉพาะมีดังนี้:
ส่วนต่อประสาน
ใช้
Windows, ข้อความ, sysutils, ตัวแปร, คลาส, กราฟิก, การควบคุม, รูปแบบ, กล่องโต้ตอบ, stdctrls, comctrls, clipbrd, ปุ่ม, extctrls, เมนู;
พิมพ์
tform1 = คลาส (tform)
MLIST: TMEMO;
RTRANS: TRICHEDIT;
ปุ่ม 1: tbutton;
ตัวจับเวลา 1: ttimer;
button2: tbutton;
rconv: trichedit;
ปุ่ม 3: 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;
ขั้นตอน button1click (ผู้ส่ง: tobject);
ขั้นตอน Timer1Timer (ผู้ส่ง: tobject);
ขั้นตอน button2click (ผู้ส่ง: tobject);
ขั้นตอน button3click (ผู้ส่ง: tobject);
ขั้นตอน n3click (ผู้ส่ง: tobject);
ขั้นตอน n6click (ผู้ส่ง: tobject);
ขั้นตอน N8CLICK (ผู้ส่ง: TOBJECT);
ส่วนตัว
{ประกาศส่วนตัว}
สาธารณะ
{ประกาศสาธารณะ}
จบ;
วาจา
Form1: TFORM1;
i: จำนวนเต็ม = 0; // ประกาศตัวแปรทั่วโลกสำหรับการท่องจำคำ
การดำเนินการ
{$ r *.dfm}
// เริ่มเหตุการณ์การแปลง
ขั้นตอน tform1.button1click (ผู้ส่ง: tobject);
เริ่ม
rtrans.clear; // ล้างพื้นที่การแปลง
rconv.clear;
timer1.interval: = strtoint (edit1.text)*1000; // ตั้งเวลาช่วงเวลา
timer1.enabled: = true; //
ProgressBar1.Position: = 0; // ตั้งค่าสถานะแถบความคืบหน้า
i: = 0;
progressbar1.max: = mlist.lines.count;
จบ;
ขั้นตอน tform1.timer1timer (ผู้ส่ง: tobject);
วาจา
King, // Kingsoft Powerword 2002 หลักหน้าต่างหลัก
คอมโบ, // word input box window window window
แก้ไข, // ที่จับกล่องอินพุตคำ
หมายถึง: thandle; // หน้าจอแสดงผลการแปล
เริ่ม
ถ้า ฉัน <= mlist.lines.count -1 แล้ว
เริ่ม
KING: = FindWindow (Nil, Pchar ('Kingsoft Powerword 2002'));
คอมโบ: = findwindowex (King, 0, 'combobox', nil);
แก้ไข: = findWindowex (คอมโบ, 0, 'แก้ไข', ไม่มี);
หมายถึง: = 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 (ราชา);
SetforegroundWindow (ราชา);
Windows.SetFocus (แก้ไข);
// จำลอง ctrl+v paste
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 (หมายถึง);
// การจำลอง 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 (หมายถึง);
// จำลอง 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 paste
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; // progress bar moves
inc (i); // เพิ่มจำนวน
จบสิ้น
เริ่ม
timer1.enabled: = false;
rtrans.lines.savetofile ('temp.txt');
จบ;
จบ;
// อ่านรายการคำลงใน mlist
ขั้นตอน TFORM1.Button2Click (ผู้ส่ง: TOBJECT);
เริ่ม
ถ้า od.execute แล้ว
mlist.lines.loadfromfile (od.filename);
จบ;
// ฟังก์ชั่นการแปลงเนื่องจากสัญลักษณ์การออกเสียงไม่สามารถแสดงได้อย่างถูกต้องในการแปลที่ได้รับใน RTRANS
// คุณต้องติดตั้งตัวอักษรธรรมดาการออกเสียงในไดเรกทอรีฟอนต์ใน Kingsoft Powerword
// ใช้การแสดงสัญลักษณ์การออกเสียงที่ถูกต้อง
ขั้นตอน tform1.button3click (ผู้ส่ง: tobject);
วาจา
ฉัน: จำนวนเต็ม;
เริ่มต้นจบ: จำนวนเต็ม;
เริ่ม
rconv.clear;
สำหรับ i: = 0 ถึง rtrans.lines.count-1 ทำ
เริ่ม
Richedit3.Text: = rtrans.lines [i];
เริ่มต้น: = pos ('[', richedit3.Text); // ค้นหาตำแหน่งของสัญลักษณ์การออกเสียงสัญลักษณ์การออกเสียงอยู่ใน []
ถ้า เริ่ม> 0 แล้ว
เริ่ม
สิ้นสุด: = pos (']', richedit3.Text);
RICHEDIT.SSELSTART: = เริ่ม;
RICHEDIT3.Sellength: = สิ้นสุด-เริ่ม 1;
RICHEDIT3.SelAttributes.Name: = 'Kingsoft Phonetic Plain';
จบ;
RICKEDIT.SELECTALL;
RICHEDIT3.COPYTOCLIPBOARD;
rconv.pastefromclipboard;
Application.processMessages;
จบ;
จบ;
// ออกจากโปรแกรม
ขั้นตอน tform1.n3click (ผู้ส่ง: tobject);
เริ่ม
แอปพลิเคชันสิ้นสุด;
จบ;
// สำเนาฟังก์ชั่น
ขั้นตอน tform1.n6click (ผู้ส่ง: tobject);
เริ่ม
rconv.selectall;
rconv.copytoclipboard;
จบ;
// หยุดการแปลง
ขั้นตอน tform1.n8click (ผู้ส่ง: tobject);
เริ่ม
timer1.enabled: = false;
จบ;
จบ.
ตกลงจนถึงตอนนี้โปรแกรมทั้งหมดได้รับการออกแบบ
วิธีเรียกใช้:
ตรวจสอบให้แน่ใจว่า "Kingsoft Powerword 2002" ทำงานกับโปรแกรมนี้
ตกลงฉันได้แปล 600 คำเหล่านี้และพิมพ์ลงบนกระดาษเป็น Word สำเร็จ
วิธีรับโปรแกรมที่เรียกใช้งานได้และซอร์สโค้ดที่รวบรวมได้:
คุณสามารถส่งอีเมลถึงฉัน: [email protected]
หรือเข้าสู่เว็บไซต์ของฉันและฝากข้อความไว้: http://redlegend.51.net