Winapi:如何根据按下的键为我的按钮发送不同的消息?

Winapi : How do I for my button send different message according to the key pressed?

我创建了一个按钮,单击该按钮将打开一个 .exe 文件并关闭当前应用程序:

HWND Button = CreateWindowEx(0, L"Button", L"Exe Application", WS_BORDER | WS_VISIBLE | WS_CHILD, 500, 500, 200, 200, hWndParent, (HMENU)BUTTON_EXE, 0, 0); 

并且在 WindProc:

switch (uMsg)
{
    case WM_COMMAND:
        switch (wParam)
        {
        case BUTTON_EXE:
            ShellExecute(hwnd, NULL, L"Module 1.exe", NULL, NULL, SW_SHOW);
            PostQuitMessage(0);
            return 0;
        }
    return 0;
}

我希望当我点击带有按键的按钮时(例如,"maj"),当前应用程序不会关闭。

所以,我希望根据单击按钮时按下的键发送不同的消息,但我没有找到如何。有办法吗?

您可以对邮件进行额外的处理。例如:

  1. 您的按钮将发送另一条消息 (WM_BUTTON_EXE_RAW)。
  2. 如果仅按下按钮,您会收到该消息并重新发送其他消息 (BUTTON_EXE)。

您可以通过调用GetKeyState函数来检查在处理WM_COMMAND消息时是否按下了某个键。根据其 return 值,您可以实现不同的逻辑。

重要的是调用 GetKeyState(与 GetAsyncKeyState 相对)以获取单击按钮时的按键状态。