SQLite3 データベースを使用する Delphi でアプリケーションを作成しています。データベースの再初期化を通知するために、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;
fNeedReinit が設定されているかどうかを確認する後のイベントで Button1Click を変更します。キー ストロークをキャッチするのに問題がある場合は、メイン フォームに KeyPreview を設定することもできます。上記のコードをテストしたところ動作しますが、スプラッシュ スクリーンなどがある場合は状況が変わる可能性があります。
if (GetKeyState(VK_SHIFT) < 0) and (GetKeyState(VK_CONTROL) < 0) then
ReinitializeDatabase;
GetAsyncKeyState、GetKeyStateまたはGetKeyboardState API 関数のいずれかを試して、プログラムの起動時に ctrl および shift キーの現在の状態を読み取ってください。アプリケーションがフックをインストールする前にシフト キーのキー プレス イベントが発生する可能性があるため、起動時にキーボード フックを追加しても機能しない場合があります。
アプリケーションでキーボード フックをキャプチャする必要があります。 ここ を参照してから、メイン フォームを表示する前にフックを処理します。たとえば、dpr ファイルの CreateForm と Run の前です。