2012-09-06 6 views
0

Étant donné le PID d'un processus, comment puis-je vérifier s'il s'agit d'un processus fenêtré? Je suis à la recherche d'une solution sur OSX.Vérifier si un processus est un processus fenêtré sous OSX

Des solutions d'objectif-C/C sont recherchées. Je suis sur OSX Mountain Lion.

Je définis un processus fenêtré comme un processus qui peut être vu lorsque l'onglet "Processus fenêtrés" est sélectionné dans le moniteur d'activité. http://cl.ly/FeXR

+0

[Cette réponse] (http://stackoverflow.com/a/1888944/962089) explique un processus dans win32 brut dans lequel vous vérifiez chaque fenêtre en cours d'exécution pour voir si elle appartient au processus que vous voulez. Peut-être que cela aide? – chris

+0

@chris Merci, mais je suis à la recherche d'une solution pour OSX en Objective-C ou C. – fdh

+0

Pour une raison quelconque, malgré les nombreuses fois où vous avez dit OSX, il n'a jamais enregistré dans mon cerveau. Excuses. Peut-être qu'il existe une méthode similaire pour OSX. – chris

Répondre

2
[NSWorkspace runningApplications] 

Cela renvoie toutes les applications de l'utilisateur dans un NSArray comme des instances de NSRunningApplication qui a une propriété processIdentifier.

Ou vous pouvez utiliser runningApplicationWithProcessIdentifier: directement pour obtenir l'application avec un PID spécifié.

Voici l'exemple de code: http://developer.apple.com/library/Mac/#samplecode/AppList/Introduction/Intro.html

Grâce à la propriété activationPolicy du NSRunningApplication que vous pourriez obtenir l'état fenêtré. J'ai modifié le code AppList pour qu'il affiche uniquement les applications fenêtrées comme indiqué ci-dessous. Cela correspond à ce que le moniteur d'activité montre.

enter image description here

En particulier, vous êtes à la recherche du NSApplicationActivationPolicyRegular.

Notez les restrictions cependant. Cela ne fonctionne que pour les processus appartenant à l'utilisateur.

Toutes les autres méthodes sont obsolètes et risquent de ne plus fonctionner à l'avenir. Des méthodes telles que GetBSDProcessList et Carbon GetProcessInformation ne sont plus recommandées.

+0

Je ne vois pas comment cela répond à ma question. Vous avez simplement fourni un moyen de récupérer tous les processus appartenant à l'utilisateur; la seule mention de vérifier si un processus est fenêtré ne répond pas à la question de quelque façon que ce soit. – fdh

+0

Avez-vous déjà essayé le code par vous-même et lu la documentation que j'avais indiquée? Quoi qu'il en soit, j'ai mis à jour ma réponse pour réfléchir à la façon de le faire. –

+0

La réponse d'édition a été très utile! Cela fonctionne parfaitement. Merci pour l'aide! – fdh

Questions connexes