Richard87 Skrevet 10. juli 2005 Del Skrevet 10. juli 2005 (endret) 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 10. juli 2005 av Richard87 Lenke til kommentar
aadnk Skrevet 10. juli 2005 Del Skrevet 10. juli 2005 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
Richard87 Skrevet 10. juli 2005 Forfatter Del Skrevet 10. juli 2005 ja, eg ser ka du meine, men det e ikkje mulig, det funker ikkje me nCode som 2 i CallNewHookEx.. eller bare la vore og sende den..., vet du om det er noen mulighet for og modifisere taste trykket? Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå