4

SQLite3 データベースを使用する Delphi でアプリケーションを作成しています。データベースの再初期化を通知するために、CTRL + SHIFT などの修飾キーを押したままアプリケーションを起動できるようにしたいと考えています。

これらのキーが保持されている間にアプリケーションが開始されたことを取得するにはどうすればよいですか?

4

4 に答える 4

8

ティムは正しい答えを持っていますが、もう少しフレームワークが必要になるかもしれません:

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 を設定することもできます。上記のコードをテストしたところ動作しますが、スプラッシュ スクリーンなどがある場合は状況が変わる可能性があります。

于 2008-10-16T04:33:44.543 に答える
7
if (GetKeyState(VK_SHIFT) < 0) and (GetKeyState(VK_CONTROL) < 0) then
  ReinitializeDatabase;
于 2008-10-16T03:47:12.733 に答える
1

GetAsyncKeyStateGetKeyStateまたはGetKeyboardState API 関数のいずれかを試して、プログラムの起動時に ctrl および shift キーの現在の状態を読み取ってください。アプリケーションがフックをインストールする前にシフト キーのキー プレス イベントが発生する可能性があるため、起動時にキーボード フックを追加しても機能しない場合があります。

于 2008-10-16T03:03:43.960 に答える
0

アプリケーションでキーボード フックをキャプチャする必要があります。 ここ を参照してから、メイン フォームを表示する前にフックを処理します。たとえば、dpr ファイルの CreateForm と Run の前です。

于 2008-10-16T02:26:51.773 に答える