Je dois écrire une API C# pour l'enregistrement des raccourcis clavier globaux. Pour recevoir le message WM_HOTKEY, j'utilise un System.Windows.Forms.NativeWindow
et exécute une propre boucle de message avec System.Windows.Forms.Application.Run(ApplicationContext)
. Lorsque l'utilisateur veut enregistrer une touche de raccourci, il doit exécuter une méthode appelée RegisterHotkey()
qui arrête la boucle de message avec System.Windows.Forms.ApplicationContext.ExitThread()
, enregistre la touche de raccourci avec la fonction RegisterHotKey()
(P/Invoke) et redémarre la boucle de message. Ceci est nécessaire, car RegisterHotKey()
doit être appelée dans le même thread que celui qui a créé la fenêtre, qui doit à nouveau être instancié dans le même thread qui exécute la boucle de message.C# - En attente de la boucle de message WinForms
Le problème est que si l'utilisateur appelle la méthode peu RegisterHotkey()
après le démarrage du fil qui exécute la boucle de message, ApplicationContext.ExitThread()
est appelé avant Application.Run(ApplicationContext)
et donc les blocs d'application indéfiniment. Est-ce que quelqu'un connaît une approche pour attendre le début d'une boucle de message?
Merci d'avance!
Cela n'a pas beaucoup de sens. Appelez simplement RegisterHotkey() * avant de commencer la boucle du message. En outre, une vraie fenêtre est requise, vous devez avoir un handle valide. –
Puisque je ne veux pas démarrer une boucle de message par raccourci clavier, je dois arrêter et redémarrer celui existant pour appeler RegisterHotKey() dans le même fil. Et puisque mon code fonctionne, je ne pense pas avoir besoin d'une vraie fenêtre, le handle valide est créé par 'NativeWindow.CreateHandle (CreateParams)' à la place. –