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 2 - |
|  | « 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
}
|
| | | | |  |
| |  Julian Schmidt | rien, seulement allez le son deiner Aussage cet pas. seulement per XPSE ou bien Registerhotkey dans einer Boucle, quoi chez mehreren Edits mais potenziell problematisch ist.
iF (23.01.13)
iF (23.01.13)Mach doch pas so compliqué mais simple un readonly Éditer pleine avec allem quoi chez getfocus un globaler Tastaturhook abliefert. direct befüllen avec Entrées aus solch liste: [...] [...]  Julian Schmidt (23.01.13)comment meinst du cela avec une globalen clavier Hook. peux du un Beispiel avec reinen XProfan donner.
iF (23.01.13)Absturzsicher allez cela avec reinem Profan pas - absturzsichere Hooks étions avec un Grund pour nProcs: [...] 
[OFFTOPIC]si on plusieurs Zitate verschachtelt, volonté qui paramètre de den ersten inneren citation à cela außere citation übertragen.[/OFFTOPIC] |
| | | | |
| |  | je hab Dir doch dessus geschrieben comment Du qui Drucktaste rein avec XProfan intercepter peux et alle anderen Tasten per HotKey.
mon Antwort, cela es seulement avec XPSE absturzsicher allez, bezog sich sur Votre Frage pour clavier-Hook. pas verwirren laisser!  |
| | | | |
| |  Julian Schmidt | Ok, était wirklich quelque chose verwirrend. peux du nochmal genauer décrire comment? |
| | | | |
| |  | ici mais est un pas-xpse-Code dabei qui zeigt comment on cet bouton abfängt: [...] 
autre Tasten peux Du aussi per addHotKey intercepter.
So müsstest Du doch alle Tasten intercepter peut. |
| | | | |
| |  Julian Schmidt | ensuite devrait je alors alle dans un Boucle hauen. là größte Problem ist, le moi pour jeden Hotkey qui Opportunités Strg, vieux, Shift, Strg+vieux, Strg+Shift, vieux+Shift, Strg+vieux+Shift + Hotkey brauche. ensuite suis je la fois entier vite chez 500 Schleifendruchläufen avec Addhotkey la fois une autre Frage, pourquoi qui Druck-bouton pas per Addhotkey. Bzw. pourquoi pas alle per RegisterHotKey? |
| | | | |
| |  | si Du addHotKey verwenden vouloir ensuite musst Du einmalig alle registrieren.
Besser wäre imho une kleine hookProc qui juste cet Tasteninfos z.B. per userMessage à cela XProfan-Programme absendet sodass cela Programme quasi seulement encore einsammeln et réagir muss. cela Beispiel en supplément ist oui aussi ici [...] abrufbar - alors c'est qui erste Voir le texte source. là bekommst quasi juste zur Message qui Tasteninfo mitgeliefert.
avec cela solch Code cependant 100% absturzsicher funktioniert et Dein XProfan-Programme pas durcheinander bringt, ist es notwendig, dass qui Hook-Proc pas sur une interpretierte Proc zeigt, weil XProfan pas apc-sûrement ist. cela on comme XProfaner dans den Genuss solcher Funktionen venons peux sans dass cela Programme abstürzt, était avec un Grund pour n(ative)Procs, qui plan oui c'est ca quelque chose comme ermöglichen et thread sowie apc-sûrement sommes. qui idée était arrêt, dass on aussi solche Dinge avec seiner Lieblingsprogrammiersprache (XProfan) programmieren peux et qui nProcs ermöglichen arrêt cela on plan pour quelque chose comme pas sur une autre Programmiersprache zurückgreifen muss mais on comment gewohnt xprofant.
Pour nProcs simple xpse avec ins Kompilerverzeichnis kopieren et dans qui IDE comme Kompiler ou bien Werkzeug angeben, Aufruf simple xpse file - dans den tête qui xprf simple {$cleq} (kompilieren, linken, exe, quiet) écrivons et déjà flitzt cela Programme.
|
| | | | |
| |  Julian Schmidt | Ok, werde mir la fois anschauen. Evtl. aussi dans Kombination avec XPSE.
[OFFTOPIC]était justement sur deiner qui XPSE-Webseite [...]  . dessus steht Copyright © 1998-2011 XProfan.Com, built DE. réellement écrivons wir déjà cela l'an 2013  [/OFFTOPIC] |
| | | | |
| |  Julian Schmidt | je veux cela Beispiel avec Hook nochmal aufgreifen. [...]  là existiert qui la ligne:
chez &uwParam handelt sich um den Virtuellen Tastecode / Scankey. Wobei handelt es chez &ulParam. Dachte seulement es handelt sich um den Modifier, dem billet allerdings pas so trop son!? comment peux je une Modifier, etwa vieux, avec abfragen. |
| | | | |
| |  | exposition qui nProc wandelt qui Hook-Calls dans SendMessage um, cet wiederum empfängt cela XProfan-Programme comme Utilisateur Messages.
sendMessage(hWnd,wm_user+1234,long(lp,0),long(lp,8))
Windows sendet 3 Params à qui Hookproc: (long code,wp,lp) [...] 
lParam [dans]. Type: LPARAM, A pointer to a KBDLLHOOKSTRUCT structure: [...] 
Demnach hole je avec long(lp,0): vkCode, Type: DWORD, A virtual-clé code: [...] 
et long(lp,8): flags,Type: DWORD, The extended-clé flag, event-injected flag: [...] 
Demnach steht qui de Dir gewünscht Info nirgends bzw. wird vous separat comme nouvelle zuvor gesandt, alors z.B. si vieux ou bien strg gedrückt wurde. Du müsstest donc selbst "merken" si une qui Tasten zuvor gedrückt o. losgelassen wurde. si losgelassen ou bien gedrückt steht dans &ulParam.
là wäre es pour Deinen le cas peut-être besser, si Du dans qui nProc quoi änderst et statt pour &lParam im SendMessage pas long(lp,8) sendest mais juste avec isKey ( [...] ) ermittelte Werte sendest et pour peut-être sur qui Info verzichtest, si qui bouton gedrückt ou bien losgelassen wurde.
alors vlt. so:
{$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))/* si bouton gedrückt statt losgelassen *//* pas übermitteln si seulement qui strg bouton gedrückt */
CallNextHookEx(0, Code, wp, lp)
}
|
| | | | |
| |  Andreas Miethe
 | allô David,
sur cet Art blockierst Du z.B. mon Snapshot-Programme. Besser qui annonce weitergeben.
nProc myLowLevelKeyboardHookProc(long code,wp,lp){
sendMessage(hwnd,wm_user+1234,long(lp,0),long(lp,8))
CallNextHookEx(0, Code, wp, lp)
|
| | | XProfan X2Gruss Andreas ________ ________ ________ ________ _ Profan 3.3 - XProfanX2 Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher Homepage : [...]  | 19.02.2013 ▲ |
| |
| |  | Stimmt, merci, mon faute.
je korrigiere cela aussi juste la fois ici: [...]  |
| | | | |
| |  Julian Schmidt | Beim Effectuer votre Quelltextes [...] venez une avertissement. peux je cet Überspringen ou bien comment bekomme je cet Entfernt, um den Voir le texte source auszuführen?
iF (19.02.13)
là wäre es pour Deinen le cas peut-être besser, si Du dans qui nProc quoi änderst et statt pour &lParam im SendMessage pas long(lp,8) sendest mais juste avec isKey ( [...] ) ermittelte Werte sendest et pour peut-être sur qui Info verzichtest, si qui bouton gedrückt ou bien losgelassen wurde.
ensuite devrait je mir mais immernoch qui vorhergedrückten Tasten merken, ou bien? |
| | | | |
|
répondreOptions du sujet | 47.096 Views |
Themeninformationencet Thema hat 3 participant: |