Winforms C++;CLR windows窗体注册表快捷键以还原最小化的窗口

Winforms C++;CLR windows窗体注册表快捷键以还原最小化的窗口,winforms,c++-cli,registerhotkey,Winforms,C++ Cli,Registerhotkey,我正在使用VC++CLR windows窗体创建一个GUI,并希望制作一个热键,从最小化的系统托盘中恢复我的窗口。我发现,RegisterHotKey是在系统中生成全局热键的一种方法,但我不知道如何在代码中使用它 有什么想法吗?首先,您需要包含Windows头文件,将其放入stdafx.h预编译头文件中,例如: // stdafx.h : include file for standard system include files, // or project specific include

我正在使用VC++CLR windows窗体创建一个GUI,并希望制作一个热键,从最小化的系统托盘中恢复我的窗口。我发现,
RegisterHotKey
是在系统中生成全局热键的一种方法,但我不知道如何在代码中使用它

有什么想法吗?

首先,您需要包含Windows头文件,将其放入stdafx.h预编译头文件中,例如:

// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
#pragma once

#include <Windows.h>
#pragma comment(lib, "user32.lib")
我将热键硬编码为Ctrl+Alt+F1,将其更改为您想要使用的热键。您可以添加其他热键,更改id参数(第二个参数,我使用了1)

然后,您需要检测当用户按键时windows将发送给您的WM_热键消息。这需要重写表单的WndProc()方法,如下所示:

protected:
    virtual void OnHandleCreated(EventArgs^ e) override {
        __super::OnHandleCreated(e);
        RegisterHotKey((HWND)this->Handle.ToPointer(), 1, 
            MOD_ALT | MOD_CONTROL, (UINT)Keys::F1); 
    }
protected:
    virtual void WndProc(Message% m) override {
        if (m.Msg == WM_HOTKEY && m.WParam.ToInt32() == 1) {
            this->WindowState = FormWindowState::Normal;
            this->BringToFront();
        }
        __super::WndProc(m);
    }

通过最小化窗体,按Ctrl+Alt+F1,您将看到窗口被还原并移回前台进行测试。

谢谢您的帮助,Hans,我尝试了代码,但它并没有像我希望的那样工作。我的程序将用下面的代码最小化到系统托盘中

private:
    System::Void MyForm::MyForm_Resize(System::Object^  sender, System::EventArgs^  e)  {
        if (WindowState == FormWindowState::Minimized)
        {
            Hide();
        }
    }

如果我注释了它隐藏的部分,它会最小化,但是它很好。

这听起来好像你使用的是C++ + CLI,不是C++。如果是这样,你应该重新标记问题。