Como controlar outras janelas de aplicativos no Delphi
Como controlar outras janelas de aplicativos no Delphi
Chen Jianbing, Faculdade de Gestão Agrícola de Guangdong
Escrever aplicações Delphi geralmente envolve operações em outras aplicações Windows. Por exemplo, em um sistema de gerenciamento de banco de dados, se o pessoal financeiro precisar usar uma calculadora, poderá chamar a função de calculadora incluída no Windows. Cada vez que a utilizar, deverá abrir a calculadora em "Iniciar/Programas/Acessórios/Calculadora". Obviamente, é muito complicado. Claro, você pode considerar criar um atalho para "Calculadora" na área de trabalho e definir uma tecla de atalho. Quando precisar usar a calculadora, pressione esta tecla de atalho para abrir a "Calculadora". Porém, como “Calculadora” é um programa de janela “não modal”, ou seja, toda vez que a calculadora for executada, uma janela “Calculadora” será aberta. O resultado é que dezenas de “calculadoras” aparecem na área de trabalho, não. apenas um grande número aumenta a sobrecarga de memória do sistema e é inconveniente para os usuários operarem. Pode ser facilmente controlado em Delphi e o efeito é perfeito. Os métodos de implementação são propostos abaixo para duas questões principais.
1. Como controlar o design?
Crie um novo formulário, coloque dois botões no formulário, suas legendas são "Abrir" (ou seja, iniciar a "calculadora") e "Fechar" (saída e final), e adicione o processamento do evento Click para eles respectivamente. Consulte o formulário Form1 e o arquivo de unidade Unit1 para obter detalhes.
Entre elas, as afirmações mais importantes são:
fwnd:=FindWindow('SciCalc','Calculadora');
O protótipo da função é (veja a ajuda do Delphi para detalhes):
HWND FindWindow(
LPCTSTR lpClassName, // ponteiro para o nome da classe
LPCTSTR lpWindowName // ponteiro para o nome da janela
);
Aqui, 'SciCalc' é o nome da classe da calculadora e 'Calculadora' é o título da janela da calculadora}
setWindowPos(fwnd,HWND_NOTOPMOST,0,0,0,0,SWP_SHOWWINDOW ou SWP_NOSIZE ou SWP_NOMOVE);
O protótipo da função é:
BOOL SetWindowPos(
HWND hWnd, // identificador da janela
HWND hWndInsertAfter, // identificador de ordem de posicionamento
int X, //posição horizontal
int Y, // posição vertical
int cx, // largura
int cy, // altura
UINT uFlags // sinalizadores de posicionamento de janela
);
ShowWindow(fwnd,SW_RESTORE); //Mostra a "calculadora" aberta
O protótipo da função é:
BOOL ShowWindow(
HWND hWnd, // identificador da janela
int nCmdShow // mostra o estado da janela
);
Ret:=WinExec('c:windowscalc.exe',SW_SHOWNORMAL); //Inicie a calculadora
O protótipo da função é:
UINT WinExec (
LPCSTR lpCmdLine, // endereço da linha de comando
UINT uCmdShow // estilo de janela para nova aplicação
);
Execute o programa Calculadora e verifique o valor de retorno (usando assim o valor de retorno para determinar possíveis erros)
2. Como esclarecer o “nome da classe” da aplicação?
Para controlar um aplicativo, você deve primeiro esclarecer o “nome da classe” do aplicativo. O conceito de "classe" já está muito claro nos programas Delphi. Por exemplo, crie um novo formulário Form1, e o "nome da classe" do formulário é TForm1. Então, como determinar o "nome da classe" de outros programas do Windows?
Felizmente, o Delphi fornece uma ferramenta prática chamada Winsight, que é como um espelho que revela os “nomes das classes” dos monstros onde quer que estejam.
Como usar o Winsight é o seguinte:
⑴ Execute o Winsight (o nome do programa é ws32.exe, no mesmo diretório do arquivo principal delphi32.exe), veja a Figura ①;
⑵ Selecione "Follow Focus" em "Spy" no menu Winsight, conforme mostrado na Figura ②;
⑶Execute o programa “calculadora”;
⑷O alvo é exibido no Winsight, conforme mostrado na Figura ③.
Ambiente de software: Chinês Win98/Chinês Delphi5.0.