我使用VC++ CLR windows窗体创建一个图形用户界面,并希望做一个热键,我已经尽量减少系统盘恢复我的窗户。我发现RegisterHotKey
是一种在系统中创建全局热键的方法,但我不明白如何在代码中使用它。C++ CLR窗口形成RegisterHotKey恢复最小化窗口
有什么想法?
我使用VC++ CLR windows窗体创建一个图形用户界面,并希望做一个热键,我已经尽量减少系统盘恢复我的窗户。我发现RegisterHotKey
是一种在系统中创建全局热键的方法,但我不明白如何在代码中使用它。C++ CLR窗口形成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")
在#pragma确保链接器将链接导入库user32.dll中,需要链接RegisterHotKey()。
接下来,Form类里面,你需要重写OnHandleCreated()方法。只要窗体的本地窗口被创建,它就会运行,这可能会发生多次。做出这个样子:
protected:
virtual void OnHandleCreated(EventArgs^ e) override {
__super::OnHandleCreated(e);
RegisterHotKey((HWND)this->Handle.ToPointer(), 1,
MOD_ALT | MOD_CONTROL, (UINT)Keys::F1);
}
我硬编码的热键为Ctrl + Alt + F1,即更改为您要使用的一个。您可以添加更多热键,更改ID参数(第二个参数,我使用了1)。
然后,你需要检测WM_HOTKEY消息时,用户按下键,Windows将发送给您。通过最小化形式
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,你会看到窗口得到恢复,并移回前景:需要覆盖表单的WndProc()方法,像这样。
感谢您的帮助汉斯,我试图与代码,但它并没有真正的工作像我想它。我的计划将被最小化到系统托盘与下面的代码
private:
System::Void MyForm::MyForm_Resize(System::Object^ sender, System::EventArgs^ e) {
if (WindowState == FormWindowState::Minimized)
{
Hide();
}
}
如果我注释掉它隐藏,因为它最小化的一部分,它的工作,虽然罚款。
这听起来像你正在使用C++/CLI,而不是C++。如果是这样,你应该重申这个问题。 – IInspectable