Получить функцию состояния ключа без использования DLL - PullRequest
0 голосов
/ 03 ноября 2011

Мне нужны коды для vb.net Getkeystate Function () без использования DLL. Я новичок в преобразовании API из vb в vb.net. В vb6 они используют user32 DLL. В Vb.Net мне нужно вызвать функцию Getkeystate. без этой функции "User32.dll". Кто-нибудь может опубликовать мне коды без использования DLL? Есть ли способ получить состояние ключа без использования этой функции DLL Getkeystate в vb.net ..? если эквивалентен кому-либо, значит, покажите мне, что коды. с этими кодами должны работать в .net framework.

В.Б:

Private Declare Function GetKeyState Lib "user32.dll" (ByVal nVirtKey As Long) As Integer
Dim keystate As Long
keystate = GetKeyState(27)
MsgBox keystate

vb.net

Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
On Error Resume Next
Dim KeyState As Long
KeyState = GetAsyncKeyState(17)
MsgBox(KeyState

Ответы [ 3 ]

1 голос
/ 03 ноября 2011

Для 17, клавиша Control (Ctrl), используйте My.Computer.Keyboard.CtrlKeyDown.

Вы также можете использовать System.Windows.Forms.Control.ModifierKeys или класс Keyboard.Но гораздо проще использовать пространство имен My.

Для 27, клавиша Escape (Esc), вы должны использовать вызов Windows API.См. GetKeyState function в http://msdn.microsoft.com/en-us/library/ms646301.aspx

Проверка для Esc на самом деле не требуется с System.Windows.Form.Form.Просто добавьте кнопку «Отмена» и установите свойство формы CancelButton.Если вам нужно больше контроля, обработайте одно из событий Key;KeyUp, KeyDown, KeyPress или PreviewKeyDown.

1 голос
/ 03 ноября 2011

Вам либо нужно вызывать Windows API, либо нет - и я не уверен, что из вашего вопроса вы понимаете, что означает использование DLL / вызов Windows API. User32.dll - это часть окна, и вызов функции внутри нее на самом деле требует, чтобы окна выполнили функцию за вас. Вы хотите заменить функцию или просто преобразовать вызов в vb.net?

Если вам нужно всего лишь преобразовать вызов в vb.net, вы можете использовать PInvoke вызов Windows API.

вот пример с этой страницы:

<DllImport("user32.dll", SetLastError := True, CharSet := CharSet.Unicode)> _
Private Function GetKeyState (ByVal nVirtKey As KeyStates) As Short
End Function

Imports System.Windows.Forms
Public Class MinhaNovaTextbox
    Inherits System.Windows.Forms.TextBox

    Dim bInserting As Boolean = True

    Private Declare Function GetKeyState _
        Lib "user32" (ByVal nVirtKey As Short) As Integer

    Public Sub New()
        MyBase.New()
        bInserting = GetKeyState(Keys.Insert)
    End Sub

    Protected Overrides Sub OnKeyPress(ByVal e As System.Windows.Forms.KeyPressEventArgs)
        bInserting = GetKeyState(Keys.Insert)
        If Not bInserting Then
            Me.SelectionLength = 1
        End If
        MyBase.OnKeyPress(e)
    End Sub
End Class
0 голосов
/ 12 ноября 2015
System.Windows.Input.Keyboard.IsKeyDown(System.Windows.Input.Key)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...