启动时使用按键输入的 C++ 构建器程序

问题描述 投票:0回答:1

我想改变程序行为,无论是否存在可选键输入。我编写了 Form1 构造函数,如下所示:


bool controlled = false;

__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    if( GetKeyState(VK_LCONTROL) & 0x8000 ){
        Label1->Caption = "Left Control";
        controlled = true;
    }
    else
        controlled = false;

}

程序可以检测按键输入(例如,通过双击从 Windows 资源管理器启动时按下左 Control 键)。 但如果你使用键盘输入,程序将隐藏在最底部。并且表单处于非活动状态。 我使用了 win32 系统调用,例如 topmost.etc,在这种情况下,表单可以位于最上面,但仍然处于非活动状态。 我应该怎么做才能无缝运行。

我尝试了一些win32系统调用。

vcl
1个回答
0
投票

您似乎正在尝试根据启动过程中是否按下左控制键来更改程序的行为。但是,您面临着表单变得不活动并隐藏在最底层的问题。

为了确保无缝操作并保持表单的交互性,您可以使用 Windows API 中的

SetForegroundWindow
函数。该函数将指定的窗口带到前台并激活它。

以下是如何修改代码来实现此目的:

bool controlled = false;

__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    if (GetKeyState(VK_LCONTROL) & 0x8000) {
        Label1->Caption = "Left Control";
        controlled = true;
        
        // Bring the form to the foreground and activate it
        SetForegroundWindow(Handle);
    } else {
        controlled = false;
    }
}

通过使用

SetForegroundWindow(Handle);
,您可以确保表单被带到前台并变为活动状态。这应该有助于解决表单处于非活动状态并隐藏在后台的问题。

请记住,在初始化期间根据按键输入更改表单的行为可能会导致意外的用户体验。让用户以可预测且一致的方式与应用程序交互通常是一个很好的做法。请务必彻底测试您所做的任何更改,以确保它们不会对用户交互产生负面影响。

© www.soinside.com 2019 - 2024. All rights reserved.