[Avalonia] Global Hotkey 등록 with WPF
by #독개#WPF
public MainWindow()
{
InitializeComponent();
HotkeyManager.Current.AddOrReplace("설명넣는칸", Key.E, ModifierKeys.Control | ModifierKeys.Alt, OnIncrement);
}
private void OnIncrement(object? sender, HotkeyEventArgs e)
{
MessageBox.Show("kk");
}
Nhotkey.Wpf 누겟에서 설치하면된다
매우 사용하기쉽다
프로그램 종료시 자동으로 핫키 레지스트리까지 dispose해준다
Avalonia
그.. 그지같은 아발로니아.. 공식적으로 지원하지 않아 정말 돌고 돌아서 찾았다
스택플로우에 뭐 해킹해서 해야한다느니 이런 말들도 있었는데 다행히 해결할수 있었다
Githup주소 : https://github.com/HossamElwahsh/AvaloniaGlobalHotKeys
샘플에서 아발로니아를 보면 정확히 알수있다
Nuget : GlobalHotkeys.Windows
using System;
using System.Reactive.Linq;
using System.Threading;
using GlobalHotKeys.Native.Types;
using MyUtil;
namespace AvaloniaApplication4.ViewModels;
public class MainWindowViewModel : ViewModelBase
{
GlobalHotKeys.HotKeyManager hotkey; //Avalonia에도 HotKeyManager있어서 ambiguous에러때문에 직접그냥 설정
IDisposable shift1;
IDisposable hotkeyrun;
public void Button()
{
hotkey = new GlobalHotKeys.HotKeyManager();
shift1 = hotkey.Register(VirtualKeyCode.KEY_C, Modifiers.Control);
hotkeyrun = hotkey.HotKeyPressed.ObserveOn(SynchronizationContext.Current).Subscribe(hotKey =>
dosomething());
}
public void dosomething()
{
Messagebox.Show("핫키실행");
//Dispose를 해주지 않으면 프로그램이 종료되고도 레지스트리에 등록되어 윈도우에서 핫키를 사용할 수 없다
shift1.Dispose();
hotkeyrun.Dispose();
((IDisposable)hotkey).Dispose(); //구지 인스턴스는 가비지에서 해주지않나?
}
}
dispose작업을 직접해줘야하는 번거로움이 있다변수들을 static화 하한다음 앱이 끝날때 모두 한번에 해주는게 좋을듯
Wpf와 마찬가지로 앱이종료되면서 메모리를 반환할때 자동으로 해제된다
내가 컨트롤해야할때만 Dispose해주면된다
그래서 구지 Dispose로 컨트롤 해줄 필요가없을땐 이렇게 최종적으로 사용하면 된다
CtrlC = new GlobalHotKeys.HotKeyManager();
CtrlC.Register(VirtualKeyCode.KEY_C, Modifiers.Control);
CtrlC.HotKeyPressed.ObserveOn(SynchronizationContext.Current).Subscribe(hotKey => dosomething());
'🏹 프로그래밍 활용 > Avalonia' 카테고리의 다른 글
| [Avalonia] MainWindow Size = Auto 설정하기 (0) | 2022.12.23 |
|---|---|
| [Avalonia] ObservableCollection<T> ListBox, ListVew (0) | 2022.12.22 |
| [Avalonia] Open File Dialog Use Example (0) | 2022.12.20 |
| [Avalonia] Settings.Setting 사용하기 (0) | 2022.12.19 |
| [Avalonia] Execute , CanExecute (0) | 2022.12.19 |
블로그의 정보
독한 개발자
#독개#