0 votos

¿Applescript para encontrar la ruta de la aplicación a partir de un nombre de aplicación parcial?

¿Cómo puedo obtener la ruta de una aplicación en ejecución utilizando parte del nombre de la aplicación? (por ejemplo, 'Acrobat' en 'Adobe Acrobat Reader DC') Esto es lo que he intentado pero es incorrecto. (Nota: No estoy seguro de si cambia si se ejecutan varias instancias, pero sólo quiero que se devuelva una única ruta POSIX)

tell application "System Events",
  if (get name of every application process) contains "Acrobat" then
    return POSIX path of (path to ((get name of every application process) contains "Acrobat"))
  end if
end tell

1voto

user3439894 Puntos 5883

Lo siguiente ejemplo AppleScript código asume que sólo tiene uno aplicación que contiene "Acrobat" en su nombre de lo contrario, tendrá que procesar el lista devuelto de Eventos del sistema en un repeat bucle .

tell application "System Events" to ¬
    set appAcrobatList to the ¬
        name of every application process ¬
        whose background only is false ¬
        and name contains "Acrobat"

if appAcrobatList is not {} then ¬
    return POSIX path of ¬
        (path to application ¬
            (first item of appAcrobatList))

1voto

wch1zpink Puntos 11

Lo siguiente AppleScript devolverá la ruta de la aplicación si se está ejecutando. También devolverá las rutas de todas las instancias de la aplicación que se estén ejecutando, si hay más de una (sin necesidad de un repeat bucle).

property singleAppPath : missing value
property multipleAppPaths : missing value

tell application "System Events"
    set searchedApps to a reference to ¬
        ((every application process) whose name contains "Acrobat" or ¬
            displayed name contains "Acrobat")
    if (count of searchedApps) is 1 then
        set singleAppPath to POSIX path of application file of searchedApps as text
    else if (count of searchedApps) > 1 then
        set multipleAppPaths to POSIX path of application file of searchedApps
    end if
end tell

Me doy cuenta de que el siguiente código no es realmente una solución directa a la pregunta del OP. Sin embargo, se me ocurrió que, una vez que la ruta completa del archivo de la aplicación se recupera desde el código anterior en mi solución otras personas, incluido yo mismo, puede encontrar valiosa para tener una opción para revelar la aplicación / en el Finder. Esto resulta especialmente útil si el proceso de aplicación que busca no proviene de una aplicación ubicada en su carpeta /Aplicaciones.

property searchedApps : missing value
property singleAppPath : missing value
property multipleAppPaths : missing value

activate
set theAppProcess to (display dialog ¬
    "Reveal App From App Process Search" default answer ¬
    "Search For ..." buttons {"Cancel", "Get Full Path", "Reveal In Finder"} ¬
    default button 3 cancel button 1 ¬
    with title "Locate Application Process" giving up after 45)

if button returned of theAppProcess is "Get Full Path" then
    getFullAppPathFromSearchedProcesses(text returned of theAppProcess)
    if singleAppPath != missing value then
        activate
        display dialog singleAppPath buttons {"OK"} default button "OK"
    end if
else if button returned of theAppProcess is "Reveal In Finder" then
    getFullAppPathFromSearchedProcesses(text returned of theAppProcess)
    revealApp()
end if

on revealApp()
    if (count of searchedApps) is 1 then
        do shell script "open -R " & quoted form of singleAppPath
    else if (count of searchedApps) > 1 then
        repeat with thisItem in multipleAppPaths
            do shell script "open -R " & quoted form of thisItem
            delay 0.1
        end repeat
    end if
end revealApp

on getFullAppPathFromSearchedProcesses(appName)
    tell application "System Events"
        set searchedApps to a reference to ¬
            ((every application process) whose name contains appName or ¬
                displayed name contains appName)
        if (count of searchedApps) is 1 then
            set singleAppPath to POSIX path of application file of searchedApps as text
        else if (count of searchedApps) > 1 then
            set multipleAppPaths to POSIX path of application file of searchedApps
        end if
    end tell
    return {singleAppPath, multipleAppPaths}
end getFullAppPathFromSearchedProcesses

1voto

Wowfunhappy Puntos 33

Esto no es exactamente lo que has preguntado, pero si conoces la aplicación identificador de paquete Hay una forma muy sencilla de conseguir el camino:

tell application "Finder"
    return POSIX path of (application file id "com.adobe.Acrobat" as text)
end tell

Como esto utiliza LaunchServices, si existen varias copias de la aplicación, siempre devolverá la copia que Apple considera la más importante, es decir, la versión que su Mac lanzará realmente.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X