Wednesday, June 19, 2013

#1 2011-07-02 04:29:10 am

yiam-jin-qui
Member
Registered: 2010-10-10
Posts: 34

Tell Application WHAT ? - a script for the perplexed ...

A script for those moments when you can't remember the creator code, bundle identifier, or full .app name of one of the applications you want to automate.   

(Compatible with Launchbar argument handling ... tap the spacebar and give it part of the name of a running application)

Applescript:

-- Get creator codes and bundle identifiers for tell applications blocks
-- (for applications currently running
-- Ver .05 Compatible with LaunchBar - select script, tap space bar and enter string in Launchbar

property pTitle : "Tell application id ..."

property pDefaultSearch : "omni"

property pCodeCopy : "Copy creator code"
property pBundleCopy : "Copy bundle identifier"
property pNameCopy : "Copy app name"

-- System Events
on run
   tell application id "sevs"
       activate
       set strSearch to text returned of (display dialog "Enter part of application name:

(or leave blank to see all running applications)"
default answer pDefaultSearch with title pTitle)
   end tell
   
   handle_string(strSearch)
end run

on handle_string(strSearch)
   tell application id "sevs"
       
       if (strSearch ≠ "") and (strSearch ≠ "*") then
           set {lstCode, lstBundle, lstFile} to {creator type, bundle identifier, file} of (application processes where name contains strSearch and bundle identifier is not missing value)
           set strPrompt to "Applications with \"" & strSearch & "\" in their name:"
       else
           set {lstCode, lstBundle, lstName, lstFile} to {creator type, bundle identifier, name, file} of (application processes where bundle identifier is not missing value)
           set strPrompt to "All currently running applications:"
       end if
       repeat with i from 1 to length of lstCode
           set varFile to item i of lstFile
           if varFile ≠ missing value then
               set strName to (name of item i of lstFile)
           else
               set strName to item i of lstName
           end if
           
           set item i of lstCode to item i of lstCode & "=" & item i of lstBundle & "=" & strName
       end repeat
       
       set my text item delimiters to linefeed
       set strApps to lstCode as string
       
       set lstApps to paragraphs of (do shell script "echo " & quoted form of strApps & " | sort -t '=' -k 3")
       if length of lstApps > 0 then
           set lstDefault to {first item of lstApps}
       else
           activate
           display alert "No running apps have names matching " & strSearch
           return
       end if
       activate
       set varChoice to choose from list lstApps with prompt strPrompt default items lstDefault with title pTitle
       
       if varChoice is false then return
       
       set my text item delimiters to "="
       set {strID, strBundle, strName} to text items 1 thru 3 of first item of varChoice
       
       set {blnCode, blnBundle, blnName} to {true, true, true}
       
       -- CREATOR CODE
       if strID ≠ "????" then
           set strCode to "tell application id \"" & strID & "\""
       else
           set blnCode to false
           set strCode to strName & " has no creator code ..."
       end if
       
       -- BUNDLE IDENTIFIER
       if strBundle ≠ "missing value" then
           set strBundle to "tell application id \"" & strBundle & "\""
       else
           set blnBundle to false
           set strBundle to strName & " has no bundle identifier"
       end if
       
       -- APPLICATION NAME
       if strName ends with ".app" then
           set strName to text 1 thru -5 of strName
           set strAppName to "tell application \"" & strName & "\""
       else
           set blnName to false
           set strAppName to ""
       end if
       
       
       set strChoice to "CREATOR CODE: " & strCode & "

BUNDLE IDENTIFIER: "
& strBundle & "

APP NAME: "
& strAppName
       
       
       set lstBtns to {}
       if blnName then set end of lstBtns to pNameCopy
       if blnBundle then set end of lstBtns to pBundleCopy
       if blnCode then set end of lstBtns to pCodeCopy
       set lngButtons to length of lstBtns
       
       if lngButtons > 0 then
           set strClip to "-- " & strName & return
           activate
           set strBtn to (button returned of (display dialog strChoice buttons lstBtns default button lngButtons with title strName))
           if strBtn = pCodeCopy then
               set strClip to strClip & strCode
           else if strBtn = pBundleCopy then
               set strClip to strClip & strBundle
           else
               set strClip to strAppName
           end if
           set the clipboard to strClip & return & return & "end tell"
       else
           activate
           display alert strName & " is not a scriptable process"
       end if
       set my text item delimiters to space
   end tell
end handle_string

Last edited by yiam-jin-qui (2011-07-05 02:15:45 am)


天地不仁, 仁者人也

Houthakker / RobTrew

Offline

 

Board footer

Powered by FluxBB

[ Generated in 0.150 seconds, 8 queries executed ]

RSS (new topics) RSS (active topics)