[API] RegisterHotKey in games

Pagina: 1
Acties:
  • 1.090 views sinds 30-01-2008
  • Reageer

  • Mephix
  • Registratie: Augustus 2001
  • Laatst online: 25-11-2025
Ik ben bezig met een tooltje om via hotkeys tijdens het spelen van games allerlei dingen te regelen (bijvoorbeeld volume control). De beste manier leek mij dit te doen via de windows api mbv RegisterHotKey.

Dit had ik al vaker gedaan en werkt eigenlijk perfect. In een aantal games (meestal wat oudere, zoals SoF II) kan ik het tooltje gebruiken.

In de nieuwe games (oa. BF2) lijken hotkeys op de een of andere manier afgevangen te worden door de game zelf. De hotkey wordt wel geregged in windows, maar het event voor WndProc wordt niet afgevuurd. Zelfs als ik bijvoorbeeld Alt-Tab als hotkey instel, dan werkt dit in Windows goed (kan dan dus niet meer alt-tabben), maar in de game reageert de hotkey weer gewoon zoals alt-tab dat normaal doet (switched naar ander window).

Waarom werkt dit in de ene game wel en in de andere niet? En hoe kan ik dit zo aanpassen dat het wel werkt ?

  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

quote: msdn
When a key is pressed, the system looks for a match against all hot keys. Upon finding a match, the system posts the WM_HOTKEY message to the message queue of the thread that registered the hot key. This message is posted to the beginning of the queue so it is removed by the next iteration of the message loop.

This function cannot associate a hot key with a window created by another thread.

RegisterHotKey fails if the keystrokes specified for the hot key have already been registered by another hot key.

If the window identified by the hWnd parameter already registered a hot key with the same identifier as that specified by the id parameter, the new values for the fsModifiers and vk parameters replace the previously specified values for these parameters.

Windows NT4 and Windows 2000/XP: The F12 key is reserved for use by the debugger at all times, so it should not be registered as a hot key. Even when you are not debugging an application, F12 is reserved in case a kernel-mode debugger or a just-in-time debugger is resident.
Zeker dat je de MSDN goed hebt gelezen ? vang je uberhaupt de returncode van RegisterHotKey wel op?

ASSUME makes an ASS out of U and ME


  • Mephix
  • Registratie: Augustus 2001
  • Laatst online: 25-11-2025
HIGHGuY schreef op zondag 15 oktober 2006 @ 18:24:
[...]

Zeker dat je de MSDN goed hebt gelezen ? vang je uberhaupt de returncode van RegisterHotKey wel op?
Ik weet dat bepaalde keys niet gebruikt kunnen worden, omdat deze gereserveerd zijn door Windows. Ik heb daarom ook verschillende toetsencombinaties geregistreerd als hotkey. Deze werken ook gewoon in Windows en een groot aantal games. Alleen bij sommige games reageert de hotkey niet. Dit heb ik overigens ook met standaard tooltjes die je kunt downloaden (de reden waarom ik zelf aan het proggen ben geslagen).

http://www.aquariussoft.com/pc-keyboard-hotkey/ is zo'n standaard tooltje, die precies hetzelfde probleem heeft.

De return value van RegisterHotKey lees ik wel uit. Deze lijkt ook gewoon goed te zijn, zelfs als ik het tooltje opstart nadat ik eerst bijvoorbeeld BF2 heb opgestart.

Oftewel... op de een of andere manier moeten games als BF2 nog onder de Windows API de keys afvangen, of misschien via de API regelen dat hotkeys enkel naar BF2 worden doorgegeven. Dus, kan ik hier een andere methode dan API gebruiken, of kan toch forceren dat de keys doorgegeven worden?

  • pietje63
  • Registratie: Juli 2001
  • Laatst online: 12-02 07:48

pietje63

RTFM

In de categorie 'ik roep maar wat'
Heeft het misschien te maken met DirectX dat er op een of andere manier tussen zit?
Heeft het misschien te maken met een anti-cheat systeem in de game?
Heb je misschien een multimedia tobo om te testen of deze extra functies het wel doen tijdens deze games?

De grootste Nederlandstalige database met informatie over computers met zoekfunctie!!


  • Tjoekbezoer
  • Registratie: Maart 2003
  • Laatst online: 06-12-2025
pietje63 schreef op maandag 16 oktober 2006 @ 13:26:
In de categorie 'ik roep maar wat'
Heeft het misschien te maken met DirectX dat er op een of andere manier tussen zit?
Die klinkt wel logisch. Dat zou ook verklaren waarom games als SoF het wel doen (OpenGL).