1

これを行う方法を見つけるのに苦労しています。

ユーザーがテンキーのキーを押すたびに、アプリケーションにメッセージボックスを表示させたいです。主な問題は、焦点が合っていないフォームで実行する必要があることです。VB.NETを使用してこれを行う方法が見つかりません

4

2 に答える 2

2

宣言する :

Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Integer) As Integer
Dim result As Integer

フォームロード:

Timer1.interval = 1
timer1.start()


Timer1.tick :

For i = 1 To 255 
result = 0 
result = GetAsyncKeyState (i)
If result = -32767 Then 
            If i = 103 Then
                MsgBox("Num 7")
            End If
End If 
Next i 

:)

于 2012-11-02T01:25:26.117 に答える
1

あなたが実際に話していることは、あなたのプログラムに向けられていないメッセージを聞きたいので、Global KeyboardHook と呼ばれます。これを .Net に実装する CodePlex ( Application and Global Mouse and Keyboard Hooks Library ) には素敵なライブラリがあります。

これは非常に簡単な例です。上記のライブラリをダウンロードMouseKeyboardActivityMonitorして、参照に追加する必要があります。

Imports MouseKeyboardActivityMonitor
Imports MouseKeyboardActivityMonitor.WinApi

Public Class Form1
    Private WithEvents myKeyboardHookManager As KeyboardHookListener
    Dim hookEnabled As Boolean
    Public Sub New()

        InitializeComponent()

        myKeyboardHookManager = New KeyboardHookListener(New GlobalHooker())
        myKeyboardHookManager.Enabled = True
    End Sub

    Private Sub HookManager_KeyDown(sender As Object, e As KeyEventArgs)
        Select Case e.KeyCode
            Case Keys.NumPad0 To Keys.NumPad9
                MessageBox.Show("KeyCode = " & e.KeyCode & vbCrLf & "Number = " & (e.KeyCode - 96))

        End Select


    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        If hookEnabled Then
            hookEnabled = False
            RemoveHandler myKeyboardHookManager.KeyDown, AddressOf HookManager_KeyDown
        Else
            hookEnabled = True
            AddHandler myKeyboardHookManager.KeyDown, AddressOf HookManager_KeyDown
        End If
    End Sub
End Class
于 2012-11-02T06:00:32.793 に答える