2009-12-08 9 views
5

J'essaie d'obtenir la résolution d'affichage actuelle de mes deux écrans en fonction de l'emplacement du curseur de la souris. C'est-à-dire que lorsque le curseur de la souris est sur le premier affichage, je veux obtenir la résolution de cet affichage.AppleScript comment obtenir la résolution d'affichage actuelle?

Avec un script shell que je peux obtenir les deux résolutions:

set screenWidth to (do shell script "system_profiler SPDisplaysDataType | grep Resolution | awk '{print $2}'") 

Mais je ne suis pas que l'affichage est actuellement « actif ».

Des idées? Applescript n'a aucun accès à l'emplacement du curseur, même via les événements système.

Répondre

8

Pardon.

[Il existe quelques solutions commerciales, mais je suppose qu'elles ne valent pas la peine dans ce cas? Je suppose que je pourrais aussi mettre en place un outil de ligne de commande rapide qui renvoie juste l'emplacement actuel du curseur ... vaut la peine?]

p.s. awk est grande de trouver des lignes correspondant à:

set screenWidth to (do shell script "system_profiler SPDisplaysDataType | awk '/Resolution/{print $2}'") 
4

Par souci d'exhaustivité, voici le code à saisir la hauteur de l'écran:

do shell script "system_profiler SPDisplaysDataType | awk '/Resolution/{print $4}'"} 
6

Cela fait l'affaire:

tell application "Finder" 
set screen_resolution to bounds of window of desktop 
end tell 
+2

qui ne fonctionne qu'avec un seul écran cependant. – user495470

+0

Avec plusieurs affichages, 'bounds of window of desktop' signale une taille * unique, combinée * qui est le * rectangle englobant autour de tous les affichages *, en fonction de leur disposition spatiale telle que définie dans les Préférences Système. En d'autres termes: vous ne pouvez pas dire combien il y a d'affichages et le rectangle signalé peut contenir des zones qui ne sont pas réellement affichables. De même, les deux objets Standard window 'window' (fenêtres des applications AppleScriptable, via' bounds') et les objets 'window' de Process Suite (contexte' "System Events" ', via' position') indiquent leurs coordonnées en termes de rectangle combiné. – mklement0

3

Ce qui suit ne résout pas le problème de l'OP, mais peut être utile à ceux qui veulent déterminer la résolution de TOUS les affichages attachés dans AppleScript (merci @JoelReid et @ iloveitaly pour les blocs de construction):

set resolutions to {} 
repeat with p in paragraphs of ¬ 
    (do shell script "system_profiler SPDisplaysDataType | awk '/Resolution:/{ printf \"%s %s\\n\", $2, $4 }'") 
    set resolutions to resolutions & {{word 1 of p as number, word 2 of p as number}} 
end repeat 
# `resolutions` now contains a list of size lists; 
# e.g., with 2 displays, something like {{2560, 1440}, {1920, 1200}} 
+0

C'est génial, pouvez-vous penser à un moyen ou savoir quel est le bureau actif? Je pensais à la recherche d'un moyen de savoir dans quel bureau est la fenêtre active assis – perrohunter

+1

@perrohunter Je ne saurais pas comment le faire de manière générique dans AppleScript seul. Alors que vous pouvez obtenir les limites de la fenêtre active de l'application comme suit: 'limites de la première fenêtre d'application (chemin vers l'application frontale comme texte)', ces limites sont rapportées en un rectangle virtuel englobant _all_ displays, comme indiqué par ' les limites de la fenêtre de desktop' dans le contexte 'Finder'. Sans savoir aussi comment vos affichages sont _arrangés_ (verticalement, horizontalement, vers la gauche, vers la droite, ...), vous ne serez pas en mesure d'inférer l'affichage spécifique. – mklement0

5

Par souci de plus complet, voici le code pour obtenir la largeur, la hauteur et l'échelle Retina d'un affichage spécifique (principale ou intégrée).

C'est le code pour obtenir la résolution et l'échelle Retina du écran intégré:

set {width, height, scale} to words of (do shell script "system_profiler SPDisplaysDataType | awk '/Built-In: Yes/{found=1} /Resolution/{width=$2; height=$4} /Retina/{scale=($2 == \"Yes\" ? 2 : 1)} /^ {8}[^ ]+/{if(found) {exit}; scale=1} END{printf \"%d %d %d\\n\", width, height, scale}'") 

Et ceci est le code pour obtenir la résolution et l'échelle Retina de l'écran principal :

set {width, height, scale} to words of (do shell script "system_profiler SPDisplaysDataType | awk '/Main Display: Yes/{found=1} /Resolution/{width=$2; height=$4} /Retina/{scale=($2 == \"Yes\" ? 2 : 1)} /^ {8}[^ ]+/{if(found) {exit}; scale=1} END{printf \"%d %d %d\\n\", width, height, scale}'") 

Le code est basé sur this post par Jessi Baughman et les autres réponses données ici.

-1

Sur ma machine system_profiler prend presque une seconde pour retourner une réponse. Pour mes objectifs, c'est trop long. Avant 10.12, j'ai utilisé ASObjC Runner mais apparemment cela ne fonctionne plus.

Cela est beaucoup plus rapide pour moi:

tell application "Finder" to get bounds of window of desktop

(Taken de https://superuser.com/a/735330/64606)

0

Pour obtenir la largeur, la hauteur et l'échelle (rétine = 2, sinon = 1) pour tous les moniteurs:

set resolutions to {} 
repeat with p in paragraphs of ¬ 
    (do shell script "system_profiler SPDisplaysDataType | awk '/Resolution:/{ printf \"%s %s %s\\n\", $2, $4, ($5 == \"Retina\" ? 2 : 1) }'") 
    set resolutions to resolutions & {{word 1 of p as number, word 2 of p as number, word 3 of p as number}} 
end repeat 

get resolutions 

Basé sur answersabove.

Résultats quelque chose comme ceci:

{{2304, 1440, 2}, {1920, 1080, 1}}