2015-08-15 1 views
1

J'ai essayé de comprendre cela depuis un moment et je me demandais si vous pouviez m'aider. Avec AppleScript, il y a deux fonctions cachées disponibles dans l'application Événements système qui vous permettent de pousser une touche vers le bas (en la maintenant enfoncée pendant que d'autres actions, comme cliquer sont terminées), puis en relançant la touche.Envoi de la touche System Events vers le bas/vers le haut à l'aide de JXA

par exemple. voir la réponse ici Applescript to run Detect Displays où "touche en haut" et "touche en bas" sont utilisés pendant qu'un clic est en cours.

Mais dans l'intérêt de cet exemple, utilisons quelque chose de très simple, un raccourci d'enregistrement.

Le AppleScript ressemble à ceci:

tell application "System Events" 
    key down command 
    keystroke "s" 
    key up command 
end tell 

Le plus proche que je l'ai appris à cela dans JXA est la suivante, mais peu importe ce que je passe à keyDown, il envoie la lettre « a »:

events = Application("System Events") 
events.keyDown("command") 
events.keystroke("s") 
events.keyUp("command") 

Des idées?

Merci!
Fotis

+0

Ne jamais utiliser 'clé up' /' 'down' clé dans système Events' à moins que vous n'avez pas d'autre choix. Ici, vous avez: 'keystroke 's' using command down' – vadian

+0

Selon mon post, j'ai seulement utilisé cmd + s comme exemple. L'objectif initial était de reproduire l'AppleScript à l'article http://stackoverflow.com/questions/12640643/applescript-to-run-detect-displays, qui, selon moi, doit utiliser des actions de touches enfoncées et enfoncées lorsque le script clique sur un bouton pendant que le la touche est maintenue enfoncée. Vous pouvez voir mon script terminé sur https://github.com/fgimian/macbuild/blob/master/detectdisplays.js –

+0

Je l'ai, je voulais juste mentionner que l'utilisation de 'key up' /' key down' est assez dangereux. Si une erreur survient alors que la touche est enfoncée, elle reste enfoncée! – vadian

Répondre

2

Ok, la solution était difficile à trouver, mais Je l'ai :)

Vous pouvez utiliser les chaînes spéciales ECMD (commande), EOPT (option) et ECNT (contrôle) pour ce faire comme défini dans SystemEvents.h.

En tant que tel, le code suivant fonctionne!

events = Application("System Events") 
events.keyDown("eCmd") 
events.keystroke("s") 
events.keyUp("eCmd") 

Hope this helps quelqu'un là-bas.

0

Qu'en est:

events = Application("System Events") 
events.keystroke("s", { 
    using:"command down" 
}); 

Avoir une belle journée, Michael/Hamburg

+0

Appréciez la réponse, et ce serait en effet une meilleure façon de mettre en œuvre le code que j'ai posté. Cependant, selon mon post, je tentais de reproduire l'AppleScript à l'adresse http://stackoverflow.com/questions/12640643/applescript-to-run-detect-displays et seulement fourni le script de mon Cmd + comme exemple pour simplifier mon question. –