Gå til innhold

modifisering av taste trykk med LLKeyHook?


Anbefalte innlegg

Kossen kan eg modifisera taste trykka som blir send te KeyboardProc'en min?

 

Public Function KeyboardProc(ByVal nCode As Long, ByVal wParam As Long, lParam As Long) As Long
On Error GoTo err2
Static X As Long
'Declare Variables..
'-------------------
Dim xpInfo As KBDLLHOOKSTRUCT

   If nCode = HC_ACTION Then
       CopyMemory xpInfo, lParam, Len(xpInfo)
       
       If xpInfo.vkCode = 164 Then
           End
       End If
       
       'MsgBox xpInfo.flags & vbNewLine & _
           (xpInfo.flags And 7)
       
       'do the conversion
       If xpInfo.vkCode >= 32 And xpInfo.vkCode <= 126 And xpInfo.flags = 0 Then
           X = X + 1
           SendKey Asc(UCase(Mid(sText, X, 1))), True
       ElseIf xpInfo.flags = 128 Then
           SendKey Asc(UCase(Mid(sText, X, 1))), False
           If X = Len(sText) Then X = 0
       End If
       
   End If

If bDrop Then KeyboardProc = CallNextHookEx(KeyboardHookID, nCode, wParam, lParam)
Exit Function
err2:
MsgBox "Error: " & Err.Number & vbNewLine & _
   Err.Description & vbNewLine & _
   Err.LastDllError & vbNewLine & _
   Err.Source, vbCritical, "Error!"
   
End Function

Private Sub SendKey(bKey As Byte, ByVal bPress As Boolean)
bDrop = False
   Dim GInput(0) As GENERALINPUT
   Dim KInput As KEYBDINPUT
   KInput.wVk = bKey
   If bPress Then KInput.dwFlags = 0
   If Not bPress Then KInput.dwFlags = KEYEVENTF_KEYUP
   
   GInput(0).dwType = INPUT_KEYBOARD   ' keyboard input
   CopyMemory GInput(0).xi(0), KInput, Len(KInput)
   
   'send the input now
   SendInput 1, GInput(0), Len(GInput(0))
   DoEvents
bDrop = True
End Sub

enten eg kopiere xpInfo te der eg fant ann, eller om eg bare senda an videre i stedenfor lParam, ingen ting virke.... nagen andre som har ein ide?

 

[EDIT]

eg har modifisert koden, og bruke sendinput isteden for og modifiserea coden, men nar eg trykke pa ein bokstav, sa komme det modifiserte tegnet opp, men sa komme tasten eg trykka pa opp i tilleg... nagen osom har ein ide?

 

[EDIT2]

OK, heila probleme e at eg ikkje kan droppa taste trykk, nagen osm vett kossen eg far det te?

Endret av Richard87
Lenke til kommentar
Videoannonse
Annonse

Først og fremst vil jeg bemerke at følgende kode er både feilaktig og farlig:

      If xpInfo.vkCode = 164 Then

          End

      End If

 

Du MÅ kalle UnhookWindowsHookEx før applikasjonen termineres, og dette skjer så menn ikke dersom du benytte End-kommandoen - en kommando du egentlig bør unngå for all pris. Dette kan, og vil mest sannsynlig, resultere i en minnelekasje.

 

Hva problemet ditt angår, kan det muligens løses ved å ta en ørliten titt på følgende sitat fra MSDN:

 

Return Value

 

    If code is less than zero, the hook procedure must return the value returned by CallNextHookEx.

 

    If code is greater than or equal to zero, and the hook procedure did not process the message, it is highly recommended that you call CallNextHookEx and return the value it returns; otherwise, other applications that have installed WH_KEYBOARD hooks will not receive hook notifications and may behave incorrectly as a result. If the hook procedure processed the message, it may return a nonzero value to prevent the system from passing the message to the rest of the hook chain or the target window procedure.

 

Som du ser, kan du kanskje stoppe notifikasjonen av tastaturhendelsen å noensinne komme frem til destinasjonsvinduet ved å sette returverdien til noe over 1 (i tillegg til å IKKE kalle CallNextHookEx), men jeg er nokså usikker.

 

Jeg vil råde deg å finne en annen løsning på hva enn du prøver på.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...