Recentemente, estou se preparando para o exame CET-4 e obtive um documento do DOC para "Palavras de alta frequência da classe 4" dos meus colegas de classe. Por um lado manualmente. A interface do programa é a seguinte:
Análise de princípios:
Use a função de tradução de "Kingsoft Powerword 2002" para traduzir palavras, use Delphi para obter o identificador do controle que traduz o resultado em "Kingsoft Powerword 2002" e use a função de pasta e copiar para obter os resultados da tradução.
Descrição da função da API:
Hwnd FindWindow (
LPCTSTR LPCLASSNAME, // o nome da classe do formulário a ser pesquisado
LPCTSTR LPWindowname // O nome do título do formulário a ser pesquisado
);
HWND FindWindowex (
HWND HWNDPARENT, // A alça da janela dos pais na qual a criança é pesquisada
HWND HWNDCHILDAFTER, // Comece a pesquisar após este formulário
LPCTSTR LPSZCLASS, // o nome da classe do formulário a ser pesquisado
LPCTSTR LPSZWindow // Nome do título do formulário a ser pesquisado
);
Bool Showwindow (
Hwnd hwnd, // a alça do formulário
int ncmdshow // como exibir o formulário
);
Bool BringWindowtotop (
HWND HWND // Handle of the Form
);
Bool SetforegroundWindow (
HWND HWND // o cabo do formulário
);
Hwnd setFocus (
HWND HWND // A alça da forma focada
);
Void keybd_event (
BYTE BVK, // Código Virtual-Key
Byte bscan, // Código de varredura de hardware
Dword dwflags, // sinalizadores especificando várias opções de função
Dword dwextrainfo // dados adicionais associados ao pressionamento de tecla
);
Aqui, fornecemos uma declaração da API básica, métodos de uso específicos e você pode usar outras informações relevantes.
Análise específica:
Primeiro, use a ferramenta SPY ++ para analisar "Kingsoft Powerword 2002", e os resultados da análise são os seguintes:
O nome da forma de Kingsoft Powerword 2002 é: Kingsoft Powerword 2002
POTENAÇÃO DE KINGSOFT 2002 Classe de controle de entrada de 2002 Nome: Editar (uma forma infantil de ComboBox )
Kingsoft Powerword 2002 Resultado de tradução Nome da classe: xdict_explainView
Interface do programa:
Um controle do timer (Timer1, cujo intervalo é de 3 segundos), um controle de memorando (MLIST) e dois controles de Richedit (RTRANS, RCONV), o código específico é o seguinte:
interface
usos
Janelas, mensagens, sysutils, variantes, classes, gráficos, controles, formulários, diálogos, stdctrls, comctrls, clipbrd, botões, extctrls, menus;
tipo
Tform1 = classe (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;
Painel1: tpanel;
ProgressBar1: TProgressBar;
Splitter1: Tsplitter;
Splitter2: tsplitter;
E1: tmenuitem;
N6: tmenuitem;
N7: tmenuitem;
N8: Tmenuitem;
Edit1: TEDIT;
Label1: Tlabel;
Label2: tlabel;
Label3: Tlabel;
Procedimento Button1Click (remetente: Tobject);
Procedimento Timer1timer (remetente: tabjas);
Procedimento Button2Click (remetente: Tobject);
Procedimento Button3Click (remetente: Tobject);
Procedimento N3Click (remetente: Tobject);
Procedimento N6Click (remetente: Tobject);
Procedimento N8Click (remetente: Tobject);
Privado
{Declarações privadas}
público
{Declarações públicas}
fim;
var
Form1: TForm1;
I: Integer = 0; // Declare uma variável global para memorização de palavras
Implementação
{$ R *.dfm}
// Inicie o evento de conversão
procedimento TForm1.Button1Click (remetente: TOBJECT);
Começar
Rtrans.clear; // limpe a área de conversão
Rconv.clear;
timer1.interval: = strtoint (edit1.text)*1000; // Defina o tempo de intervalo
timer1.enabled: = true; //
ProgressBar1.Position: = 0; // Defina o status da barra de progresso
i: = 0;
ProgressBar1.max: = mlist.lines.count;
fim;
procedimento TFFORM1.TIMER1TIMER (remetente: Tobject);
var
King, // Kingsoft Powerword 2002 Janela principal da janela
combinação, // Caixa de entrada da palavra Janela pai Janela da janela
editar, // identificador de caixa de entrada de palavras
Meios: THANDLE; // Tradução Display Janela Jange
Começar
Se i <= mlist.lines.count-1 então
Começar
rei: = findWindow (nil, pchar ('kingsoft powerword 2002'));
combinação: = findWindowex (rei, 0, 'combosbox', nil);
editar: = findWindowex (combinação, 0, 'editar', nil);
significa: = findWindowex (rei, 0, 'xdict_explainView', nil);
// Exibição de informações
LABEL3.CAPTION: = '('+inttostr (i+1)+'/'+inttostr (mlist.lines.count)+')'+mlist. lines [i];
// Informações de armazenamento
clipboard.astext: = mlist.lines [i];
Showwindow (rei, sw_shownormal);
BringWindowtotop (rei);
Setforegroundwindow (rei);
windows.setFocus (editar);
// Simule a pasta 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);
SetForeRoundWindow (significa);
windows.setFocus (significa);
// simulação ctrl+a selecionar tudo
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);
SetForeRoundWindow (significa);
windows.setFocus (significa);
// simular ctrl+c cópia
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);
// Simule a pasta 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; // BARRA DE PROGRESSO MOVES
Inc (i); // Aumente a contagem
fim mais
Começar
timer1.enabled: = false;
Rtrans.Lines.Savetofile ('temp.txt');
fim;
fim;
// Leia a lista de palavras no MLIST
procedimento TForm1.Button2Click (remetente: TOBJECT);
Começar
se od.execute então
Mlist.Lines.LoadFromFile (OD.FileName);
fim;
// Função de conversão, porque os símbolos fonéticos não podem ser exibidos corretamente na tradução obtida em rtrans
// você deve primeiro instalar a fonte plana fonética no diretório de fontes no Kingsoft Powerword
// implementa a exibição correta de símbolos fonéticos
Procedimento TForm1.Button3Click (remetente: Tobject);
var
I: Inteiro;
Iniciar, termina: Inteiro;
Começar
Rconv.clear;
para i: = 0 a rtrans.lines.count-1 do
Começar
richEdit3.text: = rtrans. lines [i];
Iniciar: = POS ('[', RichEdit3.Text); // Encontre a posição do símbolo fonético, o símbolo fonético está em []
Se Iniciar> 0 Então
Começar
termina: = pos (']', richedit3.text);
RichEdit3.SeLStart: = start;
RichEdit3.Sellength: = Ends-start-1;
RichEdit3.Selattributes.Name: = 'Kingsoft Phonetic Plain';
fim;
RichEdit3.Selecttall;
RichEdit3.CopyToclipboard;
Rconv.PasteFromClipboard;
Application.processMessages;
fim;
fim;
// Saída do programa
procedimento TForm1.N3Click (remetente: TOBJECT);
Começar
Application.Merminate;
fim;
// Função de cópia
procedimento TForm1.n6Click (remetente: TOBJECT);
Começar
Rconv.Selectall;
Rconv.copyToclipboard;
fim;
// Pare a conversão
procedimento TFform1.n8Click (remetente: TObject);
Começar
timer1.enabled: = false;
fim;
fim.
OK, até agora, todos os programas foram projetados.
Como correr:
Certifique -se de que "KingSoft Powerword 2002" seja executado com este programa.
Ok, traduzi com sucesso essas 600 palavras e as imprimi no papel.
Como obter programas executáveis compilados e código -fonte:
Você pode me enviar um e -mail: [email protected]
Ou faça login no meu site e deixe uma mensagem: http://redlegend.51.net