Windows, F# - 글로벌 핫키 설정
개요
부팅하는 동안 F#을 사용하여 전 세계 핫키를 효과적으로 만드는 작업 트레이 상주형 응용 프로그램을 제작한다.
설치 예
"
Windows
+ Alt
+ C
"를 입력할 때 빈 메시지 상자의 견본을 표시합니다.open System.Windows.Forms
let createIcon () =
let toolStripMenuItem = new ToolStripMenuItem(Text = "&終了")
toolStripMenuItem.Click.Add(fun e -> Application.Exit())
let contextMenuStrip = new ContextMenuStrip()
contextMenuStrip.Items.Add toolStripMenuItem |> ignore
new NotifyIcon(
Icon = new System.Drawing.Icon @"icon.ico",
Visible = true,
Text = "TestApp",
ContextMenuStrip = contextMenuStrip
)
open System
open System.Runtime.InteropServices
[<DllImport("user32.dll")>]
extern int RegisterHotKey(IntPtr HWnd, int ID, int MOD_KEY, int KEY)
[<DllImport("user32.dll")>]
extern int UnregisterHotKey(IntPtr HWnd, int ID)
type HotkeyForm () as this =
inherit Form()
let icon = createIcon()
do
RegisterHotKey(this.Handle, 0x0000, 0x0001 ||| 0x0008, int Keys.C) |> ignore
Application.ApplicationExit.Add(fun e ->
UnregisterHotKey(this.Handle, 0x0000) |> ignore
)
override this.WndProc m =
base.WndProc(&m)
if m.Msg = 0x0312 && int m.WParam = 0x0000 then
MessageBox.Show("") |> ignore
interface IDisposable with
member this.Dispose() =
icon.Dispose()
do
use form = new HotkeyForm()
Application.Run()
해설
System.Windows.Forms
.NET5에서 참조할 수 없는 경우 다음 기사에서 설정 방법을 설명합니다.
작업 트레이에 아이콘 표시
open System.Windows.Forms
let createIcon () =
// アイコンをホバーした時に表示されるメニューの定義
// - クリックしたらアプリを終了する「終了」ボタンの作成
let toolStripMenuItem = new ToolStripMenuItem(Text = "&終了")
toolStripMenuItem.Click.Add(fun e -> Application.Exit())
// - メニューに「終了」ボタンを追加
let contextMenuStrip = new ContextMenuStrip()
contextMenuStrip.Items.Add toolStripMenuItem |> ignore
// アイコンの生成
new NotifyIcon(
// 表示する画像 (.ico)
Icon = new System.Drawing.Icon @"icon.ico",
// 表示/非表示
Visible = true,
// ホバー時に表示するテキスト (アプリ名など)
Text = "TestApp",
// 上で作成したメニューを追加
ContextMenuStrip = contextMenuStrip
)
전역 바로 가기 키 설정
// System.Windows.Forms は前の部分で読み込み済み
open System
open System.Runtime.InteropServices
// Windows API
// - ホットキーの登録用
[<DllImport("user32.dll")>]
extern int RegisterHotKey(IntPtr HWnd, int ID, int MOD_KEY, int KEY)
// - ホットキーの解除用
[<DllImport("user32.dll")>]
extern int UnregisterHotKey(IntPtr HWnd, int ID)
type HotkeyForm () as this =
inherit Form()
let icon = createIcon()
do
// ホットキーを登録する
RegisterHotKey(this.Handle, 0x0000, 0x0001 ||| 0x0008, int Keys.C) |> ignore
// アプリ終了時にホットキーを解除する
Application.ApplicationExit.Add(fun e ->
UnregisterHotKey(this.Handle, 0x0000) |> ignore
)
override this.WndProc m =
base.WndProc(&m)
// グローバルホットキーが入力された時の処理
// && の左辺は固定
if m.Msg = 0x0312 && int m.WParam = 0x0000 then
MessageBox.Show("") |> ignore
interface IDisposable with
member this.Dispose() =
icon.Dispose()
바로 가기 키 로그인
RegisterHotKey
보조 매개변수
전달
0x0000
~0xbfff
내의 적당한 값.또한 다음 부분은 같은 값을 사용합니다.UnregisterHotKey
의 두 번째 파라미터WndProc
내int m.WParam
와의 등효판정수정키
Alt
,Ctrl
,Shift
,Windows
의 지정.여러 상황에서
|||
로 격리하다.손질 키
값
Alt
0x0001
Ctrl
0x0002
Shift
0x0004
Windows
0x0008
네 번째 매개변수
키 코드를 지정합니다.
int Keys.キー
에서 얻을 수 있다.실행
do
use form = new HotkeyForm()
// フォームを表示しない場合、引数なしで実行
Application.Run()
역사를 갱신하다
일자
컨텐트
2021/03/25
호출
Dispose
의 처리를 추가합니다.end
Reference
이 문제에 관하여(Windows, F# - 글로벌 핫키 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/shikatan/articles/f6c4c52c134b61텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)