我正在使用 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;
使用稍后的事件更改 Button1Click,以检查是否已设置 fNeedReinit。如果您无法捕捉到击键,您还可以在主窗体上设置 KeyPreview。我刚刚测试了上面的代码,它可以工作,但如果你有启动画面等,那么它可能会改变一些事情。
if (GetKeyState(VK_SHIFT) < 0) and (GetKeyState(VK_CONTROL) < 0) then
ReinitializeDatabase;
尝试GetAsyncKeyState、GetKeyState或GetKeyboardState API 函数之一,以在程序启动时读取 ctrl 和 shift 键的当前状态。在启动时添加键盘钩子可能不起作用,因为在您的应用程序有机会安装钩子之前,可能已经发生了 shift 键的按键事件。
您必须在应用程序中捕获键盘挂钩。 请参阅此处 ,然后在显示主表单之前处理挂钩 - 例如在 dpr 文件中的 CreateForm 和 Run 之前