Como posso capturar teclas modificadoras ao iniciar um aplicativo Delphi para forçar algum comportamento
Pergunta
Eu estou escrevendo uma aplicação em Delphi que usa um banco de dados SQLite3. Eu gostaria de ser capaz de iniciar a aplicação, mantendo algumas teclas modificadoras, como CTRL + SHIFT, a reinicialização do sinal do banco de dados.
Como posso capturar que o aplicativo foi iniciado enquanto essas chaves foram realizadas?
Solução
Tim tem a resposta certa, mas você pode precisar de um quadro pouco mais:
procedure TForm56.Button1Click(Sender: TObject);
begin
if fNeedReinit then
ReinitializeDatabase;
end;
procedure TForm56.FormCreate(Sender: TObject);
begin
fNeedReinit := False;
end;
procedure TForm56.FormShow(Sender: TObject);
begin
fNeedReinit := (GetKeyState(VK_SHIFT) < 0) and (GetKeyState(VK_CONTROL) < 0);
end;
Alterar Button1Click com seu evento mais tarde que verifica se fNeedReinit foi definido. Você também pode definir KeyPreview no formulário principal, se você tiver problemas para começá-lo para pegar o curso chave. Eu só testei o código acima e ele funciona, mas se você tiver uma tela de abertura, etc., então pode mudar as coisas.
Outras dicas
if (GetKeyState(VK_SHIFT) < 0) and (GetKeyState(VK_CONTROL) < 0) then
ReinitializeDatabase;
Tente um dos GetAsyncKeyState , < a href = "http://msdn.microsoft.com/en-us/library/ms646301(VS.85).aspx" rel = "nofollow noreferrer"> GetKeyState ou funções API GetKeyboardState para ler o estado atual das teclas CTRL e SHIFT no início do programa . Adicionando um gancho de teclado na inicialização pode não trabalho desde os eventos de imprensa chave para as teclas shift poderia ter ocorrido antes de sua aplicação tem a chance de instalar o gancho.
Você tem que ganchos de teclado de captura em sua aplicação. Veja aqui e depois processar os ganchos antes de mostrar a forma principal - por exemplo, antes da CreateForm and Run no arquivo de dpr