Como posso capturar teclas modificadoras ao iniciar um aplicativo Delphi para forçar algum comportamento

StackOverflow https://stackoverflow.com/questions/207212

  •  03-07-2019
  •  | 
  •  

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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top