IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AppleScript Discussion :

Script pour connaitre les applications installées [AppleScript]


Sujet :

AppleScript

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2012
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Septembre 2012
    Messages : 42
    Points : 32
    Points
    32
    Par défaut Script pour connaitre les applications installées
    Bonjour,

    Je tente de faire un script qui liste les applications installées (qui en filtrera certaines dans un second temps et qui enverra la liste par mail dans un troisième).

    J'ai récupéré ce script que j'ai commencé à modifier. Il fonctionne très bien. Sur un dossier de test avec 4 5 dossiers il m'en fait bien la liste. Malheureusement, quand je sélectionne le dossier application le script ne s'arrête plus, le Finder ne répond plus et je suis obligé de le forcer à quitter...

    voila le script:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    set votreChoix to choose folder
     
    set listeNoms to ""
     
    tell application "Finder"
    	set liste_Dossiers to every folder of entire contents of folder (votreChoix as alias)
     
    	set thePath to every folder of entire contents of folder (votreChoix as alias)
    	if (count liste_Dossiers) is not 0 then
     
    		repeat with i from 1 to (the count items of liste_Dossiers)
    			set nom to name of item i of text items of liste_Dossiers as text
     
    			set listeNoms to listeNoms & nom & return
    		end repeat
    		set chemin_Fichier to (votreChoix as text) & " Fichiers.txt" as text
     
    		try
    			set chemin_Fichier to open for access chemin_Fichier with write permission
    			set eof chemin_Fichier to 0
    			write listeNoms starting at eof to chemin_Fichier
    			close access chemin_Fichier
    		on error
    			close access chemin_Fichier
    		end try
     
    	end if
    end tell
    message d'erreur:
    error "Erreur dans Finder*: Délai dépassé pour un AppleEvent." number -1712

    Je ne voit pas ce qui le gène
    Si il y a une autre solution ou si je fais une erreur dans mon script, je ne vois pas...
    D'avance merci pour votre aide

  2. #2
    Invité
    Invité(e)
    Par défaut
    je croie que le temps "d'utilisation" est trop long comment dans ce scripte quand il y a trop de fichier dans la corbeille.
    enfin je croie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    tell application "Finder"
    	empty the trash
    end tell
    open the startup disk
    say "J’ai vidé la poubelle et ouvert le disque dur pour vous" using "Zarvox"
    En gros quand il y a trop de fichier et ba l'ordie plante e affiche se message
    et ne fait pas dire la suite :/
    Dernière modification par Invité ; 09/05/2013 à 10h49.

  3. #3
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 603
    Points : 1 240
    Points
    1 240
    Par défaut lister les application installées
    Bonsoir CaraLePoke,
    La liste des applications installées sur ton Mac est enregistrée dans la base de données système Launch Services. C’est cette base qui est appelée pour trouver l’application à ouvrir lorsque tu ouvres directement un document.
    Cette base contient aussi les registres des types de fichiers.
    Cette base de données contient toutes les références aux applications installées ou ayant été installées sur ta machine.
    La commande Unix lsregister permet une extraction (dump) de cette base de donnée.

    Cette commande est accessible suivant le chemin ci-dessous (Mac OS X 10.4, 10.5 et 10.6)
    /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister
    Je n'ai pas de 10.7 ou 10.8, mais cela ne devrait pas être très différent.

    Le résultat de cette commande est un peu complexe, mais avec la commande Unix « grep » on peut en extraire les « bundle » qui sont en fait les applications. Pour info, la commande Unix grep est une sorte de filtre de recherche qui permet de n’afficher en résultat que ce qui contient ce que tu cherches (je simplifie !)

    Voici la commande Unix à utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lsregister -dump | grep --after-context 1 "^bundle" | grep --only-matching "/.*\.app"
    Le résultat est une liste des applications (une app par ligne, donc par paragraphe) avec leur chemin Unix (avec des "/" pour les dossiers et sous dossiers)
    Il suffit alors de récupérer les noms des applications en utilisant l’instruction « info for ». L'instruction "info for" génèrera une erreur si le fichier n'existe plus...c'est parfait car on ne souhaite que les applications installées aujourd'hui et pas celles supprimées depuis !

    Je t'ai fait un AppleScript utilisant cette commande.
    J'y ai ajouté un filtre supplémentaire car je pense que tu sous-estimes les applications présentes sur ton Mac. En effet de nombreux sous dossiers système contiennent des applications (en particulier dans coreservices) que tu ne souhaites sans doute pas conserver comme véritables applications.
    Par exemple, la commande lsregister indique aussi les Applescript enregistrés en application...
    Libre à toi de supprimer les lignes de ce filtre. Il limite les applications à celles installées dans les dossiers Applications et Utilitaires.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    property Chemin_LS : "/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister"
     
    --defini les dossiers à conserver : ici Applications et Utilitaires
    tell application "System Events"
    	set D_Application to (path to applications folder) as string
    	set D_Util to (path to utilities folder) as string
    end tell
    set Dos_OK to {D_Application, D_Util}
     
    -- lit la base de données des applications
    set Les_Chemins to every paragraph of (do shell script Chemin_LS & " -dump | grep --after-context 1 \"^bundle\" | grep --only-matching \"/.*\\.app\"")
     
    --filtre la liste des applications seulement avec les fichers qui existent et dont le dossier est dans la liste Dos_OK
    set Liste_Applis to {}
    repeat with Le_Chemin in Les_Chemins
    	try
    		tell application "Finder" to set Dos to (container of ((Le_Chemin as POSIX file) as alias)) as string
    		if Dos is in Dos_OK then -- test si l'application est dans un dossier à garder
    			copy displayed name of (info for (Le_Chemin as POSIX file)) to end of Liste_Applis
    		end if
    	end try
    end repeat
     
    -- juste pour montrer le résultat :
    set X to choose from list Liste_Applis with title "Liste des Applications"
    J'espère que les commentaires sont clairs.
    Cordialement

  4. #4
    Invité
    Invité(e)
    Par défaut
    Mais ça ne peut pas s’afficher dans l'ordre alphabétique ?
    Dernière modification par kOrt3x ; 17/05/2013 à 23h37. Motif: correction orthographique

  5. #5
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 603
    Points : 1 240
    Points
    1 240
    Par défaut trier une liste
    Bonjour Jules972,
    Bien sûr, il est possible de trier alphabétiquement la liste résultante.

    Le résultat du script précédent est dans la liste Liste_Applis.
    Il existe sur le net quantité de méthodes de tri de liste. Voici une routine que j'utilise habituellement. C'est une méthode dite "à permutation". Elle est suffisamment rapide pour des listes de taille raisonnable (max quelques centaines d'items).

    La routine est "Tri_Liste" qui reçoit en argument une liste et retourne la liste triée. Ce tri fonctionne avec des items numériques ou alphabétiques.

    Tu dois donc ajouter cette routine en fin du programme précédent et l'appeler en passant l'argument Liste_Applis.
    Le code ci-dessous donne un exemple générique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    -- trie d'une liste
    -- liste d'exemple
    set Ma_Liste to {"ZC", "XA", "T", "ABC", "ZA", "ABA", "T3"}
     
    -- appel de la routine de tri
    set Ma_Liste to Tri_Liste(Ma_Liste)
     
     
    -- remplissage de T avec les items de la liste pour affichage
    set T to ""
    repeat with i from 1 to count of Ma_Liste
    	set T to T & (item i of Ma_Liste) & ", "
    end repeat
    display dialog T
     
     
     
    -- La routine de tri 
    on Tri_Liste(Local_L)
    	-- trie la liste Local_L par permutations
    	set n to count Local_L
    	repeat with i from 1 to n - 1
    		repeat with j from i + 1 to n
    			if item i of Local_L > item j of Local_L then
    				set temp to item i of Local_L
    				set item i of Local_L to item j of Local_L
    				set item j of Local_L to temp
    			end if
    		end repeat
    	end repeat
    	return Local_L
    end Tri_Liste
    Cordialement

  6. #6
    Nouveau membre du Club
    Inscrit en
    Septembre 2012
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Septembre 2012
    Messages : 42
    Points : 32
    Points
    32
    Par défaut
    Bonjour,

    Désolé de répondre aussi tard (beaucoup trop occupé en ce moment -_-') mais merci pour cette réponse, je vais pouvoir me replonger dans ce "projet".
    Merci à PBELL et Jules972

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Application Windows pour afficher les logiciels installés
    Par younestyle dans le forum Windows
    Réponses: 5
    Dernier message: 16/03/2013, 00h07
  2. script pour connaitre les logon script des utilisateurs
    Par nazimb dans le forum Windows Serveur
    Réponses: 0
    Dernier message: 07/03/2008, 08h08
  3. [MySQL] Script pour modifier les caracteres speciaux dans la bdd
    Par isa150183 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 15/09/2005, 13h07
  4. Réponses: 2
    Dernier message: 04/09/2004, 10h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo