E.g. avec winamp (sous Windows au moins), vous pouvez jouer en mode plein écran avec winamp en arrière-plan, et utiliser les boutons média * pour contrôler le son. Winamp n'a pas besoin de se concentrer, permettant au jeu de continuer en plein écran. Je préférerais écrire ceci en Java mais ça ne marchera probablement pas (capturer des frappes sans focus est déjà difficile dans Java afaik), donc n'importe quelle solution C# est aussi bien. Donc, la question fondamentale est: comment capturer des frappes sans focus? *) Je crois que les boutons «Précédent/Suivant/Arrêter/Courrier/Recherche/Favoris/Web/Maison» sont appelés boutons médias, mais un meilleur nom serait le bienvenu :).Capture des frappes sans mise au point
Répondre
Les crochets de fenêtre de bas niveau sont une façon de le faire. Voici un article et voici un peu plus d'informations de MSDN.
Ceci est une vue partielle de ce que le code peut ressembler à:
private IntPtr LowLevelKeyboardHook(int nCode, WindowsMessages wParam, [In] KBDLLHOOKSTRUCT lParam)
{
bool callNext = true;
bool isKeyDown = (wParam == WindowsMessages.KEYDOWN || wParam == WindowsMessages.SYSKEYDOWN);
bool isKeyUp = (wParam == WindowsMessages.KEYUP || wParam == WindowsMessages.SYSKEYUP);
if ((nCode >= 0) && (isKeyDown || isKeyUp))
{
// the virtual key codes and the winforms Keys have the same enumeration
// so we can freely cast back and forth between them
Keys key = (Keys)lParam.vkCode;
// Do your other processing here...
}
// if any handler returned false, trap the message
return (callNext) ? User32.CallNextHookEx(_mainHook, nCode, wParam, lParam) : _nullNext;
}
/// <summary>
/// Registers the user's LowLevelKeyboardProc with the system in order to
/// intercept any keyboard events before processed in the regular fashion.
/// This can be used to log all keyboard events or ignore them.
/// </summary>
/// <param name="hook">Callback function to call whenever a keyboard event occurs.</param>
/// <returns>The IntPtr assigned by the Windows's sytem that defines the callback.</returns>
private IntPtr RegisterLowLevelHook(LowLevelKeyboardProc hook)
{
IntPtr handle = IntPtr.Zero;
using (Process currentProcess = Process.GetCurrentProcess())
using (ProcessModule currentModule = currentProcess.MainModule)
{
IntPtr module = Kernel32.GetModuleHandle(currentModule.ModuleName);
handle = User32.SetWindowsHookEx(HookType.KEYBOARD_LL, hook, module, 0);
}
return handle;
}
/// <summary>
/// Unregisters a previously registered callback from the low-level chain.
/// </summary>
/// <param name="hook">IntPtr previously assigned to the low-level chain.
/// Users should have stored the value given by
/// <see cref="Drs.Interop.Win32.LowLevelKeyboard.RegisterLowLevelHook"/>,
/// and use that value as the parameter into this function.</param>
/// <returns>True if the hook was removed, false otherwise.</returns>
private bool UnregisterLowLevelHook(IntPtr hook)
{
return User32.UnhookWindowsHookEx(hook);
}
Tout mettre en œuvre toutes les déclarations P/Invoke nécessaire, et cela devrait fonctionner. J'utilise cette approche dans mon application et cela fonctionne très bien.
Ces types ne sont pas reconnus sur mon application et il ne compile pas (WindowsMessages, User32 etc ...) qu'avez-vous fait pour le faire fonctionner? avez-vous ce code en ligne par hasard? –
Non, ce sont les déclarations que vous devez déclarer. Je n'ai pas ce code en ligne, mais vous pouvez créer des stubs simples en utilisant les signatures P/Invoke de http://www.pinvoke.net. –
Qu'est ce que la variable _nullNext? –
En Java, il y a deux bibliothèques qui peuvent le faire:
- JIntellitype (Windows)
- JXGrabKey (X11)
- 1. C# détecter l'application mise au point mise au point
- 2. Mise au point dans ASP
- 3. formes de mise au point
- 4. Mise au point de Windows Vista Problème
- 5. Mise au point de OutputCache dans ASP.Net
- 6. Mise au point Interwoven Worksite Web Services
- 7. Mise au point de l'erreur .Net OracleClient
- 8. jQuery ScrollBar - Pas de mise au point?
- 9. Pourquoi Selenium ne capture-t-il pas mes frappes?
- 10. Spécification Où mise au point dans Textarea
- 11. Mesure de mise au point Javascript
- 12. style de mise au point de contrôle
- 13. cellule de mise au point flex datagrid
- 14. Mise au point à l'échelle du système
- 15. Mise au point par programmation d'un hippo.CanvasEntry?
- 16. Mise au point du champ de texte
- 17. Android: Récupérer la mise au point en utilisant SurfaceView
- 18. C# Roulette de la souris de la souris ListView sans mise au point
- 19. Vérification de la mise au point d'un élément DOM
- 20. Internet Explorer/Problème de mise au point jQuery
- 21. Pocket IE: la mise au point est parfois perdue
- 22. Figure Out si la fenêtre est mise au point
- 23. Réglage de la mise au point après animation Div
- 24. WPF Datagrid -DataGridTemplateColumn onglet problème de mise au point
- 25. Zone de texte Windows CE Problème de mise au point
- 26. Mise au point sur un QDockWidget tabulé dans PyQt
- 27. wxpython drag & drop problème de mise au point
- 28. entrée: mise au point ne fonctionne pas sur Firefox
- 29. Mise au point des arguments de la ligne de commande en C#
- 30. Mise au point automatique des parties d'un ListBoxItem sur la sélection
Je les appelle touches multimédias ou touches multimédia aussi, ne sont pas connaître un meilleur nom. – Luc