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

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

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


person Darrel    schedule 16.10.2008    source источник


Ответы (3)


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

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 в своей основной форме, если у вас есть проблемы с тем, чтобы поймать нажатие клавиши. Я только что протестировал приведенный выше код, и он работает, но если у вас есть заставка и т. д., это может изменить ситуацию.

person Jim McKeeth    schedule 16.10.2008

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

person Ates Goral    schedule 16.10.2008

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

person JamesSugrue    schedule 16.10.2008