2011-11-03 65 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)