Недавно я готовлюсь к экзамену CET-4 и получил документ DOC для «Высокочастотных слов класса» от моих одноклассников. Поэтому по одному вручную. Интерфейс программы выглядит следующим образом:
Принцип анализа:
Используйте функцию перевода «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 wroundwindowtotop (
Hwnd hwnd // Ручка формы
); // Принесите указанное окно в верхнюю часть
Bool setforegroundwindow (
Hwnd hwnd // ручка формы
);
Hwnd setfocus (
Hwnd hwnd // ручка сфокусированной формы
);
Void keybd_event (
Byte bvk, // код виртуального ключа
Byte bscan, // код аппаратного сканирования
DWORD DWFLAGS, // Флаги Указание различных параметров функции
Dword dwextrainfo // Дополнительные данные, связанные с клавишным
);
Здесь мы предоставляем заявление об базовом API, конкретных методах использования, и вы можете использовать другую соответствующую информацию.
Конкретный анализ:
Во -первых, используйте инструмент Spy ++ для анализа «Kingsoft PowerWord 2002», и результаты анализа следующие:
Название формы Kingsoft PowerWord 2002: Kingsoft PowerWord 2002
Kingsoft PowerWord 2002's Word Input Control Имя класса: редактировать (детская форма ComboBox )
Kingsoft PowerWord 2002 Результат перевода Имя класса управления: xdict_explainview
Интерфейс программы:
Управление таймером (таймер1, интервал которого составляет 3 секунды), контроль памятки (MLIST) и два элемента управления Richedit (RTRANS, RCONV), конкретный код заключается в следующем:
интерфейс
Использование
Windows, сообщения, Sysutils, варианты, классы, графика, управления, формы, диалоги, STDCTRLS, Comctrls, ClipBrd, кнопки, extctrls, меню;
тип
Tform1 = class (tform)
MLIST: TMEMO;
Rtrans: трихедит;
Баттон1: Tbutton;
Таймер1: Ттимер;
Button2: Tbutton;
Rconv: trichedit;
Button3: Tbutton;
OD: Tavendialog;
RichedIt3: Trichedit;
Mainmenu1: tmainmenu;
F1: tmenuitem;
N1: tmenuitem;
N2: tmenuitem;
N3: tmenuitem;
C1: tmenuitem;
N4: tmenuitem;
N5: tmenuitem;
RTF1: tmenuitem;
Панель1: Tpanel;
ProgressBar1: tprogressbar;
Splitter1: Tsplitter;
Splitter2: Tsplitter;
E1: tmenuitem;
N6: tmenuitem;
N7: tmenuitem;
N8: tmenuitem;
РЕДАКТИРОВАТЬ1: ТЕДИТ;
Label1: Tlabel;
Label2: Tlabel;
Label3: Tlabel;
процедура Button1click (отправитель: tobject);
Процедура таймер1Timer (отправитель: tobject);
процедура Button2click (отправитель: tobject);
процедура Button3click (отправитель: Tobject);
Процедура n3click (отправитель: tobject);
Процедура n6click (отправитель: tobject);
Процедура n8click (отправитель: tobject);
Частный
{Частные объявления}
публичный
{Публичные объявления}
конец;
вар
Форма1: tform1;
I: Integer = 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
Комбо, // Ручка окна ввода ввода слов //
РЕДАКТИРОВАТЬ, // Ручка ввода ввода слов
означает: Thandle; // Ручка отображения перевода
Начинать
Если я <= mlist.lines.count-1 тогда
Начинать
King: = findwindow (nil, pchar ('Kingsoft PowerWord 2002'));
Combo: = FindWindowex (King, 0, 'ComboBox', NIL);
РЕДАКТИРОВАТЬ: = FindWindowex (Combo, 0, 'Edit', Nil);
earry: = findwindowex (King, 0, 'xdict_explainview', nil);
// Информационный дисплей
label3.caption: = '('+inttoStr (i+1)+'/'+inttoStr (mlist.lines.count)+')'+mlist.lines [i];
// Информация о хранении
буфер обмена. astext: = mlist.lines [i];
ShowWindow (King, SW_SHOWNORMAL);
Принеситеветоутоп (король);
SetForegroundWindow (King);
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 (earge);
windows.setfocus (edge);
// моделирование Ctrl+A Select All
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 (earge);
windows.setfocus (edge);
// Моделируйте Ctrl+C Copy
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 ('===========================================================
ProgressBar1.stepit; // Прогнозируется бара перемещения
Inc (i); // увеличить количество
конец еще
Начинать
timer1.enabled: = false;
Rtrans.lines.savetofile ('temp.txt');
конец;
конец;
// Прочитайте список слов в mlist
Процедура tform1.button2click (отправитель: tobject);
Начинать
Если od.execute then
Mlist.lines.loadfromfile (od.filename);
конец;
// Функция преобразования, потому что фонетические символы не могут быть отображены правильно в переводе, полученном в rtrans
// Сначала необходимо установить шрифт фонетического равнины в каталоге шрифтов в Kingsoft PowerWord
// реализовать правильное отображение фонетических символов
Процедура tform1.button3click (отправитель: tobject);
вар
я: целое число;
начало, концы: целое число;
Начинать
Rconv.clear;
для i: = 0 до rtrans.lines.count-1 do
Начинать
richedit3.text: = rtrans.lines [i];
start: = pos ('[', richedit3.text); // Найти положение фонетического символа, фонетический символ находится в []
Если запустить> 0, тогда
Начинать
ENDS: = POS (']', RichEdit3.Text);
RichedIt3.selstart: = Start;
richedit3.sellength: = ends-start-1;
richedit3.selattributes.name: = 'Kingsoft Phonetic Plain';
конец;
richedit3.selectall;
richedit3.copytoclipboard;
RConv.PasteFromClipboard;
Application.ProcessMessages;
конец;
конец;
// Программа выход
Процедура tform1.n3click (отправитель: tobject);
Начинать
Application.Terminate;
конец;
// Копировать функцию
Процедура tform1.n6click (отправитель: tobject);
Начинать
Rconv.selectall;
Rconv.copytoclipboard;
конец;
// Остановить конверсию
Процедура tform1.n8click (отправитель: tobject);
Начинать
timer1.enabled: = false;
конец;
конец.
Хорошо, пока все программы разработаны.
Как бежать:
Убедитесь, что «Kingsoft PowerWord 2002» работает с этой программой.
ОК, я успешно перевел эти 600 слов и напечатал их на бумаге.
Как получить скомпилированные исполняемые программы и исходный код:
Вы можете прислать мне электронное письмо: [email protected]
Или войдите на мой сайт и оставьте сообщение: http://redlegend.51.net