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;

使用稍后的事件更改 Button1Click,以检查是否已设置 fNeedReinit。如果您无法捕捉到击键,您还可以在主窗体上设置 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

尝试GetAsyncKeyStateGetKeyStateGetKeyboardState API 函数之一,以在程序启动时读取 ctrl 和 shift 键的当前状态。在启动时添加键盘钩子可能不起作用,因为在您的应用程序有机会安装钩子之前,可能已经发生了 shift 键的按键事件。

于 2008-10-16T03:03:43.960 回答
0

您必须在应用程序中捕获键盘挂钩。 请参阅此处 ,然后在显示主表单之前处理挂钩 - 例如在 dpr 文件中的 CreateForm 和 Run 之前

于 2008-10-16T02:26:51.773 回答