Forum | | | | - page 1 - |
|  Julian Schmidt | Salut, je suis sur qui cherche pour une Hotkey-Éditer cela si bien comment alle Scankeys untestützt.
Def CreateHotkeyEdit(5) Contrôle("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
Titre de la fenêtre "Tastenkombinationionen"
Cls
Var hk& = CreateHotkeyEdit(%hwnd,300,10,250,24)
SetHotKey(hk&,65,4)
Tandis que 1
SetFocus(hk&)
WaitInput
Cls
Imprimer "Du la hâte eingegeben: "
Imprimer
Imprimer "Taste ", GetKey(hk&)
Imprimer "Modifyer ", GetModifyer(hk&)
Endwhile
dans dem Beispiel peux cela Eingabe-champ z.B. pas avec Druck tourner autour de.
Salut |
| | | | |
| | | | - page 3 - |
|  | « cette Beitrag wurde comme Solution gekennzeichnet. » | | - page 4 - |
|  Julian Schmidt |  Wow, avec dem Éditer bekommt on wirklich alle Kombinationen hin. merci iF. super l'affaire.
ici nochmal avec Erkennung aller Tasten et Readonly-Éditer
{$iq}
declare Edit&,kbdlist&
style de fenêtre 16
cls
messages de l'utilisateur wm_user+1234
Edit& = @Créer("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 {
cas iskey(vk_shift) : mor=mor+"Shift + "
cas iskey(vk_control) : mor=mor+"Strg + "
cas 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
}
|
| | | | |  |
| |  | quelle avertissement?
>> vorhergedrückten Tasten merken, ou bien?
non, Iskey übersehen? |
| | | | |
| |  Julian Schmidt |
| | | | |
| |  | juste la fois encore une Bug dans qui Remarks-Erkennung des XPSE trouvé qui chez /*...*//*...*/ auftritt -
habe je sur qui ToDo gesetzt.
So gehts ("natürlich"):
'URL: https://XProfan.com/intl/de/forum/hotkey-edit-avec-allen-scankeys/#n
{$cleq}
style de fenêtre 16
cls
messages de l'utilisateur wm_user+1234
initMyHook()
do{
waitInput
sélectionner uMessage
caseof wm_user+1234
imprimer &uwParam,&ulParam
EndSelect
}
nProc initMyHook{
return SetWindowsHookEx(13,procAddr(myLowLevelKeyboardHookProc),getModuleHandle(0),0)/*WH_KEYBOARD_LL*/
}
nProc myLowLevelKeyboardHookProc(long code,wp,lp){
casenot long(lp,8) : casenot (long(lp,0)==162) : sendMessage(hWnd,wm_user+1234,long(lp,0),iskey(VK_CONTROL)*2+iskey(VK_MENU))
CallNextHookEx(0, Code, wp, lp)
}
|
| | | | |
| |  Julian Schmidt | Okay scheint oui déjà relativ bien trop marcher.
Hab qui liste inzwischen aussi um Shift erweitert.
nProc myLowLevelKeyboardHookProc(long code,wp,lp){
casenot long(lp,8) : casenot (long(lp,0)==162) : sendMessage(hWnd,wm_user+1234,long(lp,0),iskey(VK_SHIFT)+(2*iskey(VK_CONTROL))+(4*iskey(VK_MENU)))
CallNextHookEx(0, Code, wp, lp)
}
Es scheint encore quelques Probleme avec qui Erkennung qui vieux-bouton (VK_MENU) trop donner. chez mir funktioniert malheureusement pas soetwas comment vieux+X. et bisher aussi pas alle Tasten comment z.B. Pfeiltasten, Druck, Bildlauf et un paire plus pas. |
| | | | |
| |  | Teste la fois dans qui nProc si qui Tasten dans qui nProc arrivé,
z.B. per messagebox(0,"text","text",0) |
| | | | |
| |  Julian Schmidt | venons so comme aussieht à. Sowohl per Iskey comme aussi per Usermessage.
'{$ Cleq}
{$iq}
style de fenêtre 16
cls
messages de l'utilisateur wm_user+1234
initMyHook()
do{
waitInput
sélectionner uMessage
caseof wm_user+1234
imprimer &uwParam,&ulParam
EndSelect
}
nProc initMyHook{
return SetWindowsHookEx(13,procAddr(myLowLevelKeyboardHookProc),getModuleHandle(0),0)/*WH_KEYBOARD_LL*/
}
nProc myLowLevelKeyboardHookProc(long code,wp,lp){
Casenot long(lp,8) : casenot (long(lp,0)==162) : sendMessage(hWnd,wm_user+1234,long(lp,0),iskey(VK_SHIFT)+(2*iskey(VK_CONTROL))+(4*iskey(VK_MENU)))
messagebox(0,Str$(code)+"; "+Str$(wp)+"; "+Str$(lp),Str$(iskey(VK_MENU)),0)
CallNextHookEx(0, Code, wp, lp)
}
|
| | | | |
| |  | alors "hängt" cela Hauptfenster pour qui Verarbeitung qui bouton -
j'ai adhoc aucun concept comment on cette circonstance simple beseitigen peux.
peut-être, là qui nProc oui qui Nouvelles korrekt empfängt, juste aus qui nProc
un Éditer ou bien Static avec qui Info befüllen. là qui hookproc pas simple encore
zusätzliche Infos comment Handles (z.B. eines Edits) trop übermitteln sommes, là Windows
qui Proc oui aufruft et qui paramètre bestimmt, pourrait Dir hierzu "global" ( [...] )
aider. avec cela peux on dans einer nProc lesend sur global-deklarierte Variablen
zugreifen. |
| | | | |
| |  Julian Schmidt | Versteh pas entier comment je cela avec Quellcode umsetze....
'{$ Cleq}
{$iq}
Déclarer Edit&
Windowstyle 16
CLS
Edit& = @Créer("Edit", %hWnd, », 10, 10, 200, 24)
Edit& = setWindowLong(hWnd,gwl_wndProc,procaddr(myLowLevelKeyboardHookProc,4))
messages de l'utilisateur wm_user+1234
initMyHook()
do{
waitInput
sélectionner uMessage
caseof wm_user+1234
imprimer &uwParam,&ulParam
EndSelect
}
nProc initMyHook{
return SetWindowsHookEx(13,procAddr(myLowLevelKeyboardHookProc),getModuleHandle(0),0)/*WH_KEYBOARD_LL*/
}
nProc myLowLevelKeyboardHookProc(long code,wp,lp){
global owp&
Casenot long(lp,8) : casenot (long(lp,0)==162) : sendMessage(hWnd,wm_user+1234,long(lp,0),iskey(VK_SHIFT)+(2*iskey(VK_CONTROL))+(4*iskey(VK_MENU)))
messagebox(0,Str$(code)+"; "+Str$(wp)+"; "+Str$(lp),Str$(iskey(VK_MENU)),0)
CallNextHookEx(0, Code, wp, lp)
}
|
| | | | |
| |  | Viel einfacher, exposition la fois:
{$cleq}
declare Edit&
style de fenêtre 16
cls
messages de l'utilisateur wm_user+1234
Edit& = @Créer("Edit", %hWnd, », 10, 10, 200, 24)
initMyHook()
do{
waitInput
}
nProc initMyHook{
return SetWindowsHookEx(13,procAddr(myLowLevelKeyboardHookProc),getModuleHandle(0),0)/*WH_KEYBOARD_LL*/
}
nProc myLowLevelKeyboardHookProc(long code,wp,lp){
global edit&
//Casenot long(lp,8) : casenot (long(lp,0)==162) : sendMessage(hWnd,wm_user+1234,long(lp,0),iskey(VK_SHIFT)+(2*iskey(VK_CONTROL))+(4*iskey(VK_MENU)))
setText(edit&,Str$(code)+"; "+Str$(wp)+"; "+Str$(lp)+"; "+Str$(iskey(VK_MENU)))
CallNextHookEx(0, Code, wp, lp)
}
|
| | | | |
| |  Julian Schmidt | Ok, sieht so large bien aus.
voulais encore qui Modifer auswerten. malheureusement venez es par XPSE trop Fehlern chez IF-Bedingungen im Stile Si(N1,N2,N3).
Aussi versteh je pas comment sich maintenant aus Code, wp, lp qui Virtuelle Tastecode ergibt. Alla [...] 
{$iq}
declare Edit&
style de fenêtre 16
cls
messages de l'utilisateur wm_user+1234
Edit& = @Créer("Edit", %hWnd, », 10, 10, 200, 24)
initMyHook()
do{
waitInput
}
nProc initMyHook{
return SetWindowsHookEx(13,procAddr(myLowLevelKeyboardHookProc),getModuleHandle(0),0)/*WH_KEYBOARD_LL*/
}
nProc myLowLevelKeyboardHookProc(long code,wp,lp){
global edit&
//Casenot long(lp,8) : casenot (long(lp,0)==162) : sendMessage(hWnd,wm_user+1234,long(lp,0),iskey(VK_SHIFT)+(2*iskey(VK_CONTROL))+(4*iskey(VK_MENU)))
Déclarer modifyer$
modifyer$=»'Si(iskey(VK_CONTROL),"Strg + ")+Si(iskey(VK_MENU),"Alt + ",»)+Si(iskey(VK_SHIFT),"Shift + ",»)
setText edit&,modifyer$+Str$(code)+"; "+Str$(wp)+"; "+Str$(lp)+"; "+Str$(iskey(VK_MENU))
CallNextHookEx(0, Code, wp, lp)
}
|
| | | | |
| |  | exposition la fois: [...] 
si Du si comme Funktion magst dans nativen Funktionen ensuite iff wobei cela dernier f pour Funktion steht. Ist alors ne...aucune xpse- mais "Bedienerfehler". attention hierbei chez nativen Funktionen toujours Typen tenir compte de, iff comme Funktion erwartet 3 longs.
encore un "Bedienerfehler":
tu écris dans qui nProc settext edit&, nativ seulement Funktionen statt Befehle, alors settext(edit&,... - einmal Vorwort überfliegen: [...]  um Zeit et "Ärger" trop ersparen.
Schnellkurs:
Native Funktionen peut dans Profansyntax programmiert volonté, ou bien aussi dans Assembler - es peux aussi Assembler avec Profansyntax gemischt volonté. qui Syntax dans nativen Funktionen ist einfacher comme qui qui Runtime. Beispielsweise doit Funktionen toujours comment Funktionen aufgerufen volonté, pas Sleep 50 mais sleep(50) et seule cela Komma ist Parametertrennzeichen. Befehle et Système peut seule vom Befehlssatz gestellt volonté, NProc-Funktionen sommes toujours Funktionen. Float-Konstanten doit toujours avec Dezimalpunkt comme Kommazahl ausgedrückt volonté (z.B. 1.0 statt 1) et Stringkonstanten per Anführungszeichen (z.B. "Stringinhalt").
So läufts droite cool finde je:
{$cleq}
declare Edit&,kbdlist&
style de fenêtre 16
cls
messages de l'utilisateur wm_user+1234
Edit& = @Créer("Edit", %hWnd, », 10, 10, 200, 24)
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) {
code=long(lp,0)
string mor
ifnot code>159 or code==16 or code==17 or code==18 {
cas iskey(vk_shift) : mor=mor+"Shift+"
cas iskey(vk_control) : mor=mor+"Strg+"
cas 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
}
Nachtrag: Code nochmal geändert, hat encore quoi gefehlt.
 |
 | | | | |
| |  Julian Schmidt | oui, funktioniert déjà entier réglé.
chez Fokus sur dem Éditer wird seulement qui geschriebene Text plus qui ausgelesene Text eingesetzt. Lässt sich naturellement per Disable ou bien Readonly verhindern.
Aussi volonté Tasten comment Pfeiltasten, Druck, Bildlauf et un paire plus immernoch pas erkannt.  |
| | | | |
|
répondreOptions du sujet | 47.100 Views |
Themeninformationencet Thema hat 3 participant: |
|