2016-09-02 3 views
0

Я пытаюсь поймать все кешисты, и я получаю и «Не удалось найти точку входа с именем« GetAsncKeyState »в DLL« user32 »» в результат = GetAsncKeyState (я) здесь кодНевозможно найти точку входа с именем «GetAsncKeyState» в DLL 'user32'

Private Declare Function GetAsncKeyState Lib "user32" (ByVal vkey As Integer) As Integer 
Private Sub tmrKeys_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrKeys.Tick 
    Dim result As Integer 
    Dim key As String 
    Dim i As Integer 
    For i = 2 To 90 
     result = 0 
     result = GetAsncKeyState(i) 
     If result = -3276 Then 
      key = Chr(i) 
      If i = 13 Then key = vbNewLine 
      Exit For 
     End If 
    Next i 
+0

Я использую фреймворк 3.5, visualstudio 2010 – user5353093

+2

Любопытно, как вы ошиблись, объясните, как это произошло. –

+0

@HansPassant верен, имя ошибочно ... – Codexer

ответ

1

причина ошибки вы описали потому, что имя функции GetAsyncKeyState, не GetAsncKeyState.

Также в .NET вы должны рассмотреть, чтобы использовать атрибут DllImport вместо Declare заявления (которое является устаревшим VB6 стильным методологии) к provide more control over how platform invoke functions are called.

Вот ниже GetAsyncKeyState декларации that I use, с включенными XML документация:

''' ---------------------------------------------------------------------------------------------------- 
''' <summary> 
''' Determines whether a key is up or down at the time the function is called, 
''' and whether the key was pressed after a previous call to <see cref="GetAsyncKeyState"/>. 
''' </summary> 
''' ---------------------------------------------------------------------------------------------------- 
''' <remarks> 
''' <see href="http://msdn.microsoft.com/en-us/library/windows/desktop/ms646310%28v=vs.85%29.aspx"/> 
''' </remarks> 
''' ---------------------------------------------------------------------------------------------------- 
''' <param name="vKey"> 
''' The virtual-key code. 
''' <para></para> 
''' You can use left- and right-distinguishing constants to specify certain keys. 
''' <para></para> 
''' See Virtual-Key Codes: 
''' <see href="http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731%28v=vs.85%29.aspx"/> 
''' </param> 
''' ---------------------------------------------------------------------------------------------------- 
''' <returns> 
''' If the function succeeds, 
''' the return value specifies whether the key was pressed since the last call to <see cref="GetAsyncKeyState"/>, 
''' and whether the key is currently up or down. 
''' <para></para> 
''' If the most significant bit is set, the key is down, and if the least significant bit is set, 
''' the key was pressed after the previous call to <see cref="GetAsyncKeyState"/>. 
''' <para></para> 
''' However, you should not rely on this last behavior. 
''' <para></para> 
''' <para></para> 
''' The return value is zero for the following cases: 
''' <para></para> 
''' The current desktop is not the active desktop. 
''' <para></para> 
''' The foreground thread belongs to another process and the desktop does not allow the hook or the journal record. 
''' </returns> 
''' ---------------------------------------------------------------------------------------------------- 
<SuppressUnmanagedCodeSecurity> 
<DllImport("user32.dll", CharSet:=CharSet.Auto)> 
Public Shared Function GetAsyncKeyState(ByVal vKey As System.Windows.Forms.Keys 
) As Short 
End Function 

Примечание: Вы можете изменить параметр vKey для Integer типа данных, если вы preffer.

+0

Я полагаю, что вы имели в виду: _ «Вы можете изменить параметр' vKey' на перечисление 'System.Windows.Forms.Keys', если вы предпочитаете« _ ». :) –

+0

Упс, забыл переместить свой хороший ответ. –

+0

@Visual Vincent В техникумах конечно да, в контексте предоставленного ответа нет. Спасибо за комментарий. – ElektroStudios

Смежные вопросы