registerHotKey で複数ホットキーを登録するには?
- 題名: registerHotKey で複数ホットキーを登録するには?
- 著者: Misono
- 日時: 2007/11/12 1:47:38
- ID: 20932
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: registerHotKey で複数ホットキーを登録するには?
- 著者: まどか
- 日時: 2007/11/12 2:47:25
- ID: 20933
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: registerHotKey で複数ホットキーを登録するには?
- 著者: まどか
- 日時: 2007/11/12 2:50:28
- ID: 20934
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: registerHotKey で複数ホットキーを登録するには?
- 著者: Misono
- 日時: 2007/11/12 9:57:38
- ID: 20938
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[3]: registerHotKey で複数ホットキーを登録するには?
- 著者: まどか
- 日時: 2007/11/12 11:36:30
- ID: 20941
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[4]: registerHotKey で複数ホットキーを登録するには?
- 著者: Misono
- 日時: 2007/11/12 21:40:40
- ID: 20952
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.NET]
はじめまして。Misonoと申します。
VB.Net2005 Win XP を使用して開発しています。
RegisterHotKey による複数のホットキーを登録する方法がわからず困っています
http://smdn.invisiblefulmoon.net/ikimasshoy/dotnettips/tips025.html
↑
別サイトの情報で大変申し訳ないのですが、
他に、どこできいたらよいかわからなかったので、お詳しい方々のいらっしゃるこちらへ投稿させていただくことにしました。
たとえば、ホーム1に「スタート」と「ストップ」というボタンを配置して、
スタートには Ctrl+1、ストップには Ctrl+2 を割り当てたいと思っております。
ところが、上記サイトのコードではホットキーを1つしか登録できないようなのです。
どのように書き換えれば複数のホットキーに対応できるようになるでしょうか?
MSDNや海外のサイトなども参照してみたのですが VB.net+複数ホットキーの情報がなく、困り果てています。よろしくお願いします。
Imports System.Runtime.InteropServices
Public Class Form1
Inherits System.Windows.Forms.Form
' ホットキーを登録する
<DllImport("user32", EntryPoint:="RegisterHotKey")> _
Private Shared Function RegisterHotKey( _
ByVal hWnd As IntPtr, _
ByVal id As Integer, _
ByVal fsModifier As Integer, _
ByVal vk As Integer) _
As Integer
End Function
' ホットキーを解除する
<DllImport("user32", EntryPoint:="UnregisterHotKey")> _
Private Shared Function UnregisterHotKey( _
ByVal hWnd As IntPtr, _
ByVal id As Integer) _
As Integer
End Function
' ホットキーの修飾キー
Private Const MOD_ALT As Byte = &H1
Private Const MOD_CONTROL As Byte = &H2
Private Const MOD_SHIFT As Byte = &H4
<Flags()> _
Private Enum KeyModifiers As Integer
None = 0
Alt = MOD_ALT
Control = MOD_CONTROL
Shift = MOD_SHIFT
End Enum
Dim id As Integer ' ホットキーのID
Dim lParam As IntPtr ' WndProc()メソッドでホットキーを識別するためのlParam値
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' Alt + Ctrl + Spaceをホットキーに指定する
RegisterHotKey(Me.Handle, Keys.Space, KeyModifiers.Alt Or KeyModifiers.Control, id, lParam)
End Sub
Private Sub Form1_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
' 指定したホットキーを解除する
UnregisterHotKey(Me.Handle, id)
End Sub
' ホットキーの設定を行う
Private Function RegisterHotKey(ByVal hWnd As IntPtr, ByVal key As Keys, ByVal modifier As KeyModifiers, ByRef id As Integer, ByRef lParam As IntPtr) As Boolean
' これらの値は戻り値として返される
id = CInt(key) Or CInt(modifier) * &H100
lParam = New IntPtr(CInt(modifier) Or CInt(key) * &H10000)
' ホットキーの指定
Dim result As Integer
result = RegisterHotKey(hWnd, id, CInt(modifier), CInt(key))
Return (result <> 0)
End Function
' ホットキーの入力メッセージを取得する
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
Const WM_HOTKEY As Integer = &H312
If m.Msg = WM_HOTKEY AndAlso m.LParam.Equals(lParam) Then
' フォームをアクティブにする
Me.Activate()
Else
' 基底クラスでのメッセージ処理
MyBase.WndProc(m)
End If
End Sub
#End Region
End Class