Deutsch
Forum

Hotkey Edit mit allen Scankeys

Hotkey Edit mit allen Scankeys2

 
- Seite 1 -



Julian
Schmidt
Hallo,
Ich will das Ganze um SetHotkey, GetVKey, GetModifyer erweitern.

Kommt bei mir die Fehlermeldung.


 {$iq}
Declare HKEdit&,kbdlist&, modifyerList&
Declare Edit&[]
kbdlist&=createKbdList()
modifyerList&=createModifyerList()
//
windowstyle 16
cls

whileloop 5

    Edit&[&loop-1] = Create("Edit", %hWnd, "", 10, 10+(30*(&loop-1)), 200, 24)
    SendMessage(Edit&[&loop-1],$00CF,1,0)

Endwhile

SetHotkey(Edit&[0],13,1)
initMyHook()
//
userMessages wm_user+1234
//

do{

    waitInput
    HKEdit&=0

    whileloop 5 {

        Case getfocus(Edit&[&loop-1]) : HKEdit&=Edit&[&loop-1]

    }

}

nProc initMyHook{

    return SetWindowsHookEx(13,procAddr(myLowLevelKeyboardHookProc),getModuleHandle(0),0)/*WH_KEYBOARD_LL*/

}

nProc myLowLevelKeyboardHookProc(long code,wp,lp){

    global HKEdit&,kbdlist&

    if HKEdit& {

        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(HKEdit&,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

}

createModifyerList{

    long modifyerList=create("list",0)
    addString(modifyerList,"")
    addString(modifyerList,"Shift + ")
    addString(modifyerList,"Strg + ")
    addString(modifyerList,"Strg + Shift + ")
    addString(modifyerList,"Alt + ")
    addString(modifyerList,"Alt + Shift + ")
    addString(modifyerList,"Strg + Alt + ")
    addString(modifyerList,"Strg + Shift + Alt + ")
    return modifyerList

}

SetHotKey(long hdl,key, modifyer){

    strings txt

    While 0,GetCount(kbdlist&)+1,1 {

        If Val(SubStr$(GetString$(kbdList&,&loop),1," "))=key {

            txt =  GetString$(modifyerList&,modifyer) + GetString$(kbdList&,&loop)

        }

    }

    Settext(hdl,txt)
    Return txt

}


Wenns es bessere Vorschläge gibt, wie man das Lösen könnte, bin ich auch dankbar.

Gruß

Julian

14 kB
Hochgeladen:25.02.2013
Ladeanzahl212
Herunterladen
 
XProfan X2
Win7 Professional, SP1, AMD FX(tm)-8350 Eight-Core Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
25.02.2013  
 



 
- Seite 2 -



Julian
Schmidt
Und auch SetHotKey. Bekomme aber nicht GetVKey zum laufen.
 {$iq}
Declare HKEdit&,kbdlist&, modifyerList&, count&
Declare Edit&[]
kbdlist&=createKbdList()
modifyerList&=createModifyerList()
windowstyle 16
cls
Randomize

whileloop 5

    Edit&[&loop-1] = Create("Edit", %hWnd, "", 10, 30+(30*(&loop-1)), 200, 24)
    SendMessage(Edit&[&loop-1],$00CF,1,0)
    SetHotkey(Edit&[&loop-1],RND(7), Val(SubStr$(GetString$(kbdlist&,RND(GetCount(kbdlist&)+1)),1," ")))

EndWhile

initMyHook()
userMessages wm_user+1234

do{

    Waitinput
    HKEdit&=0
    cls
    print "VKey|"+Str$(GetVKey(Edit&[count&]))
    print "Modifyer|"+Str$(GetModifyer(Edit&[count&]))
    inc count&
    Case count&>=5 : break

    whileloop 5 {

        Case getfocus(Edit&[&loop-1]) : HKEdit&=Edit&[&loop-1]

    }

}

end

nProc initMyHook{

    return SetWindowsHookEx(13,procAddr(myLowLevelKeyboardHookProc),getModuleHandle(0),0)/*WH_KEYBOARD_LL*/

}

nProc myLowLevelKeyboardHookProc(long code,wp,lp){

    global HKEdit&,kbdlist&

    if HKEdit& {

        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(HKEdit&,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

}

createModifyerList{

    long modifyerList=create("list",0)
    addString(modifyerList,"Shift + ")
    addString(modifyerList,"Strg + ")
    addString(modifyerList,"Strg + Shift + ")
    addString(modifyerList,"Alt + ")
    addString(modifyerList,"Alt + Shift + ")
    addString(modifyerList,"Strg + Alt + ")
    addString(modifyerList,"Strg + Shift + Alt + ")
    return modifyerList

}

SetHotKey(long hdl,modifyer,key_){

    Settext hdl,GetString(modifyerList&,modifyer-1)+substr(getString(kbdlist&,selectString(kbdlist&,0,str(key_)+" ")),2," ")

}

GetVKey(long hdl){

    Return getString(kbdlist&,SelectString(kbdList&,-1," "+SubStr$(Gettext(hdl),-1," + ")))

}

GetModifyer(long hdl){

    Return SelectString(modifyerList&,-1,Del$(Gettext(hdl),Len(Gettext(hdl)," + "),1," + "))+1

}

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

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
25.02.2013  
 



Das wird so auch nicht funktionieren,
Du kanst die Tabelle ja nur nach den ersten Vorkommen durchsuchen und nicht etwa
ob was mitten in einem Eintrag steht - zumindest geht das mit selectString nicht.

Machst Du einfach eine zweite Tabelle (würde ich automatisch generieren) die eben
zu Beginn mit dem Buchstaben beginnt und danach den Wert.
 
25.02.2013  
 




Julian
Schmidt
Bevor ich ne zweite Tabelle mache, nehm ich lieber ne Schleife. Lese von jeder Zeile den Text ein und vergleiche solange den 2. Teilstring bis ich den Vkey gefunden hab oder die Tabelle durchsucht ist.

Aber nicht mehr heute. Erst morgen. War für heute genug Xprofan.
 
XProfan X2
Win7 Professional, SP1, AMD FX(tm)-8350 Eight-Core Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
25.02.2013  
 



Das wäre aber nicht so sinnvoll weil Du damit die Rechenzeit auf jede Taste verlagerst
statt einmal anfangs zu Programmbeginn und eine schnellere Suche als die von
M$ per selectString kann man nicht programmieren bzw. kann man schon aber derart
angepasster Aufwandt macht hierzu einfach keinen Sinn.
 
25.02.2013  
 




Julian
Schmidt
Okay, erstell ich nun immer beim Progammstart. So funktioniert es jetzt.
 {$iq}
Declare HKEdit&,kbdlist&, kbdlist_&, modifyerList&, count&
Declare Edit&[]
kbdlist&=createKbdList()
kbdlist_&=createKbdList_()
modifyerList&=createModifyerList()
windowstyle 16
cls
Randomize

whileloop 5

    Edit&[&loop-1] = Create("Edit", %hWnd, "", 10, 30+(30*(&loop-1)), 200, 24)
    SendMessage(Edit&[&loop-1],$00CF,1,0)
    SetHotkey(Edit&[&loop-1],RND(7), Val(SubStr$(GetString$(kbdlist&,RND(GetCount(kbdlist&)+1)),1," ")))

EndWhile

initMyHook()
userMessages wm_user+1234

do{

    Waitinput
    HKEdit&=0
    CLS

    If count&<5 {

        print "VKey|"+Str$(GetVKey(Edit&[count&]))
        print "Modifyer|"+Str$(GetModifyer(Edit&[count&]))

    }

    inc count&

    whileloop 5 {

        Case getfocus(Edit&[&loop-1]) : HKEdit&=Edit&[&loop-1]

    }

}

end

nProc initMyHook{

    return SetWindowsHookEx(13,procAddr(myLowLevelKeyboardHookProc),getModuleHandle(0),0)/*WH_KEYBOARD_LL*/

}

nProc myLowLevelKeyboardHookProc(long code,wp,lp){

    global HKEdit&,kbdlist&,modifyerList&

    if HKEdit& {

        ifnot long(lp,8)==128 {

            code=long(lp,0)
            string mor
            casenot code>159 or code==16 or code==17 or code==18 : mor=GetString(modifyerList&,iskey(vk_shift)+(iskey(vk_control)*2)+(iskey(vk_menu)*4)-1)
            setText(HKEdit&,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

}

createKbdList_{

    long kbdList_=create("list",0)

    whileloop 0,getcount(kbdlist&) {

        addString(kbdList_,SubStr$(GetString$(kbdlist&,&loop),2," ")+" "+SubStr$(GetString$(kbdlist&,&loop),1," "))

    }

    Return kbdList_

}

createModifyerList{

    long modifyerList=create("list",0)
    addString(modifyerList,"Shift + ")
    addString(modifyerList,"Strg + ")
    addString(modifyerList,"Strg + Shift + ")
    addString(modifyerList,"Alt + ")
    addString(modifyerList,"Alt + Shift + ")
    addString(modifyerList,"Strg + Alt + ")
    addString(modifyerList,"Strg + Shift + Alt + ")
    return modifyerList

}

SetHotKey(long hdl,modifyer,key_){

    Settext hdl,GetString(modifyerList&,modifyer-1)+substr(getString(kbdlist&,selectString(kbdlist&,0,str(key_)+" ")),2," ")

}

GetVKey(long hdl){

    Return getString(kbdlist&,SelectString(kbdList_&,-1,SubStr$(Gettext(hdl),-1," + ")+" "))

}

GetModifyer(long hdl){

    Return SelectString(modifyerList&,-1,Del$(Gettext(hdl),Len(Gettext(hdl)," + "),1," + "))+1

}


Noch irgendwelche Anmerkungen? Mir gefallen z.B. die zwei Procs und Variablen createKbdList nicht so. Kann ich das irgendwie clever auf eins minimieren.

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

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
26.02.2013  
 



Ob das in dem Fall "sinnvoll" ist mal hingestellt aber ich verpacke inhaltlich
Gleiches gerne in Pseudoklassen,

also wenn Du z.B. zwei Keyboardlisten hast dann böte sich sowas an wie:
long kbLists=globalAlloc(gPTR,8)
// oder in nProcs noch einfach aber das Selbe:
long kbLists=dim(8)

wobei man dann schreiben kann:
long kbLists&=myList1,myList2

wobei man dann nur 1 Variable kbLists hat aus der man den Rest ziehen kann z.B. per:
print "myList1:",long(kbLists,0)

was man wiederum bei größeren solcher "Klassen" übertreiben kann indem man
für Offsets Konstanten erfindet wie z.B.:

Nach dem Prinzip hat man nur noch 1 Handle aus dem man alle anderen Handles
ziehen kann was unter Umständen durchaus Sinn machen kann z.B. wenn man
z.B. als gwl_userdata nur 1 Wert mitliefern kann. Nach dem Prinzip macht M$ das
nicht anders bzw. baut seine Strukturen auch so auf.

In Deinem Beispiel imho jedoch unnötiger Mehraufwand auch für den Computer/
ergo unnötig hoher Stromverbrauch/ Systemlast.
 
26.02.2013  
 




Julian
Schmidt
Das heißt, du emphielst es so zu lassen!?
 
XProfan X2
Win7 Professional, SP1, AMD FX(tm)-8350 Eight-Core Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
26.02.2013  
 



Fast,

statt:
Declare HKEdit&,kbdlist&, kbdlist_&, modifyerList&, count&
Declare Edit&[]
kbdlist&=createKbdList()
kbdlist_&=createKbdList_()

würde ich vermutlich eher:  [...]  schreiben.

Bei dem kleinen Code macht solch "klassifizierung" imho aber nicht wirklich Sinn,
vlt. anders wenn man gleich von Anfang an so tippt.
 
26.02.2013  
 




Julian
Schmidt
Bin imho nicht sicher ob das richtig ist.
 {$iq}
Declare HKEdit&,count&
Declare Edit&[]
long 	kbd.hList.ordToKeyname=	create.ordToKeynameList(),\
kbd.hList.keynameToOrd=	create.keynameToOrdList(),\
kbd.hList.modyfier=	create.modyfierList()
windowstyle 16
cls
Randomize

whileloop 0,4

    Edit&[&loop] = Create("Edit", %hWnd, "", 10, 30+(30*(&loop)), 200, 24)
    SendMessage(Edit&[&loop],$00CF,1,0)
    SetHotkey(Edit&[&loop],RND(7), Val(SubStr$(GetString$(kbd.hList.ordToKeyname,RND(GetCount(kbd.hList.ordToKeyname)+1)),1," ")))

EndWhile

initMyHook()
userMessages wm_user+1234

do{

    Waitinput
    HKEdit&=0
    CLS

    If count&<5 {

        print "VKey|"+Str$(GetVKey(Edit&[count&]))
        print "Modifyer|"+Str$(GetModifyer(Edit&[count&]))

    }

    inc count&

    whileloop 5 {

        Case getfocus(Edit&[&loop-1]) : HKEdit&=Edit&[&loop-1]

    }

}

end

nProc initMyHook{

    return SetWindowsHookEx(13,procAddr(myLowLevelKeyboardHookProc),getModuleHandle(0),0)/*WH_KEYBOARD_LL*/

}

nProc myLowLevelKeyboardHookProc(long code,wp,lp){

    global HKEdit&,kbd.hList.ordToKeyname,kbd.hList.modyfier

    if HKEdit& {

        ifnot long(lp,8)==128 {

            code=long(lp,0)
            string mor
            casenot code>159 or code==16 or code==17 or code==18 : mor=GetString(kbd.hList.modyfier,iskey(vk_shift)+(iskey(vk_control)*2)+(iskey(vk_menu)*4)-1)
            setText(HKEdit&,mor+substr(getString(kbd.hList.ordToKeyname,selectString(kbd.hList.ordToKeyname,0,str(code)+" ")),2," "))

        }

    }

    CallNextHookEx(0, Code, wp, lp)

}

nProc selectString(long lb,srcFrom,string src){

    return sendMessage(lb,lb_selectString,srcFrom,src)

}

create.ordToKeynameList{

    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

}

create.keynameToOrdList(){

    long kbdList_=create("list",0)

    whileloop 0,getcount(kbd.hList.ordToKeyname) {

        addString(kbdList_,SubStr$(GetString$(kbd.hList.ordToKeyname,&loop),2," ")+" "+SubStr$(GetString$(kbd.hList.ordToKeyname,&loop),1," "))

    }

    Return kbdList_

}

create.modyfierList{

    long modifyerList=create("list",0)
    addString(modifyerList,"Shift + ")
    addString(modifyerList,"Strg + ")
    addString(modifyerList,"Strg + Shift + ")
    addString(modifyerList,"Alt + ")
    addString(modifyerList,"Alt + Shift + ")
    addString(modifyerList,"Strg + Alt + ")
    addString(modifyerList,"Strg + Shift + Alt + ")
    return modifyerList

}

SetHotKey(long hdl,modifyer,key_){

    Settext hdl,GetString(kbd.hList.modyfier,modifyer-1)+substr(getString(kbd.hList.ordToKeyname,selectString(kbd.hList.ordToKeyname,0,str(key_)+" ")),2," ")

}

GetVKey(long hdl){

    Return getString(kbd.hList.ordToKeyname,SelectString(kbd.hList.keynameToOrd,-1,SubStr$(Gettext(hdl),-1," + ")+" "))

}

GetModifyer(long hdl){

    Return SelectString(kbd.hList.modyfier,-1,Del$(Gettext(hdl),Len(Gettext(hdl)," + "),1," + "))+1

}


Kommt


HOOK2.asm(453) : Error A2102: Symbol not defined : KBD
HOOK2.asm(610) : Error A2102: Symbol not defined : KBD
HOOK2.asm(615) : Error A2102: Symbol not defined : KBD

Gefällt mir von der Schreibweise aber wesentlich besser.
 
XProfan X2
Win7 Professional, SP1, AMD FX(tm)-8350 Eight-Core Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
26.02.2013  
 



Ich schreibs ja:  [...] 

Deklariert in nativen Funktionen Long-Variablen mit Postfix &
und initialisiert die Variablen mit den Werten gleichnamiger
globaler per Declare deklarierter Variablen
.

Globale Speicher für nProcs benötigen diese besondere Schreibweise,
das ist eben wiederum ein spezieller Fall.

Du könntest:
declare myGlobalHelperMem&
myGlobalHelperMem&=globalAlloc(gPTR,12)
long myGlobalHelperMem&,0=kbd.hList.ordToKeyname,kbd.hList.keynameToOrd,...
// und in der nProc nur noch eine Globale verwenden:

nProc myLowLevelKeyboardHookProc ...

    global myGlobalHelperMem&
    // wobei kbd.hList.ordToKeyname dann lediglich long(myGlobalHelperMem&,0) wäre
 
26.02.2013  
 




Julian
Schmidt
Ich glaub ich bleib dann lieber bei der alten Variante. So tut es das Code nur Endlos kompliziert machen.
 
XProfan X2
Win7 Professional, SP1, AMD FX(tm)-8350 Eight-Core Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
26.02.2013  
 



 
- Seite 3 -


Jupp!
 
26.02.2013  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

27.102 Betrachtungen

Unbenanntvor 0 min.
Member 504445914.02.2025
H.Brill14.08.2024
Rainer Hoefs20.05.2019
Mindanao06.06.2017
Mehr...

Themeninformationen

Dieses Thema hat 2 Teilnehmer:

Julian Schmidt (14x)
iF (11x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


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