Как я могу захватить клавиши-модификаторы при запуске приложения Delphi, чтобы вызвать некоторое поведение

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

  •  03-07-2019
  •  | 
  •  

Вопрос

Я пишу приложение на Delphi, которое использует базу данных SQLite3.Я хотел бы иметь возможность запускать приложение, удерживая некоторые клавиши-модификаторы, например CTRL + SHIFT, чтобы сигнализировать о повторной инициализации базы данных.

Как я могу зафиксировать, что приложение было запущено, пока эти ключи были удержаны?

Это было полезно?

Решение

У Тима есть правильный ответ, но вам может понадобиться немного больше фреймворка:

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;

Измените Button1Click на более позднее событие, которое проверяет, установлен ли fNeedReinit.Вы также можете установить KeyPreview в своей основной форме, если у вас возникли проблемы с распознаванием нажатия клавиши.Я только что протестировал приведенный выше код, и он работает, но если у вас есть заставка и т. д.тогда это может изменить ситуацию.

Другие советы

if (GetKeyState(VK_SHIFT) < 0) and (GetKeyState(VK_CONTROL) < 0) then
  ReinitializeDatabase;

Попробуйте один из GetAsyncKeyState, GetKeyState или GetKeyboardState Функции API для чтения текущего состояния клавиш Ctrl и Shift при запуске программы.Добавление перехвата клавиатуры при запуске может не сработать, поскольку события нажатия клавиш для клавиш Shift могли произойти до того, как ваше приложение сможет установить перехватчик.

Вам необходимо захватывать хуки клавиатуры в вашем приложении.Глянь сюдаа затем обработайте перехватчики перед отображением основной формы — например, перед CreateForm и Run в файле dpr.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top