2017-01-13 1 views
0

Cela devrait être une question assez simple pour répondre (je suppose).Amener une fenêtre de processus à l'avant?

Dites que je veux activer la fenêtre 1 du processus "ScreenFlow", comment est-ce que je ferais ceci? Je sais que Application('ScreenFlow').activate() porte Processes['ScreenFlow').windows[0] à l'avant. Mais comment passer à Processes['ScreenFlow').windows[n]?

Merci

+0

Est-ce que vous voulez amener cette fenêtre à l'avant toujours, même si l'utilisateur a le focus dans une autre application? (Je ne suis pas sûr si macOS le permet - c'est une mauvaise idée d'interrompre l'utilisateur, et je l'ai eu personnellement quand les applications volent le focus). – Dai

+0

Notez qu'il y a une différence entre "amener en avant" (par exemple afficher une fenêtre toujours sur le dessus) et voler le focus - ce que je pense que "activer()" fera. – Dai

+0

ouais malheureusement activer() ne fait pas cela avec windows, au moins pour cette application: '>> Application ('ScreenFlow'). Activate() => true' ' >> Application ('ScreenFlow'). Windows [1] .activate() !! Erreur sur la ligne 1: TypeError: undefined n'est pas un objet (évaluation 'Application (' ScreenFlow '). Windows [1] .activate') ' – Sancarn

Répondre

0

L'action nécessaire pour faire ce travail est AXRaise:

function setWinFront(n) { 
    var system = Application('System Events') 
    var ScreenFlow = system.processes['ScreenFlow'] 
    Screenflow.windows[n].actions['AXRaise'].perform() 
} 

À l'avenir lorsque l'on veut effectuer des changements comme celui qu'il est sage de regarder peut-être dans process.windows[1].actions() pour voir si des actions existent et s'ils le font - essayez-les d'abord.

En variante, on peut également consulter les attributs de l'objet à l'aide process.windows[1].attributes()