►index

     スポンサーサイト

    --------

    上記の広告は1ヶ月以上更新のないブログに表示されています。
    新しい記事を書く事で広告が消せます。

     VB.NET フォームの外のキーイベント(ホットキー)の取得

    2013-02-24

    Module mHotKeys

    'Apiの定義

    Public Declare Function RegisterHotKey Lib "user32" _

    (ByVal hwnd As IntPtr, ByVal id As Integer, _

    ByVal fsModifiers As Integer, ByVal vk As Keys) As Integer

    Public Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As IntPtr, _

    ByVal id As Integer) As Integer

    Public Declare Function GlobalAddAtom Lib "kernel32" Alias "GlobalAddAtomA" _

    (ByVal lpString As String) As Short

    Public Declare Function GlobalDeleteAtom Lib "kernel32" (ByVal nAtom As Short) As Short

    Public Const MOD_ALT As Integer = &H1

    Public Const MOD_CONTROL As Integer = &H2

    Public Const MOD_SHIFT As Integer = &H4

    Public Const MOD_WIN As Integer = &H8

    Public Const WM_HOTKEY As Integer = &H312

     

    Public hotkeyID_T As Short '(Ctrl + Shift + T )

    Public hotkeyID_D As Short '(Ctrl + Shift + D )

    Public hotkeyID_A As Short '(Ctrl + Shift + A )

     

    End Module

     

    Private Sub fMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

     

    '===========================================================================

    ' HotKey Id 生成

    '===========================================================================

    ' ホットキー(Ctrl+Shit+T)の唯一無二のIDを生成する

    hotkeyID_T = GlobalAddAtom("GlobalHotKey_T " & Me.GetHashCode().ToString())

    ' レジスターに「Ctrl+Shit+T」を登録する

    RegisterHotKey(Me.Handle, hotkeyID_T, MOD_CONTROL Or MOD_SHIFT, Keys.T)

     

    ' ホットキー(Ctrl+Shit+D)の唯一無二のIDを生成する

    hotkeyID_D = GlobalAddAtom("GlobalHotKey_D " & Me.GetHashCode().ToString())

    ' レジスターに「Ctrl+Shit+D」を登録する

    RegisterHotKey(Me.Handle, hotkeyID_D, MOD_CONTROL Or MOD_SHIFT, Keys.D)

     

    ' ホットキー(Ctrl+Shit+A)の唯一無二のIDを生成する

    hotkeyID_A = GlobalAddAtom("GlobalHotKey_A " & Me.GetHashCode().ToString())

    ' レジスターに「Ctrl+Shit+A」を登録する

    RegisterHotKey(Me.Handle, hotkeyID_A, MOD_CONTROL Or MOD_SHIFT, Keys.A)

     

    End Sub

     

    Private Sub fMain_FormClosing(ByVal sender As Object, ByVal e _ 

         As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing

     

    ' ホットキー(Ctrl+Shit+T)の登録を解除し、アトムを削除する

    UnregisterHotKey(Me.Handle, hotkeyID_T)

    GlobalDeleteAtom(hotkeyID_T)

     

    ' ホットキー(Ctrl+Shit+D)の登録を解除し、アトムを削除する

    UnregisterHotKey(Me.Handle, hotkeyID_D)

    GlobalDeleteAtom(hotkeyID_D)

     

    ' ホットキー(Ctrl+Shit+A)の登録を解除し、アトムを削除する

    UnregisterHotKey(Me.Handle, hotkeyID_A)

    GlobalDeleteAtom(hotkeyID_A)

     

    End Sub

     

    Protected Overrides Sub WndProc(ByRef m As Message)

    MyBase.WndProc(m)

    'ホットキーが押された時の処理

    If m.Msg = WM_HOTKEY Then

       Select Case m.WParam

       Case hotkeyID_T ' CTRL+Shift+T

            Debug.print(“CTRL+Shift+T 押下時の処理)

       Case hotkeyID_D ' CTRL+Shift+D

            Debug.print(“CTRL+Shift+D 押下時の処理)

       Case hotkeyID_A ' CTRL+Shift+A

            Debug.print(“CTRL+Shift+A 押下時の処理)

       End Select

    End If

    End Sub



    参考文献:http://www.itmedia.co.jp/enterprise/articles/0412/07/news034_4.html

    トラックバック

    コメントの投稿

    非公開コメント

    PR
    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。