使用全局热键显示隐藏窗体

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 
=  class(TForm)
    
procedure  FormCreate(Sender: TObject);
    
procedure  WMHotKey( var  Msg: TWMHotKey); message WM_HOTKEY;
  private
    
{  Private declarations  }
  public
    
{  Public declarations  }
  
end ;

var
  Form1: TForm1;
  HotKeyId: Cardinal;

implementation

{ $R *.dfm }

procedure  TForm1.FormCreate(Sender: TObject);
const
  MOD_ALT 
=   1 ;
  MOD_CONTROL 
=   2 ;
  VK_R 
=   82 ;
begin
  
// Ctrl  +  Alt  +  S
  try
    HotKeyId :
=  GlobalAddAtom( ' MyHotKey ' -  $C000;
    RegisterHotKey(handle, HotKeyId, MOD_CONTROL 
+  MOD_ALT, VK_R);
  except

  
end ;
end ;

procedure  TForm1.WMHotKey( var  Msg: TWMHotKey);
begin
  
if  Msg.HotKey  =  HotKeyId  then
  
begin
    
if  Application.ShowMainForm  then
    
begin
      Application.ShowMainForm :
=  False;
    
end   else
    
begin
      Application.ShowMainForm :
=  True;
    
end ;
  
end ;
  
if  Self.Visible  then  Self.Visible : =  False
  
else  Self.Visible : =  True;
end ;

end .

转载于:https://www.cnblogs.com/jxgxy/archive/2011/07/29/2121086.html

WinForm全局热键控制是指在Windows应用程序中设置特定的键盘组合,当用户按下这个组合时,可以触发特定的行为,比如显示隐藏当前的窗体,或者改变其状态如最小化。在.NET Framework的WinForm环境中,你可以通过以下几个步骤实现这种功能: 1. **注册窗体事件**:首先,在窗体类中处理`KeyUp`或`KeyDown`事件,因为全局热键通常涉及的是按键释放而非按下。 ```csharp private void MainForm_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.F10) // 指定F10作为示例热键 { // 根据需要编写显示、最小化、最大化等操作的逻辑 ShowWindow(this.Handle, FormWindowState.Minimized); // 最小化窗口 } } ``` 2. **启用快捷键**:如果你的应用程序有多个窗体,可能还需要全局管理这个热键,这时可以在Application类上注册一个全局的`KeyUp`事件处理器,以便在整个应用范围内生效。 ```csharp Application.AddMessageFilter(new GlobalHotKeyManager()); // 自定义GlobalHotKeyManager 类来处理热键 // GlobalHotKeyManager.cs public class GlobalHotKeyManager : IMessageFilter { private bool _hotKeyPressed; public bool PreFilterMessage(ref Message m) { if (_hotKeyPressed && m.Msg == Win32Messages.WM_KEYUP) { ProcessMessage(m); return true; } return false; } private void ProcessMessage(Message message) { // 在这里检查并响应热键 if (message.WParam == (IntPtr)Keys.F10) { // ... 处理逻辑 } } } ``` 3. **注意事项**: - 使用全局热键时要考虑用户体验,避免与系统默认的热键冲突,比如Alt+Tab。 - 避免频繁切换窗体导致的混乱,可能需要加上适当的延迟和确认提示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值