핫키 매거 Winform 프로그램 전역 핫키와 국부 핫키(키보드 단축키 포획)
10653 단어 WinForm
Winform
Winform 프로그램의 전역 핫키는 일반적으로 윈도우즈api를 호출하는 상황을 사용하는데 주로 면 아래의 네 가지 함수를 통과한다
/// <summary>
/// , 0。
/// , 0。 , GetLastError。.NET :Marshal.GetLastWin32Error()
/// </summary>
/// <param name="hWnd"> </param>
/// <param name="id"> ID( ID ) </param>
/// <param name="fsModifiers"> Alt、Ctrl、Shift、Windows </param>
/// <param name="vk"> ,WinForm Keys ,
/// WPF Key , System.Windows.Forms.Keys , int </param>
/// <returns></returns>
[DllImport("user32.dll", SetLastError = true)]
public static extern bool RegisterHotKey(
IntPtr hWnd,
UInt32 id,
UInt32 fsModifiers,
UInt32 vk
);
///
////
////
win ctrl shift 등 특별한 키를 포함하는 단축키를 표시하는 도움말 클래스가 하나 더 있습니다.
/// <summary>
/// ( , )
/// </summary>
public enum KeyFlags
{
MOD_NONE = 0x0,
MOD_ALT = 0x1,
MOD_CONTROL = 0x2,
MOD_SHIFT = 0x4,
MOD_WIN = 0x8
}
위쪽 전체 코드 붙이기
매일 같은 이치
아버지는 아들에게 우뚝 솟은 높은 산이었고 아들은 돌멩이로 산에서 태어났지만 산을 이해하지 못했다.생활 속의 많은 사랑의 암호는 디테일하게 해석해야 한다. 친정의 옥토에서 가장 아름다운 열매를 맺으려면 순간에 존재하는 마음과 마음의 공감, 사랑과 사랑의 호흡을 기대해야 한다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Collections;
namespace luolunz
{
public delegate void HotkeyEventHandler(int hotKeyID);
public class HotkeyHelper : IMessageFilter
{
public event HotkeyEventHandler OnHotkey;
public enum KeyFlags
{
MOD_NONE=0x0,
MOD_ALT = 0x1,
MOD_CONTROL = 0x2,
MOD_SHIFT = 0x4,
MOD_WIN = 0x8
}
class NativeMethods
{
private NativeMethods() { }
#region WIN32 API
/// <summary>
/// , 0。
/// , 0。 , GetLastError。.NET :Marshal.GetLastWin32Error()
/// </summary>
/// <param name="hWnd"> </param>
/// <param name="id"> ID( ID ) </param>
/// <param name="fsModifiers"> Alt、Ctrl、Shift、Windows </param>
/// <param name="vk"> ,WinForm Keys ,
/// WPF Key , System.Windows.Forms.Keys , int </param>
/// <returns></returns>
[DllImport("user32.dll", SetLastError = true)]
public static extern bool RegisterHotKey(
IntPtr hWnd,
UInt32 id,
UInt32 fsModifiers,
UInt32 vk
);
/// <summary>
///
/// </summary>
/// <param name="hWnd"> </param>
/// <param name="id"> ID</param>
/// <returns></returns>
[DllImport("user32.dll", SetLastError = true)]
public static extern bool UnregisterHotKey(
IntPtr hWnd,
UInt32 id
);
/// <summary>
/// , , ID, 0
/// </summary>
/// <param name="lpString"></param>
/// <returns></returns>
[DllImport("kernel32", SetLastError = true)]
public static extern UInt32 GlobalAddAtom(string lpString);
/// <summary>
/// , , 0
/// </summary>
/// <param name="nAtom"></param>
/// <returns></returns>
[DllImport("kernel32", SetLastError = true)]
public static extern UInt32 GlobalDeleteAtom(UInt32 nAtom);
/// <summary>
/// ( , )
/// </summary>
public enum KeyFlags
{
MOD_NONE = 0x0,
MOD_ALT = 0x1,
MOD_CONTROL = 0x2,
MOD_SHIFT = 0x4,
MOD_WIN = 0x8
}
#endregion
}
Hashtable keyIDs = new Hashtable();
IntPtr hWnd;
public HotkeyHelper(IntPtr hWnd)
{
this.hWnd = hWnd;
Application.AddMessageFilter(this);
}
public UInt32RegisterHotkey(Keys Key, KeyFlags keyflags)
{
UInt32 hotkeyid = NativeMethods.GlobalAddAtom(System.Guid.NewGuid().ToString());
NativeMethods.RegisterHotKey((IntPtr)hWnd, hotkeyid, (UInt32)keyflags, (UInt32)Key);
keyIDs.Add(hotkeyid, hotkeyid);
return (UInt32)hotkeyid;
}
public void UnregisterHotkeys()
{
Application.RemoveMessageFilter(this);
foreach (UInt32 key in keyIDs.Values)
{
NativeMethods.UnregisterHotKey(hWnd, key);
NativeMethods.GlobalDeleteAtom(key);
}
}
public bool PreFilterMessage(ref Message m)
{
if (m.Msg == 0x312)
{
if (OnHotkey != null)
{
foreach (UInt32 key in keyIDs.Values)
{
if ((UInt32)m.WParam == key)
{
OnHotkey((int)m.WParam);
return true;
}
}
}
}
return false;
}
}
}
애플리케이션:
HotkeyHelper HotkeyHelper { set; get; }
UInt32 CONTROR_F;
UInt32 CONTROR_G;
UInt32 F10;
HotkeyHelper = new HotkeyHelper(this.Handle);
CONTROR_F = HotkeyHelper.RegisterHotkey(Keys.F, HotkeyHelper.KeyFlags.MOD_CONTROL | HotkeyHelper.KeyFlags.MOD_SHIFT);
CONTROR_G = HotkeyHelper.RegisterHotkey(Keys.G, HotkeyHelper.KeyFlags.MOD_CONTROL);
F10 = HotkeyHelper.RegisterHotkey(Keys.F10, 0);
HotkeyHelper.OnHotkey += new HotkeyEventHandler(OnHotkey);
private void OnHotkey(int hotkeyID)
{
if (hotkeyID == CONTROR_F)
{
//do something
MessageBox.Show("CONTROR_SHIT_F");
}
else if (hotkeyID == F10)
{
//do something else
MessageBox.Show("F10");
}
}
국부 핫키 (디스크 단축키 포획)
/// <summary>
///
/// </summary>
/// <param name="msg"></param>
/// <param name="keyData"></param>
/// <returns></returns>
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
KeyEventArgs e = new KeyEventArgs(keyData);
if (keyData == (Keys.Alt | Keys.P))
{
//do something
}
if (keyData == (Keys.Alt | Keys.C))
{
//do something
}
if (keyData == (Keys.Alt | Keys.A))
{
//do something
}
if (keyData == (Keys.Alt | Keys.Z))
{
//do something
}
if (keyData == (Keys.F1))
{
//do something
}
if (keyData == (Keys.F3))
{
//do something
}
return true;
}
글이 끝나면 프로그래머의 우스갯소리 어록을 공유해 드리겠습니다. 질문: 여자친구(또는 어떤 여자)를 당신과 이언홍 사이에서 고르라고 하면 누구를 뽑을 것 같아요?답: 이연홍 같은 망나니 여자친구가 없어!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WinForm Read Excel텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.