【问题标题】:How can I capture modifier keys while starting a Delphi app to force some behavior如何在启动 Delphi 应用程序时捕获修饰键以强制执行某些行为
【发布时间】:2010-09-17 10:59:49
【问题描述】:

我正在用 Delphi 编写一个使用 SQLite3 数据库的应用程序。我希望能够在按住某些修饰键(例如 CTRL + SHIFT)的同时启动应用程序,以发出重新初始化数据库的信号。

我如何才能在持有这些键时捕获应用程序已启动?

【问题讨论】:

    标签: delphi sqlite


    【解决方案1】:

    Tim 有正确的答案,但您可能需要更多框架:

    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。我刚刚测试了上面的代码,它可以工作,但如果你有启动画面等,那么它可能会改变一些事情。

    【讨论】:

      【解决方案2】:
      if (GetKeyState(VK_SHIFT) < 0) and (GetKeyState(VK_CONTROL) < 0) then
        ReinitializeDatabase;
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          您必须在应用程序中捕获键盘挂钩。 See Here 然后在显示主窗体之前处理钩子 - 例如在 dpr 文件中的 CreateForm 和 Run 之前

          【讨论】:

            猜你喜欢
            • 2011-11-23
            • 2015-07-23
            • 1970-01-01
            • 2023-03-16
            • 1970-01-01
            • 1970-01-01
            • 2017-12-18
            • 1970-01-01
            • 2010-10-22
            相关资源
            最近更新 更多