Forum | | | | - Seite 1 - |
| Julian Schmidt | Hallo, ich bin auf der Suche nach einen Hotkey-Edit das so gut wie alle Scankeys untestützt.
Def CreateHotkeyEdit(5) Control("msctls_hotkey32","",$54010200,&(2),&(3),&(4),&(5),&(1),2000,%hinstance)
Def SetHotKey(3) SendMessage(&(1),1025,MakeWord(%(2),%(3)),0)
Def GetHotKey(1) SendMessage(&(1),1026,0,0)
Def GetKey(1) LoWord(Lobyte(SendMessage(&(1),1026,0,0)))
Def GetModifyer(1) LoWord(Hibyte(SendMessage(hk&,1026,0,0)))
Def MakeWord(2) (%(1) & $FF) | ((%(2) & $FF) << 8)
Def HiByte(1) %(1) >> 8
Def LoByte(1) %(1) & $FF
WindowTitle "Tastenkombinationionen"
Cls
Var hk& = CreateHotkeyEdit(%hwnd,300,10,250,24)
SetHotKey(hk&,65,4)
While 1
SetFocus(hk&)
WaitInput
Cls
Print "Du hast eingegeben: "
Print
Print "Taste ", GetKey(hk&)
Print "Modifyer ", GetModifyer(hk&)
EndWhile
In dem Beispiel kann das Eingabe-Feld z.B. nicht mit Druck umgehen.
Gruß |
| | | | |
| | « Dieser Beitrag wurde als Lösung gekennzeichnet. » | | Julian Schmidt | Wow, mit dem Edit bekommt man wirklich alle Kombinationen hin. Danke iF. Klasse Sache.
Hier nochmal mit Erkennung aller Tasten und Readonly-Edit
{$iq}
declare Edit&,kbdlist&
windowstyle 16
cls
userMessages wm_user+1234
Edit& = @Create("Edit", %hWnd, "", 10, 10, 200, 24)
SendMessage(Edit&,$00CF,1,0)
kbdlist&=createKbdList()
initMyHook()
do{
waitInput
}
nProc initMyHook{
return SetWindowsHookEx(13,procAddr(myLowLevelKeyboardHookProc),getModuleHandle(0),0)/*WH_KEYBOARD_LL*/
}
nProc myLowLevelKeyboardHookProc(long code,wp,lp){
global edit&,kbdlist&
ifnot long(lp,8)==128 {
code=long(lp,0)
string mor
ifnot code>159 or code==16 or code==17 or code==18 {
case iskey(vk_shift) : mor=mor+"Shift + "
case iskey(vk_control) : mor=mor+"Strg + "
case iskey(vk_menu) : mor=mor+"Alt + "
}
setText(edit&,mor+substr(getString(kbdlist&,selectString(kbdlist&,0,str(code))),2," "))
}
CallNextHookEx(0, Code, wp, lp)
}
nProc selectString(long lb,srcFrom,string src){
return sendMessage(lb,lb_selectString,srcFrom,src)
}
createKbdList{
long kbdList=create("list",0)
addString(kbdList,"8 BackSpace")
addString(kbdList,"9 Tab")
addString(kbdList,"12 Entfernen")
addString(kbdList,"13 Return")
addString(kbdList,"16 Shift")
addString(kbdList,"17 Strg")
addString(kbdList,"18 Alt")
addString(kbdList,"19 Pause")
addString(kbdList,"20 Caps")
addString(kbdList,"27 Esc")
addString(kbdList,"32 Space")
addString(kbdList,"33 BildHoch")
addString(kbdList,"34 BildRunter")
addString(kbdList,"35 Ende")
addString(kbdList,"36 Pos1")
addString(kbdList,"37 Links")
addString(kbdList,"38 Hoch")
addString(kbdList,"39 Rechts")
addString(kbdList,"40 Runter")
addString(kbdList,"41 Select")
addString(kbdList,"42 Druck")
addString(kbdList,"43 Execute")
addString(kbdList,"44 Druck")
addString(kbdList,"45 Einfg")
addString(kbdList,"46 Entf")
addString(kbdList,"47 Hilfe")
addString(kbdList,"48 0")
addString(kbdList,"49 1")
addString(kbdList,"50 2")
addString(kbdList,"51 3")
addString(kbdList,"52 4")
addString(kbdList,"53 5")
addString(kbdList,"54 6")
addString(kbdList,"55 7")
addString(kbdList,"56 8")
addString(kbdList,"57 9")
addString(kbdList,"65 A")
addString(kbdList,"66 B")
addString(kbdList,"67 C")
addString(kbdList,"68 D")
addString(kbdList,"69 E")
addString(kbdList,"70 F")
addString(kbdList,"71 G")
addString(kbdList,"72 H")
addString(kbdList,"73 I")
addString(kbdList,"74 J")
addString(kbdList,"75 K")
addString(kbdList,"76 L")
addString(kbdList,"77 M")
addString(kbdList,"78 N")
addString(kbdList,"79 O")
addString(kbdList,"80 P")
addString(kbdList,"81 Q")
addString(kbdList,"82 R")
addString(kbdList,"83 S")
addString(kbdList,"84 T")
addString(kbdList,"85 U")
addString(kbdList,"86 V")
addString(kbdList,"87 W")
addString(kbdList,"88 X")
addString(kbdList,"89 Y")
addString(kbdList,"90 Z")
addString(kbdList,"96 0")
addString(kbdList,"97 1")
addString(kbdList,"98 2")
addString(kbdList,"99 3")
addString(kbdList,"100 4")
addString(kbdList,"101 5")
addString(kbdList,"102 6")
addString(kbdList,"103 7")
addString(kbdList,"104 8")
addString(kbdList,"105 9")
addString(kbdList,"106 *")
addString(kbdList,"107 +")
addString(kbdList,"109 -")
addString(kbdList,"110 ,")
addString(kbdList,"111 /")
addString(kbdList,"112 F1")
addString(kbdList,"113 F2")
addString(kbdList,"114 F3")
addString(kbdList,"115 F4")
addString(kbdList,"116 F5")
addString(kbdList,"117 F6")
addString(kbdList,"118 F7")
addString(kbdList,"119 F8")
addString(kbdList,"120 F9")
addString(kbdList,"121 F10")
addString(kbdList,"122 F11")
addString(kbdList,"123 F12")
addString(kbdList,"124 F13")
addString(kbdList,"125 F14")
addString(kbdList,"126 F15")
addString(kbdList,"127 F16")
addString(kbdList,"128 F17")
addString(kbdList,"129 F18")
addString(kbdList,"130 F19")
addString(kbdList,"131 F20")
addString(kbdList,"132 F21")
addString(kbdList,"133 F22")
addString(kbdList,"134 F23")
addString(kbdList,"135 F24")
addString(kbdList,"160 Shift")
addString(kbdList,"161 Shift")
addString(kbdList,"162 Strg")
addString(kbdList,"163 Strg")
addString(kbdList,"164 Alt")
addString(kbdList,"165 Alt")
return kbdList
}
|
| | | | | |
| | | So kannst Du die Druck-Taste abfangen: [...]
Gibt halt solch Spezis wie auch Rollen und Pause etc. |
| | | | |
| | Julian Schmidt | hmmmm...und wie baue ich das am besten ein. Warscheinlich in das obere Beispiel überhaupt nicht.
Ist imho Murx
Def CreateHotkeyEdit(5) Control("msctls_hotkey32","",$54010200,&(2),&(3),&(4),&(5),&(1),2000,%hinstance)
Def SetHotKey(3) SendMessage(&(1),1025,MakeWord(%(2),%(3)),0)
Def GetHotKey(1) SendMessage(&(1),1026,0,0)
Def GetKey(1) LoWord(Lobyte(SendMessage(&(1),1026,0,0)))
Def GetModifyer(1) LoWord(Hibyte(SendMessage(hk&,1026,0,0)))
Def MakeWord(2) (%(1) & $FF) | ((%(2) & $FF) << 8)
Def HiByte(1) %(1) >> 8
Def LoByte(1) %(1) & $FF
WindowTitle "Tastenkombinationionen"
Cls
Var hk& = CreateHotkeyEdit(%hwnd,300,10,250,24)
SetHotKey(hk&,65,4)' ALT + A setzen
external("user32.dll","RegisterHotKey",%hWnd,222,0,44)
usermessages 786'wm_hotkey
While 1
Waitinput 300
If getfocus(hk&)
Cls
Print "Du hast eingegeben: "
Print
Print "Taste ", GetKey(hk&)
Print "Modifyer ", GetModifyer(hk&)
Waitinput
EndIf
if %uMessage=786
SetHotKey(hk&,&ulParam \ $10000,GetModifyer(hk&))
'print "Tastaturcode:",&ulParam \ $10000
endif
EndWhile
|
| | | | |
| | | Mach doch nicht so kompliziert sondern einfach ein readonly Edit gefüllt mit allem was bei getfocus ein globaler Tastaturhook abliefert.
Direkt befüllen mit Einträgen aus solch Liste: [...] [...] |
| | | | |
| | Julian Schmidt | Wie meinst du das mit einen globalen Tastatur Hook. Kannst du ein Beispiel mit reinen XProfan geben. |
| | | | |
| | | Absturzsicher geht das mit reinem Profan nicht - absturzsichere Hooks waren mit ein Grund für nProcs: [...]
Was Du machen könntest wäre eine Schleife mit lauter registerHotKey( |
| | | | |
| | Julian Schmidt | Gibt es keine andere Möglichkeiten eine Art Hotkey-Edit, ohne XPSE zu erstellen. Indem die Druck-Taste verwendet werden kann.
Kennt da jemand etwas?
Gruß |
| | | | |
| | | Ich verstehe hierbei nicht was Dir an dem nicht-xpse Code ( [...] ) so missfällt,
dass Du ihn dafür nicht verwendest. Imho fehlt hier wieder die konkrete Problem- benennung. |
| | | | |
| | Julian Schmidt | Einfach eine Einhabemethode mit der Tastenkombinationen erfasst werden könne. Sprich ein Edit, Listbox etc. Nach Möglichkeit für mehrere Tastenkombinationen, d.h. mehrere Edits. Es sollte auf jeden Fall die Eingabe der Drucktaste mit Modifyer erlaubt sein. Und nach Bedarf auch weitere Tasten hinzufügbar.
Nach Möglichkeit ohne XPSE. |
| | | | |
| | | Ich glaube Du hast meine Frage nicht verstanden,
ich fragte sinngemäß was Dir am NICHT-xpse-Beispiel NICHT gefällt. |
| | | | |
| | Julian Schmidt | Von der Grundidee gefällt es mir. Allerdings muss ich dazu sagen, das ich es nicht mit XPSE getestet habe. Ich bin einfach bisher kein Freund von XPSE. Vlt schaffst du mich zu bekehren, wenn du mir eine kurze Einleitung in XPSE gibst. |
| | | | |
| | | Was ich nochmals versuche Dich zu fragen, ist, warum das das Beispiel nicht magst, dass eben ___________ohne xpse auskommt.
Es ist nicht mein Anliegen, jemanden xpse aufzudrücken, ich kann ihn nur empfehlen, da er sich eh bereits unendlich viele Male bewehrt hat und damit Dinge gehen, die sonst garnicht möglich wären. Wenn jemand ohne xpse auskommt ist das doch IO. Beispielsweise nutzt auch Du jetzt schon viele syntaktische Varianten die xpse schon viele Jahre bot, bevor XProfan diese unterstützte und so bedingen sich die Dinge hin und wieder. Ich hatte xpse damals (1998 namens profan enhancer) begonnen um mehr Potential aus XProfan (damals profan) herauszuholen und das tätentut er bis heute ganz erfolgreich. Wer den fest eingebunden hat wird auch nicht mehr ohne programmieren, da man schon beim Programmieren damit merkt, wie er unterstützt und da er alles schneller macht und damit die Programme stabiler werden, ist er für mich ein muss, besonders wenn man ständig Codes findet in denen er Fehler findet die komplett unnötig sind bzw. vermieden hätten werden müssen. So schreibe ich beispielsweise oft auch lieber eine nProc statt eine Proc (wo es eben möglich ist) weil sie auf eine gewisse Art ehrlicher ist und auch das System deutlich weniger belastet. |
| | | | |
|
AntwortenThemenoptionen | 45.027 Betrachtungen |
ThemeninformationenDieses Thema hat 3 Teilnehmer: |