2011-11-03 64 views
0

我需要vb.net的代码Getkeystate函数()不使用任何DLL。我是一个初学者,用于从vb到vb.net的API转换。在vb6中他们使用user32 DLL.In Vb .net我需要调用Getkeystate函数没有“User32.dll”功能。任何人都可以在不使用dll的情况下发布代码? 有没有办法获得关键的状态,而不使用vb​​.net中的那个DLL Getkeystate函数..?如果等同于任何一个知道的手段显示我的代码。这些代码应该在.net框架中工作。使用DLL获取关键状态函数使用DLL

VB:

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 
+0

什么样的应用程序? WPF,WinForms,控制台? – AMissico

+0

Windows应用程序(要获得转义键状态) – RajeshKdev

+1

要求无DLL解决方案没有任何意义,因为这正是需要的。你的声明是错误的,在pinvoke.net得到正确的一个 –

回答

1

您可能需要调用Windows API或不是 - 我不知道从你的问题你了解使用哪些DLL /调用windows API的手段。 User32.dll是Windows的一部分,调用其中的函数实际上是要求Windows为您执行功能。你想替换函数还是仅仅将调用转换为vb.net?

如果您只需将呼叫转换为vb.net,则可以使用调用Windows API的PInvoke

这里是从页的例子:

<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

嗨preet ...我不希望该Dll导入和all.The代码应该在.net框架中工作。与出局使用DLL Getkeystate function.is在vb.net中有任何等效的DLL Getkeystate function.that是我问...我怎样才能得到关键的状态,而不使用该dll函数。 – RajeshKdev

+0

为什么你不想使用该功能? –

1

17,控制键(Ctrl),使用My.Computer.Keyboard.CtrlKeyDown。您可以使用System.Windows.Forms.Control.ModifierKeys或使用Keyboard类。但是,使用My命名空间要容易得多。

对于27,The Escape(Esc)键,您必须使用Windows API调用。请参阅GetKeyState函数http://msdn.microsoft.com/en-us/library/ms646301.aspx

检查Esc对于System.Windows.Form.Form并不是真的需要。只需添加一个“取消”按钮并设置表格的CancelButton属性。如果您需要更多的控制权,然后处理其中一个关键事件; KeyUpKeyDownKeyPressPreviewKeyDown

+0

你会发送给我的逃脱密钥Windows API调用代码...? – RajeshKdev

+0

我正在使用Windows应用程序获取退出键状态。 – RajeshKdev

+0

@ R1,使用答案中的链接。 – AMissico

-1
System.Windows.Input.Keyboard.IsKeyDown(System.Windows.Input.Key)