Je travaille sur un projet appelé UAWKS (support clavier sans fil Apple non officiel) qui aide Les utilisateurs Windows utilisent le clavier Bluetooth d'Apple. L'un des principaux objectifs d'UAWKS consiste à échanger la clé cmd kbd> (qui se comporte comme winkey kbd> sous Windows) avec Ctrl kbd>, permettant aux utilisateurs de faire < KBD> cmd kbd> + c kbd> pour copier, cmd kbd> + t kbd> pour un nouvel onglet, etc. p>
Il est actuellement développé en utilisant Autohotkey , qui fonctionnait plutôt bien sous Windows XP. Cependant, sur Vista et Windows 7, cmd kbd> + l kbd> Problèmes: P>
Il semble que gagnant kbd> + l kbd> est un accord spécial qui fait dégage tout ce qui est. P>
J'ai parcouru le code source AHK, et ils essaient de résoudre ce problème dans Quelqu'un d'autre a-t-il rencontré cela? Y a-t-il une solution de contournement? P>
SendKey () Code> dans Keyboard_Mouse.cpp (près de la ligne 883 dans V1.0.48.05), mais ça ne 't fonctionne. J'ai écrit ma propre application de crochet de clavier de basse niveau en C # et je vois le même problème. P>
3 Réponses :
Si vous pouvez détecter la clé cmd kbd> + l kbd> Pourriez-vous simplement aller de l'avant et verrouiller le poste de travail sans vous soucier de transmettre winkey kbd> + L kbd>? Vous pouvez le faire avec l'API Lockworkstation < / code>
(ou rundll32.exe user32.dll, serrureworkstation code>) p>
En fait, j'essaie de empêcher i> le poste de travail de verrouillage. Je peux le faire avec le piratage de registre, mais l'état de la Winkey est toujours gâché chaque fois que vous appuyez sur WinKey + L / cmd + L (ils sont identiques; Je suis un type de cmd et de gain de route interchangeables au-dessus, désolé pour la confusion. Sur Un clavier Apple, il s'appelle CMD, mais le conducteur du clavier Windows l'interprète comme winkey.)
J'ai essayé d'interrompre la clé Windows à l'aide du Simulateur d'entrée Windows em> bibliothèque . Ceci est mon rappel: Utilisation de ce crochet My Gauche Windows Key agit comme une touche de décalage (comme mise en œuvre et attendue) sous Win XP. éditer em>: cependant, je peux confirmer Votre observation, que ce code ne fonctionne plus sous Windows 7 plus: / Désolé, je ne peux plus vous aider. P> P>
Appuyer sur winkey kbd> + l kbd> retourne juste l code>. P>
Merci, mais je suis en train d'utiliser InputSImulator pour mon application Sandbox C #. Pour une raison quelconque, le Winkey Down est bloqué avant même d'appeler InputSimulator.Simulatedown (VKCode), l'effet finit donc à être winkey + VKCode. Et cela ne se produit qu'avec Winkey + L.
J'ai compris un moyen de le faire en C #. Il y a quatre états impliqués dans une éventuelle gagnant kbd> + l kbd> keypress séquence (aucune, gagnant kbd>, gagnant kbd> + L kbd>, l kbd>). Chaque fois que l'état win kbd> + l kbd> est atteint, définissez un drapeau ("Winlset" ci-dessous). Chaque fois que toutes les clés ont été publiées, nous vérifions cet indicateur et simulez la presse s'il a été défini. La dernière pièce du puzzle est de simuler la touche WinKey avant le CTRL KBD> - < KBD> L KBD> (pas de clé). J'ai essayé des approches similaires dans Autohotkey et elle n'a jamais fonctionné, mais il semble fonctionner parfaitement ici. P> Le code est ci-dessous. Veuillez consulter des notes explicatives en bas si vous envisagez d'utiliser ce code. P> pour la postérité: Veuillez noter que ce code utilise INPUTSIMULATOLE et LowlevelkeyboardHook, qui ne sont pas du .NET Framework. LowlevelkeyboardHook est une classe que j'ai écrit un moment qui expose qui expose des événements mondiaux de clé et de porte-clés tels que les événements C #. Il existe des exemples similaires ici , ici , et un groupe peut être trouvé ICI . P> Notez également que j'utilise system.windows.input.key, pas système .Windows.Forms.keys, qui pourrait confondre certaines personnes. System.Windows.input.key est la nouvelle énumération des touches de .NET 3.0 et supérieure, tandis que System.Windows.Forms.Keys est l'ancienne énumération des formulaires Windows. P> P>
Cet exemple ne fonctionne plus sur Windows 10 20h2 x64. J'ai utilisé les versions Nuget des bibliothèques (Lowlevelkeyboardhook 1.3.2.0 et InputSImulator 1.0.4.0)
Je devrais ajouter qu'il existe des postes de forum sur Autohotkey.com, mais les solutions sont obsolètes ou incorrectes (voir ci-dessous). En outre, ma question n'est pas vraiment limitée à Autohotkey. Je veux éventuellement ré-implémenter l'ensemble du programme en C #. C'est plus une question sur la manière dont Windows Vista et Windows 7 traite WinKey + L différemment, et si quelqu'un l'a vu / résolu cela auparavant. Autohotkey.com/forum/viewtopic.php?t=27554&Highlight=Winkey < / a> Autohotkey.com/forum/... a>