Moin.
Ich arbeite gerade an einer Pinball Engine und stoß dabei auf ein Windowsproblem mit den Shifttasten.
Ich will die linke und rechte Shifttaste für die Flipperhebel verwenden.. das ist auch nicht as Problem.
Das Problem ist das bei schnellen drücken einer Shifttaste hintereinander Windows mit dem Dialog ankommt ob man die Einrastfunktion für die Shifttaste verwenden möchte. Dieser Dialog haut das Spiel aus dem Fullscreen raus.
Klar kann jeder nun hingehen und die Einrastfunktion selber deaktivieren, aber das ist ja nun mehr als unschön.
Und wie ich gerade noch mit drei Shootern, die alle Shift als Renntaste verwenden, getestet habe kommt dieser Dialog dort nicht. Ergo muss man diese Eingabehilfe doch unterbinden können..
..aber wie?
Moderiert von
Narses: Beiträge zusammengefasstOk, ich konnte das hier bei MS finden :
msdn.microsoft.com/e...08%28v=vs.85%29.aspx
Soweit so gut. Da ich leider weder mit C noch mit der SystemParametersInfo Anweisung gut vertraut bin denke ich das ich hier etwas falsch mache.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| var
g_StartupStickyKeys : STICKYKEYS; g_StartupToggleKeys : TOGGLEKEYS; g_StartupFilterKeys : FILTERKEYS;
begin
SystemParametersInfo(SPI_GETSTICKYKEYS, 0, @g_StartupStickyKeys, 0); SystemParametersInfo(SPI_GETTOGGLEKEYS, 0, @g_StartupToggleKeys, 0); SystemParametersInfo(SPI_GETFILTERKEYS, 0, @g_StartupFilterKeys, 0);
end; |
Alle Werte, alle Flags bleiben bei 0, also es wird scheinbar nichts ausgelesen. In der C Form werden diese Befehle so verwendet.
C#-Quelltext
1:
| SystemParametersInfo(SPI_GETSTICKYKEYS, sizeof(STICKYKEYS), &g_StartupStickyKeys, 0); |
Muss die Delphizeile anders aussehen?
Moderiert von
Narses: Beiträge zusammengefassthabs
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| g_startupstickykeys.cbSize := sizeof (stickykeys); SystemParametersInfo(SPI_GETSTICKYKEYS, sizeof (stickykeys), @g_StartupStickyKeys, 0); g_startuptogglekeys.cbSize := sizeof (togglekeys); SystemParametersInfo(SPI_GETTOGGLEKEYS, sizeof(togglekeys), @g_StartupToggleKeys, 0); g_startupfilterkeys.cbSize := sizeof (filterkeys); SystemParametersInfo(SPI_GETFILTERKEYS, sizeof(filterkeys), @g_StartupFilterKeys, 0); |
So wirds richtig ausgelesen.
Beim Start des Spiels setze ich alle Flags einfach auf 0 und beim beenden wieder auf den urprünglich gelesenen Wert zurück. Klappt supi.