Italia
Foro

Hotkey Edit mit allen Scankeys

 
- Page 1 -



Julian
Schmidt
Ciao,
ich bin auf der Cerca 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.

Saluto
 
XProfan X2
Win7 Professional, SP1, AMD FX(tm)-8350 Eight-Core Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
23.01.2013  
 



 
- Page 2 -


« Dieser Beitrag wurde als Lösung gekennzeichnet. »

- Page 4 -



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

}

 
XProfan X2
Win7 Professional, SP1, AMD FX(tm)-8350 Eight-Core Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
20.02.2013  
 




Julian
Schmidt
Nichts, nur geht laut deiner Aussage dieses nicht. Nur per XPSE oder Registerhotkey in einer Schleife, was bei mehreren Edits aber potenziell problematisch ist.

iF (23.01.13)
iF (23.01.13)
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 (23.01.13)
Wie meinst du das mit einen globalen Tastatur Hook.
Kannst du ein Beispiel mit reinen XProfan geben.


iF (23.01.13)
Absturzsicher geht das mit reinem Profan nicht -
absturzsichere Hooks waren mit ein Grund per nProcs:  [...] 



[OFFTOPIC]Wenn man mehrere Zitate verschachtelt, werden die Parameter von den ersten inneren Zitat an das außere Zitat übertragen.[/OFFTOPIC]
 
XProfan X2
Win7 Professional, SP1, AMD FX(tm)-8350 Eight-Core Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
30.01.2013  
 



Ich hab Dir doch oben geschrieben wie Du die Drucktaste rein mit XProfan
abfangen kannst und alle anderen Tasten per HotKey.

Meine Antwort, das es nur mit XPSE absturzsicher geht, bezog sich auf Deine
Frage nach Tastatur-Hook. Nicht verwirren lassen!
 
30.01.2013  
 




Julian
Schmidt
Ok, war wirklich etwas verwirrend.
Kannst du nochmal genauer beschreiben wie?
 
XProfan X2
Win7 Professional, SP1, AMD FX(tm)-8350 Eight-Core Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
30.01.2013  
 



Hier ist doch ein nicht-xpse-Code dabei der zeigt wie man diese Taste abfängt:  [...] 

Andere Tasten kannst Du auch per addHotKey abfangen.

So müsstest Du doch alle Tasten abfangen können.
 
30.01.2013  
 




Julian
Schmidt
Dann müsste ich also alle in un Schleife hauen. Da größte Problem ist, das ich per jeden Hotkey die Möglichkeiten Strg, Alt, Shift, Strg+Alt, Strg+Shift, Alt+Shift, Strg+Alt+Shift + Hotkey brauche. Dann bin ich mal ganz schnell bei 500 Schleifendruchläufen mit Addhotkey
Mal eine andere Frage, warum die Druck-Taste nicht per Addhotkey. Bzw. warum nicht alle per RegisterHotKey?
 
XProfan X2
Win7 Professional, SP1, AMD FX(tm)-8350 Eight-Core Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
30.01.2013  
 



Wenn Du addHotKey verwenden möchtest dann musst Du einmalig alle registrieren.

Besser wäre imho eine kleine hookProc die gleich diese Tasteninfos z.B. per userMessage
an das XProfan-Programm absendet sodass das Programm quasi nur noch einsammeln
und reagieren muss. Das Beispiel dazu ist ja auch hier  [...]  abrufbar -
also das ist der erste Quelltext. Da bekommst quasi gleich zur Message die Tasteninfo
mitgeliefert.

Damit solch Code jedoch 100% absturzsicher funktioniert und Dein XProfan-Programm
nicht durcheinander bringt, ist es notwendig, dass die Hook-Proc nicht auf eine
interpretierte Proc zeigt, weil XProfan nicht apc-sicher ist. Das man als XProfaner
in den Genuss solcher Funktionen kommen kann ohne dass das Programm abstürzt,
war mit ein Grund per n(ative)Procs, die eben genau sowas ermöglichen
und thread sowie apc-sicher sind. Der Gedanke war halt, dass man auch solche
Dinge mit seiner Lieblingsprogrammiersprache (XProfan) programmieren kann
und die nProcs ermöglichen halt das man eben per sowas nicht auf eine andere
Programmiersprache zurückgreifen muss sondern man wie gewohnt xprofant.

Für nProcs einfach xpse mit ins Kompilerverzeichnis kopieren und in der IDE
als Kompiler oder Werkzeug angeben, Aufruf einfach xpse file -
in den Kopf der xprf einfach {$cleq} (kompilieren, linken, exe, quiet) schreiben und
schon flitzt das Programm.
 
30.01.2013  
 




Julian
Schmidt
Ok, werde mir mal anschauen. Evtl. auch in Kombination mit XPSE.

[OFFTOPIC]War gerade auf deiner der XPSE-Webseite [...] . Oben steht Copyright © 1998-2011 XProfan.Com, built DE. Tatsächlich schreiben wir schon das Jahr 2013 [/OFFTOPIC]
 
XProfan X2
Win7 Professional, SP1, AMD FX(tm)-8350 Eight-Core Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
31.01.2013  
 




Julian
Schmidt
Ich will das Beispiel mit Hook nochmal aufgreifen. [...] 
Dort existiert die Zeile:
caseof wm_user+1234

if (&ulParam==1) and (&uwParam==44)


Bei &uwParam handelt sich um den Virtuellen Tastecode / Scankey. Wobei handelt es bei &ulParam. Dachte erst es handelt sich um den Modifier, dem schein allerdings nicht so zu sein!?
Wie kann ich einen Modifier, etwa Alt, mit abfragen.
 
XProfan X2
Win7 Professional, SP1, AMD FX(tm)-8350 Eight-Core Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
19.02.2013  
 



Schau die nProc wandelt die Hook-Calls in SendMessage um,
diese wiederum empfängt das XProfan-Programm als UserMessages.

sendMessage(hWnd,wm_user+1234,long(lp,0),long(lp,8))

Windows sendet 3 Params an die Hookproc: (long code,wp,lp)  [...] 

lParam [in]. Type: LPARAM, A pointer to a KBDLLHOOKSTRUCT structure:  [...] 

Demnach hole ich mit long(lp,0): vkCode, Type: DWORD, A virtual-key code:  [...] 

und mit long(lp,8): flags,Type: DWORD, The extended-key flag, event-injected flag:  [...] 

Demnach steht die von Dir gewünscht Info nirgends bzw. wird sie separat
als Nachricht zuvor gesandt, also z.B. wenn alt oder strg gedrückt wurde.
Du müsstest demnach selbst "merken" ob eine der Tasten zuvor gedrückt o.
losgelassen wurde. Ob losgelassen oder gedrückt steht in &ulParam.

Da wäre es per Deinen Fall vielleicht besser, wenn Du in der nProc was änderst
und statt per &lParam im SendMessage nicht long(lp,8) sendest sondern
gleich mit isKey (  [...]  ) ermittelte Werte sendest und dafür vielleicht auf die Info
verzichtest, ob die Taste gedrückt oder losgelassen wurde.

Also vlt. so:
 {$cleq}
windowstyle 16
cls
userMessages wm_user+1234
initMyHook()

do{

    waitInput

    select uMessage

        caseof wm_user+1234

        print &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))/* wenn Taste gedrückt statt losgelassen *//* nicht übermitteln wenn nur die strg taste gedrückt */
    CallNextHookEx(0, Code, wp, lp)

}

 
19.02.2013  
 




Andreas
Miethe


Hallo David,

auf diese Art blockierst Du z.B. mein Snapshot-Programm. Besser die Meldung weitergeben.
 
XProfan X2
Gruss
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, danke, mein Fehler.

Ich korrigiere das auch gleich mal hier:  [...] 
 
19.02.2013  
 




Julian
Schmidt
Beim Ausführen deines Quelltextes [...]  kommt eine Warnung.
Kann ich diese Überspringen oder wie bekomme ich diese Entfernt, um den Quelltext auszuführen?

iF (19.02.13)
Da wäre es per Deinen Fall vielleicht besser, wenn Du in der nProc was änderst
und statt per &lParam im SendMessage nicht long(lp,8) sendest sondern
gleich mit isKey ( [...] ) ermittelte Werte sendest und dafür vielleicht auf die Info
verzichtest, ob die Taste gedrückt oder losgelassen wurde.


Dann müsste ich mir aber immernoch die vorhergedrückten Tasten merken, oder?
 
XProfan X2
Win7 Professional, SP1, AMD FX(tm)-8350 Eight-Core Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
19.02.2013  
 




Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

46.380 Views

Untitledvor 0 min.
Member 504445914.02.2025
H.Brill30.08.2021
Walter01.07.2018
Andreas Koch07.11.2016
Di più...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie