Das macht mein Programm auch, nur leider nicht, wenn ich auf "O" auch ne andere Taste lege.
Mir scheint, wir verwenden sie selbe Source.
Dein Code funktioniert auch nur einwandfrei, wenn man auf "O" keine andere Taste legt.
Code: Alles auswählen
; German forum: http://www.purebasic.fr/german/archive/viewtopic.php?t=495
; Author: Danilo (updated for PB 4.00 by Andre)
; Date: 07. April 2003
; OS: Windows
; Demo: No
; Man findet im Systray ein Icon um den Hook zu beenden.
;
; Dieser LowLevel Keyboard Hook ist, falls mich jetzt nicht alles
; täuscht, undokumentiert - aber auch sonst ohne Gewähr.
;
; by Danilo, 07.04.2003 - german forum
Global hWindow,msg,hook
Structure KBDLLHOOKSTRUCT
vkCode.l
scanCode.l
flags.l
time.l
dwExtraInfo.l
EndStructure
Procedure.l myKeyboardHook(nCode, wParam, *p.KBDLLHOOKSTRUCT)
If nCode = #HC_ACTION
If wParam = #WM_KEYDOWN Or wParam = #WM_SYSKEYDOWN Or wParam = #WM_KEYUP Or wParam = #WM_SYSKEYUP
#LLKHF_ALTDOWN = $20
If *p\vkCode = #VK_A And wParam=#WM_KEYDOWN
keybd_event_(#VK_Z, 0, 0, 0)
ProcedureReturn 1
ElseIf *p\vkCode = #VK_B And wParam=#WM_KEYDOWN
keybd_event_(#VK_C, 0, 0, 0)
ProcedureReturn 1
ElseIf *p\vkCode = #VK_C And wParam=#WM_KEYDOWN
keybd_event_(#VK_D, 0, 0, 0)
ProcedureReturn 1
ElseIf *p\vkCode = #VK_D And wParam=#WM_KEYDOWN
keybd_event_(#VK_E, 0, 0, 0)
ProcedureReturn 1
ElseIf *p\vkCode = #VK_E And wParam=#WM_KEYDOWN
keybd_event_(#VK_F, 0, 0, 0)
ProcedureReturn 1
ElseIf *p\vkCode = #VK_F And wParam=#WM_KEYDOWN
keybd_event_(#VK_G, 0, 0, 0)
ProcedureReturn 1
ElseIf *p\vkCode = #VK_G And wParam=#WM_KEYDOWN
keybd_event_(#VK_H, 0, 0, 0)
ProcedureReturn 1
ElseIf *p\vkCode = #VK_H And wParam=#WM_KEYDOWN
keybd_event_(#VK_I, 0, 0, 0)
ProcedureReturn 1
ElseIf *p\vkCode = #VK_I And wParam=#WM_KEYDOWN
keybd_event_(#VK_J, 0, 0, 0)
ProcedureReturn 1
ElseIf *p\vkCode = #VK_J And wParam=#WM_KEYDOWN
keybd_event_(#VK_K, 0, 0, 0)
ProcedureReturn 1
ElseIf *p\vkCode = #VK_K And wParam=#WM_KEYDOWN
keybd_event_(#VK_L, 0, 0, 0)
ProcedureReturn 1
ElseIf *p\vkCode = #VK_L And wParam=#WM_KEYDOWN
keybd_event_(#VK_M, 0, 0, 0)
ProcedureReturn 1
ElseIf *p\vkCode = #VK_M And wParam=#WM_KEYDOWN
keybd_event_(#VK_N, 0, 0, 0)
ProcedureReturn 1
ElseIf *p\vkCode = #VK_N And wParam=#WM_KEYDOWN
keybd_event_(#VK_O, 0, 0, 0)
ProcedureReturn 1
ElseIf *p\vkCode = #VK_O And wParam=#WM_KEYDOWN
keybd_event_(#VK_P, 0, 0, 0)
ProcedureReturn 1
ElseIf *p\vkCode = #VK_P And wParam=#WM_KEYDOWN
keybd_event_(#VK_Q, 0, 0, 0)
ProcedureReturn 1
ElseIf *p\vkCode = #VK_Q And wParam=#WM_KEYDOWN
keybd_event_(#VK_R, 0, 0, 0)
ProcedureReturn 1
ElseIf *p\vkCode = #VK_R And wParam=#WM_KEYDOWN
keybd_event_(#VK_S, 0, 0, 0)
ProcedureReturn 1
ElseIf *p\vkCode = #VK_S And wParam=#WM_KEYDOWN
keybd_event_(#VK_T, 0, 0, 0)
ProcedureReturn 1
ElseIf *p\vkCode = #VK_T And wParam=#WM_KEYDOWN
keybd_event_(#VK_U, 0, 0, 0)
ProcedureReturn 1
ElseIf *p\vkCode = #VK_U And wParam=#WM_KEYDOWN
keybd_event_(#VK_V, 0, 0, 0)
ProcedureReturn 1
ElseIf *p\vkCode = #VK_V And wParam=#WM_KEYDOWN
keybd_event_(#VK_W, 0, 0, 0)
ProcedureReturn 1
ElseIf *p\vkCode = #VK_W And wParam=#WM_KEYDOWN
keybd_event_(#VK_X, 0, 0, 0)
ProcedureReturn 1
ElseIf *p\vkCode = #VK_X And wParam=#WM_KEYDOWN
keybd_event_(#VK_Y, 0, 0, 0)
ProcedureReturn 1
ElseIf *p\vkCode = #VK_Y And wParam=#WM_KEYDOWN
keybd_event_(#VK_Z, 0, 0, 0)
ProcedureReturn 1
ElseIf *p\vkCode = #VK_Z And wParam=#WM_KEYDOWN
keybd_event_(#VK_A, 0, 0, 0)
some_var=0
ProcedureReturn 1
EndIf
EndIf
EndIf
ProcedureReturn CallNextHookEx_(0, nCode, wParam, *p)
EndProcedure
Procedure AskForExit()
If MessageRequester("EXIT", "End the KeyboardHook ??",#MB_YESNO) = #IDYES
UnhookWindowsHookEx_(hook) : End
EndIf
EndProcedure
; Win NT
#WH_KEYBOARD_LL = 13
hook = SetWindowsHookEx_(#WH_KEYBOARD_LL,@myKeyboardHook(),GetModuleHandle_(0),0)
If hook = 0: End: EndIf
hWindow = OpenWindow(1,0,0,10,10,"k8D h00K",#PB_Window_Invisible)
; by daniel, 21. Nov 2002 (german Tips&Tricks)
SystemPath$ = Space(1024) : GetSystemDirectory_(SystemPath$,1024)
hIcon = ExtractIcon_(0,SystemPath$+"\user32.dll",1)
;-----
AddSysTrayIcon(1,WindowID(1),hIcon)
SysTrayIconToolTip(1,"k8D h00K")
; msg = RegisterWindowMessage_("DKs_k8D_h00K")
;
; If CreatePopupMenu(0)
; For a = 1 To 19
; MenuItem(a, "Oink! - "+RSet(Str(a),2,"0"))
; Next a
; MenuBar()
; MenuItem(20,"QUIT IT!")
; EndIf
;
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow : End
Case msg
DisplayPopupMenu(0, hWindow,GetSystemMetrics_(#SM_CXSCREEN)/2,GetSystemMetrics_(#SM_CYSCREEN)/2)
Case #PB_Event_Menu
If EventMenu() = 20
AskForExit()
Else
MessageRequester("MENU","Menu entry: "+Str(EventMenu()),0)
EndIf
Case #PB_Event_SysTray
If EventType() = #PB_EventType_LeftDoubleClick
AskForExit()
EndIf
EndSelect
ForEver