Seite 1 von 1

AddKeyboardShortcut(#Window, Shortcut, Event)

Verfasst: 18.11.2006 21:57
von Brügge
hi ich habe ein Musikabspielprogramm geschrieben. wenn ich jetzt z.B. Counterstrike oder so starte dann läuft das im hintergrund die shortcuts funken dann aber nicht :( brauche die aber zum Lauter oder Leiser stellen

kann ich das so einstellen, das die shortcuts funktionieren, obwohl the window nicht aktiv ist?


thx!

Verfasst: 18.11.2006 23:07
von Alves
Wenn du keinen Wert auf plattforumunabhängigkeit legst (wirst du nicht, da CS nicht auf Mac oder Linux ohne WINE läuft), dann nimm die API Getasynckeystate_(#vk_shift) Shift ist jetzt nur ein beispiel. Egal wo es gedrückt, die API merkts immer.

Verfasst: 18.11.2006 23:10
von a14xerus
*GG* brüggekennt diesen hinweis schon von mir :wink:

problem:
The GetAsyncKeyState function determines whether a key is up or down at the time the function is called, and whether the key was pressed after a previous call to GetAsyncKeyState.

wer kennt dazu mal ein komplettes beispiel?

Verfasst: 18.11.2006 23:12
von Brügge
das ist schon fast genial aber ich habe dort ein problem und zwar soll das die lautstärke regeln und wenn der die abfrage mach muss ich nur einmal drücken und der denkt ich drücke durchgehend... also muss ich dem segen, das das nicht mehr gedrückt ist. thx! geht das damit?

Verfasst: 18.11.2006 23:17
von Alves
Nicht dirwekt, aber warte mal auf Kaeru, der hat schon tausendmal ein Beispiel mit Flags hier im Forum durchgekaut. (Das war Ironie)
So möge er hingehen und die Suche bemühen. :allright:

Verfasst: 18.11.2006 23:20
von #NULL
@a14xerus
If the function succeeds, the return value specifies whether the key was pressed since the last call to GetAsyncKeyState, and whether the key is currently up or down. If the most significant bit is set, the key is down, and if the least significant bit is set, the key was pressed after the previous call to GetAsyncKeyState

Code: Alles auswählen

GetAsyncKeyState_(..) & 1<<16

Verfasst: 18.11.2006 23:21
von Brügge
wie resette ich den jetzt? oder geht das nicht

Verfasst: 19.11.2006 09:49
von a14xerus
#NULL hat geschrieben:@a14xerus

Code: Alles auswählen

GetAsyncKeyState_(..) & 1<<16
was bezweckt das & 1<<16 ?

Verfasst: 19.11.2006 10:39
von Alves
Such mal nach "flag AND getasynckeystate*, ohne Anführungszeichen.

Verfasst: 19.11.2006 11:39
von #NULL
>> was bezweckt das & 1<<16 ?

im rückgabewert ist das höchste bit gesetzt, wenn die taste momentan gedrückt ist, und das niedrigste bit ist gesetzt wenn die taste seit dem letzten aufruf der funktion gedrückt wurde. wenn du nur das erste wissen willst, must du die information des niedrigsten bits wegfiltern:
[allerdings muß es eigentlich .. GetAsyncKeyState_(..) & 1<<15 .. heißen, sorry]

dez 1 entspricht 16bit bin 00000000 00000001
nach einem 15-fachen shift mit dem links-shift-operator wird es zu
bin 10000000 00000000. wenn du diese zahl durch das binäre And (&) mit dem rückgabewert verküpfst, hängt das resulttat nur noch von dem bit ab das dich interessiert.

taste ist gedrückt UND wurde gedrückt:
GetAsyncKeyState_(..) ergibt bin 10000000 00000001
...
10000000 00000001 & 10000000 00000000 = 10000000 00000000 = TRUE

taste ist NICHT gedrückt UND wurde gedrückt:
GetAsyncKeyState_(..) ergibt bin 00000000 00000001
...
00000000 00000001 & 10000000 00000000 = 00000000 00000000 = FALSE

[[schuldigung fürs zulabern :freak: <) , falls du nur wiissen wolltest, was die operatoren machen..
'<<' bewirkt eine linksverschiebung der bitwerte um die angegebene anzahl stellen:
%11001011 << 0 = %11001011
%11001011 << 1 = %10010110
%11001011 << 2 = %00101100
'&' bewirkt eine AND-auswertung, für jede bit-stelle einzeln:
%11001111 &
%10101100 =
%10001100
]]




das gleiche könnte man auch so erreichen:
...
If GetAsyncKeyState_(#taste) And GetAsyncKeyState_(#taste)
...
da die 'wurde-gedrückt-information' vom zeiten proc-aufrunf ja höchstwahrscheinlich immer false ist.