Keyboardhook
Verfasst: 09.12.2013 21:51
Hallo,
ich versuche gerade eine sehr einfach Arbeitserleichterung zu schreiben. Ein Keyboardhook soll bei "<" ZeichenfolgeA und bei ">" ZeichenfolgeB in das aktive Fremdfenster schreiben.
Die Basis dafür habe ich auch schnell hier gefunden : http://forums.purebasic.com/german/view ... 16&t=21363
Aber schon beim zweiten Dummy (beim ersten ging die Tastaturkombination nicht) brauche ich Hilfe.
Bei dem Code wird die Aktion meist zweimal ausgeführt. Manchmal sprngt der Cursor rauf und runter und manchmal markiere ich etwas wegen der Shift-Taste.
Sorry falls jemand auf den ersten Dummy antworten wollte.
Den Code für die Exe habe ich aus dem Link (oben) 1:1 übernommen.
ich versuche gerade eine sehr einfach Arbeitserleichterung zu schreiben. Ein Keyboardhook soll bei "<" ZeichenfolgeA und bei ">" ZeichenfolgeB in das aktive Fremdfenster schreiben.
Die Basis dafür habe ich auch schnell hier gefunden : http://forums.purebasic.com/german/view ... 16&t=21363
Aber schon beim zweiten Dummy (beim ersten ging die Tastaturkombination nicht) brauche ich Hilfe.
Bei dem Code wird die Aktion meist zweimal ausgeführt. Manchmal sprngt der Cursor rauf und runter und manchmal markiere ich etwas wegen der Shift-Taste.
Code: Alles auswählen
;Diesen Code als Shared_Dll kompilieren
Global SHIFTpressed
ProcedureDLL KeyboardHook(nCode.l,wParam.l,lParam.l)
Protected Check.l=#True
If nCode=#HC_ACTION
Select wParam
Case #VK_SHIFT : SHIFTpressed = 1
Case #VK_OEM_102
If SHIFTpressed
keybd_event_(#VK_UP, #Null,#KEYEVENTF_EXTENDEDKEY,#Null)
Else
keybd_event_(#VK_DOWN, #Null,#KEYEVENTF_EXTENDEDKEY,#Null)
EndIf
Default : SHIFTpressed = 0 : Check=#False
EndSelect
Else
Check=#False
EndIf
Delay(500)
;
If Check : ProcedureReturn 1 : EndIf
ProcedureReturn CallNextHookEx_(@KeyboardHook(),nCode,wParam,lParam)
EndProcedure
Den Code für die Exe habe ich aus dem Link (oben) 1:1 übernommen.
Code: Alles auswählen
EnableExplicit
;
#G_Txt=0
#G_Btn=1
#Lazy= 0
#Bizzy=1
#Lib= 0
#DLL_Name="MyKeyHook.dll" ;eventuell anpassen
#WinF=#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered
;
Prototype.l Proto_KeyHook(nCode.l,wParam.l,lParam.l)
Define.l Quit, Hooker
Define.l hMod, hHook
;
hMod=OpenLibrary(#Lib,#DLL_Name)
If Not hMod : End : EndIf
Global KeyHook.Proto_KeyHook=GetFunction(#Lib,"KeyboardHook")
If Not KeyHook : End : EndIf
;
OpenWindow(0,0,0,200,80,"Hook",#WinF)
TextGadget(#G_Txt,10,10,180,20,"Kein Haken in der Tastatur.",#PB_Text_Center)
ButtonGadget(#G_Btn,50,40,100,20,"Haken rein !")
;
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
If EventGadget()=#G_Btn
Select Hooker
Case #Lazy
hHook=SetWindowsHookEx_(#WH_KEYBOARD,KeyHook,hMod,#Null)
SetGadgetText(#G_Txt,"Tastatur hängt am Haken.")
SetGadgetText(#G_Btn,"Haken raus !")
Hooker!1
Case #Bizzy
UnhookWindowsHookEx_(hHook)
SetGadgetText(#G_Txt,"Kein Haken in der Tastatur.")
SetGadgetText(#G_Btn,"Haken rein !")
Hooker!1
EndSelect
EndIf
Case #PB_Event_CloseWindow : Quit!1
EndSelect
Until Quit
;
If Hooker : UnhookWindowsHookEx_(hHook) : EndIf
End
;