Question

Je cherche un moyen de détecter dans le programme hotkeys système. Mon application supporte les raccourcis clavier configurables pour faire des choses différentes, et je voudrais être en mesure de dire si une autre application a accroché un déjà ou il est un raccourci clavier intégré de Windows (comme Win-L pour verrouiller le poste de travail).

Et si elle est une autre application qui est propriétaire du raccourci clavier, je voudrais être en mesure de montrer que pour l'utilisateur. Au moins le nom de l'exe.

Je suis au courant de trois façons de faire des raccourcis clavier:

  • crochet du système en utilisant
  • API standard de
  • Utilisation de la fonction de raccourci clavier dans la fenêtre des propriétés d'un raccourci
  • Polling async état clé et répondre

Je doute que je peux détecter le troisième type, mais qu'en est-les deux autres? Et y at-il d'autres situations que je dois savoir?

Était-ce utile?

La solution

Je peux penser à trois façons de le faire avec l'API standard:

  • RegisterHotkey

  • SetWindowsHookEx (WH_KEYBOARD)

  • SetWindowsHookEx (WH_LL_KEYBOARD)

Avec la première approche, vous obtenez la valeur de retour si une autre application déjà enregistré le raccourci clavier même (ou si un raccourci utilise ce raccourci clavier ou Explorer.exe enregistré le raccourci clavier parce qu'il est Win + E ou gagnez + R ). Vous ne recevez pas le nom de l'application de cette façon, cependant.

Utilisation de Windows crochets ou des états clés pour « async » hotkeys: Je ne pense pas qu'il est possible de détecter là hotkeys, puisque vous pouvez utiliser les raccourcis clavier dans un contexte (comme remplacer « t » par « IRST » si les quatre derniers les frappes étaient « Fris ») de cette façon. Vous pouvez injecter le raccourci clavier à l'aide keybd_event (avec fenêtre concentré) et le test si l'événement « passe à travers »; sur les autres mains, certains cas de « raccourcis clavier » qui sont mises en œuvre par des crochets ne consomment pas la combinaison de touches de sorte qu'il sera toujours passer.

L'approche que je voudrais utiliser: Tout d'abord assurez-vous que pour entrer dans un raccourci, vous devez saisir exactement ce raccourci dans votre boîte de raccourci (si cela échoue, l'utilisateur verra quelle application utilise). Ensuite, utilisez RegisterHotkey, vous remarquerez (dans les prochaines sessions) si un autre « bien se comporter » l'application a essayé de voler ce raccourci de vous.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top