Menu

Skip to content
AppleScriptの穴
  • Home
  • Products
  • Books
  • Docs
  • Events
  • Forum
  • About This Blog
  • License
  • 仕事依頼

AppleScriptの穴

Useful & Practical AppleScript archive. Click '★Click Here to Open This Script' Link to download each AppleScript

カテゴリー: System

指定名称のアプリケーションをフルスクリーン表示

Posted on 3月 13, 2018 by Takaaki Naganoya

指定名称のアプリケーションをフルスクリーン表示するAppleScriptです。

AppleScript自体とフルスクリーン表示の相性はよくありません。操作対象のGUIアプリケーションとスクリプトエディタ(Script Debuggerでも可)と最低でも2つのウィンドウがオープンしていることが望ましいので、Scriptを書いている最中でフルスクリーン表示というのはありえません。

ただ、運用段階でフルスクリーン表示をしたい、というニーズがないこともないので、やり方を調べておきました。

AppleScript名:指定名称のアプリをフルスクリーン表示
— Created 2015-07-29 by Takaaki Naganoya
— 2015 Piyomaru Software
use AppleScript version "2.4"
use scripting additions

set a to "Safari"
set aRes to dispAppWithFullScreen(a) of me

–指定名称のアプリケーション(起動中のもの)をフルスクリーン表示
on dispAppWithFullScreen(applicationName)
  
  
set appName to returnExactNameOfAnApp(applicationName)
  
if appName = false then return false –指定のアプリがなかった、あるいはアプリケーション名を間違って指定した
  
  
set pID to id of application appName
  
  
tell application appName
    reopen
    
activate
  end tell
  
  
tell application "System Events"
    tell (process 1 whose bundle identifier is pID)
      set b1List to every button of window 1 whose subrole is "AXFullScreenButton" –Full Screen
      
set b2List to every button of window 1 whose subrole is "AXZoomButton" –Zoom
      
      
if b1List = {} then
        set targB to first item of b2List –フルスクリーン表示機能を持たないアプリの場合
      else
        set targB to first item of b1List –フルスクリーン表示機能を持つアプリの場合
      end if
      
      
click targB
    end tell
  end tell
  
  
return true
  
end dispAppWithFullScreen

–Displayed Nameでアプリケーション名が与えられた場合に、正しい名称を返す
on returnExactNameOfAnApp(aName)
  tell application "System Events"
    set ap1List to every process whose name is equal to aName
    
if ap1List = {} then
      set ap1List to every process whose displayed name is equal to aName
      
if ap1List = {} then return false
    end if
    
set anApp to contents of first item of ap1List
    
return name of anApp
  end tell
end returnExactNameOfAnApp

★Click Here to Open This Script 

Posted in System | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

mouseClickを用いて指定座標をクリック

Posted on 3月 13, 2018 by Takaaki Naganoya

ネット上に転がっていたサンプルコードをかき集めて作ったmouseClick.frameworkを用いて指定座標のクリックを行うAppleScriptです。

# ご注意:マウスカーソルの移動やクリックを行うのは、本来のAppleScriptの処理ではありません
# ご注意:他のマシン上で同じ動作を再現することが(初心者には)難しいため、おすすめしません

強制的なマウスカーソル移動とクリック(プレスともいいますね)は、「仕方なくほかに方法がなくなった場合」の、アプリケーション操作の最終手段です。やらないに越したことはない「必要悪」ともいえます。Automatorの作業記録機能が「クリック座標を記録する」という仕組みで実装されているため、AutomatorからAppleScriptに移ってきたユーザーがその調子で組もうとしてドツボにハマる姿がたまに見られます。


step1: 対象のGUIアプリケーションがAppleScript対応であれば、AppleScript用語辞書を調べて、目的の機能が呼び出せるかを確認する

step2: 対象のGUIアプリケーションの特殊機能(Custom URL Protocolなど)で目的の機能が呼び出せないかを確認する(URL Protocolだと非同期実行なので、あまり当てにならないので役に立たないケース多し)
→ とくに、Maps.appではURL Protocol経由で、しかもCustom URL schemeでもなく、http://maps.apple.comで操作するようになっています

step3: step1,2で目的の機能が呼び出せないことがわかったら、GUI Scripting経由で(メニューやボタンを操作して)呼び出せないかを試す

step4: step3でもどうしても呼び出せない場合に、GUI Scriptingで座標を指定してクリックイベントを送るという操作をためす

step5: ごくまれに、step4でも操作できないアプリケーションがある。AdobeのCreativeアプリケーションはポップアップメニューの内容を毎回プログラムから再生成していたりして、これがGUI Scriptingでも操作できない事態を引き起こす。この段階でマウスの強制移動とクリックの使用が検討される

これまで、古い仕組みを使ってマウスカーソル移動とクリックを行なっていましたが、とうとうmacOS 10.13で動かなくなり(これはバグではなく仕方ない話。OS X 10.6あたりでDeprecatedになったので)、代替手段を探していました。


CGEventRef mousedown = CGEventCreateMouseEvent(NULL, kCGEventLeftMouseDown, point, kCGMouseButtonLeft);
CGEventPost(kCGHIDEventTap, mousedown);

CGEventRef mouseup = CGEventCreateMouseEvent(NULL, kCGEventLeftMouseUp, point, kCGMouseButtonLeft);
CGEventPost(kCGHIDEventTap, mouseup);

こんな感じでカーソル移動とクリックを行なっています。サンプルコードではCGPointでパラメータを受け渡していましたが、AppleScriptから呼びやすいようにNSPointで座標値を受け渡すよう書き換えてみました。

本Framework+AppleScript「mouseClickを用いて指定座標をクリック v2」はmacOS 10.13上で動きます。

–> mouseClick.framework (To ~/Library/Frameworks/)

後日談:
なぜか、CGPostMouseEventの機能はmacOS 10.14でふたたび使えるようになり、macOS 12上でも動作しています。deprecatedとは?

AppleScript名:mouseClickを用いて指定座標をクリック v2
— Created 2018-03-10 by Takaaki Naganoya
— 2018 Piyomaru Software
use AppleScript version "2.4" — Yosemite (10.10) or later
use framework "Foundation"
use framework "mouseClick"
use scripting additions

my clickAt(100, 10)

on clickAt(newX, newY)
  set aPoint to current application’s NSMakePoint(newX, newY)
  
current application’s ForceClick’s alloc()’s init()’s click:aPoint
end clickAt

★Click Here to Open This Script 

AppleScript名:ASOCでマウスの強制移動とクリック(macOS 10.12まで)
— Created 2015-10-04 by Takaaki Naganoya
— 2015 Piyomaru Software
use AppleScript version "2.4" –max version macOS 10.12
use scripting additions
use framework "Foundation"
use framework "ApplicationServices"
use framework "Quartz"

my clickAt(100, 10)

on clickAt(newX, newY)
  
  
set pt to current application’s CGPointZero
  
set x of pt to newX
  
set y of pt to newY
  
  
current application’s CGPostMouseEvent(pt, 1, 1, 1)
  
current application’s CGPostMouseEvent(pt, 1, 1, 0)
  
end clickAt

★Click Here to Open This Script 

Posted in GUI System | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

Mail.appで選択中のメールからMessage IDを取得する

Posted on 3月 13, 2018 by Takaaki Naganoya

MailCore2.frameworkを利用して、Mail.app上で選択中のメールのヘッダーからMessage IDを取得するAppleScriptです。

Mail.appから取得したヘッダーテキストから、MailCore2.frameworkでヘッダーオブジェクトを生成し、同フレームワークの機能を利用してMessage IDを取得します。1メールあたり0.03秒ぐらいで取得します。

ヘッダーのテキストを行単位でparseしてサーチしても全然いいのですが、メール関連は割と込み入った仕様がてんこ盛りなので、AppleScriptでもMailCore2をよく活用しています。

もはや、MailCore2がないとできない処理が多すぎて、これが使えないとけっこう泣きが入ります。

MailCore.framework(To ~/Library/Frameworks/)

AppleScript名:Mail.appで選択中のメールからMessage IDを取得する.scptd
—
–  Created by: Takaaki Naganoya
–  Created on: 2018/03/12
—
–  Copyright © 2018 Piyomaru Software, All Rights Reserved
—

use AppleScript version "2.4" — Yosemite (10.10) or later
use framework "Foundation"
use scripting additions
use framework "MailCore" –https://github.com/MailCore/mailcore2

tell application "Mail"
  set a to selection
  
if a = {} then error "No Selection"
  
set aa to first item of a
  
set aSource to source of aa –メールのソースを取得
end tell

set aStr to current application’s NSString’s stringWithString:aSource
set aData to aStr’s dataUsingEncoding:(current application’s NSUTF8StringEncoding)

set aHeader to current application’s MCOMessageHeader’s headerWithData:aData
set aMessageID to (aHeader’s messageID()) as string
–> "0A23983C-81B0-4E33-9C0B-B4A934A0E284@xxxxxx-xxx.xxx.xx"

★Click Here to Open This Script 

Posted in System | Tagged 10.11savvy 10.12savvy 10.13savvy Mail | Leave a comment

Enable Script Menu

Posted on 3月 12, 2018 by Takaaki Naganoya

メニューバー上にあるScript Menuを表示状態に設定変更するAppleScriptです。

Script Menuの表示・非表示はスクリプトエディタ内の環境設定で制御するようになっていますが、Script Menu自体はMenu Extraでスクリプトエディタとは独立して動作しているので、外部からオンにすることが可能です。

–> Demo Movie


▲Default


▲実行後

AppleScript名:Enable System Wide Script Menu
tell application "Finder"
  open (POSIX file "/System/Library/CoreServices/Menu Extras/Script Menu.menu") as alias
end tell

★Click Here to Open This Script 

AppleScript名:Enable System Wide Script Menu (Shell)
do shell script "open " & quoted form of "/System/Library/CoreServices/Menu Extras/Script Menu.menu"

★Click Here to Open This Script 

追記:macOS 10.14でOS標準装備のScript MenuがMenu Extraから単体のアプリケーションに変更になったので、Enableの方法も変更になりました。

AppleScript名:Enable System Wide Script Menu_10.14.scpt
tell application "Finder"
  open (POSIX file "/System/Library/CoreServices/Script Menu.app") as alias
end tell

★Click Here to Open This Script 

Posted in shell script System | Tagged 10.11savvy 10.12savvy 10.13savvy 10.14savvy | 1 Comment

defaultsAppLibを呼び出してURLスキームに対応するアプリケーション情報を取得、設定

Posted on 3月 10, 2018 by Takaaki Naganoya

defaultappを呼び出して、指定のURLスキームに対応するdefault applicationを取得したり設定したりするAppleScriptです。

–> defaultAppLib (To ~/Library/Script Libraries/)

AppleScript名:defaultsAppLibを呼び出してURLスキームに対応するアプリケーション情報を取得、設定
use AppleScript version "2.4"
use scripting additions
use defautApLib : script "defaultAppLib" –https://github.com/Grayson/defaultapp

–指定のURLスキームに対応するアプリケーションのパスを取得
set aRes to getDefaultAppForScheme("http") of defautApLib
–> "/Applications/Safari.app"

set bRes to getDefaultAppForScheme("ftp") of defautApLib
–> "/Applications/Transmit.app"

–指定のURLスキームに対応するアプリケーションを設定
set cRes to setDefaultAppForScheme("ftp", "Safari") of defautApLib
–> true

–指定のURLスキームに対応するアプリケーションのパスを取得(再確認)
set dRes to getDefaultAppForScheme("ftp") of defautApLib
–> "/Applications/Safari.app"

★Click Here to Open This Script 

Posted in System | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

光学ドライブ情報の取得

Posted on 3月 10, 2018 by Takaaki Naganoya

AppleScript名:光学ドライブ情報の取得.scptd
—
–  Created by: Takaaki Naganoya
–  Created on: 2018/03/10
—
–  Copyright © 2018 Piyomaru Software, All Rights Reserved
—
use AppleScript version "2.5" — El Capitan (10.11) or later
use framework "Foundation"
use scripting additions

set dInfoList to getOpticalDrivesInfo() of me
–> {{driveNum:"1", vendorName:"BUFFALO", productName:"Optical Drive", supportLevel:"Unsupported", revisionNo:"BFT6", busName:"USB", suppoortLevel:"Unsupported"}, {driveNum:"2", vendorName:"MATSHITA", productName:"BD-MLT UJ240AS", supportLevel:"Unsupported", revisionNo:"1.00", busName:"USB", suppoortLevel:"Unsupported"}}

–光学ドライブの情報を返す
on getOpticalDrivesInfo()
  set dList to paragraphs of (do shell script "drutil list")
  
set d2List to removeItemFromList(dList, "") of me
  
  
if length of d2List = 1 then return false –No Optical Drive
  
  
set d2List to rest of d2List –skip first header row
  
  
set dMainList to {}
  
repeat with i in d2List
    set tmpA to (current application’s NSString’s stringWithString:i)
    
set tmpB to (tmpA’s componentsSeparatedByString:" ") as list –parse string by space character
    
set tmpC to removeItemFromList(tmpB, "") of me –remove empty item from list
    
    
set dNum to first item of tmpC
    
set aVendor to second item of tmpC
    
set supLevel to last item of tmpC
    
set busStr to item -2 of tmpC
    
set revStr to item -3 of tmpC
    
    
–Product Nameのlist itemをスペースでつないで文字列化
    
set prodName1 to items 3 thru -4 of tmpC
    
set prodName2 to retStrFromArrayWithDelimiter(prodName1, " ") of me
    
    
set the end of dMainList to {driveNum:dNum, vendorName:aVendor, productName:prodName2, supportLevel:supLevel, revisionNo:revStr, busName:busStr, suppoortLevel:supLevel}
  end repeat
  
  
return dMainList
end getOpticalDrivesInfo

–1D Listから指定内容の要素をすべて削除する
on removeItemFromList(aTargList, aTargValue)
  set anArray to current application’s NSMutableArray’s arrayWithArray:aTargList
  
repeat
    set aInd to anArray’s indexOfObject:aTargValue
    
–macOS 10.12〜10.13.0までのNSNotFoundの値定義の間違いというAppleの恥ずかしいバグに対処
    
if aInd = current application’s NSNotFound or (aInd as real > 9.99999999E+8) then exit repeat
    
anArray’s removeObjectAtIndex:aInd
  end repeat
  
return anArray as list
end removeItemFromList

–リストを指定デリミタをはさんでテキスト化
on retStrFromArrayWithDelimiter(aList, aDelim)
  set anArray to current application’s NSArray’s arrayWithArray:aList
  
set aRes to anArray’s componentsJoinedByString:aDelim
  
return aRes as text
end retStrFromArrayWithDelimiter

★Click Here to Open This Script 

Posted in System | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

使用メモリーの状況を取得

Posted on 3月 10, 2018 by Takaaki Naganoya
AppleScript名:使用メモリーの状況を取得
— Created 2017-12-17 by Takaaki Naganoya
— 2017 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

set mRes to retMemoryUsage() of me
–> {usedMem:7928, wiredMem:1763, unusedMem:257}

on retMemoryUsage()
  set memRes to do shell script "top -l 1 | head -10 | grep ’PhysMem’"
  
set aRes to (parseStrFromTo(memRes, " ", "M") of me)
  
  
set bList to {}
  
repeat with i in aRes
    set mRes to returnNumberOnly(i) of me
    
set the end of bList to mRes
  end repeat
  
  
set usedNum to contents of first item of bList
  
set wiredNum to contents of second item of bList
  
set unusedNum to contents of third item of bList
  
return {usedMem:usedNum as integer, wiredMem:wiredNum as integer, unusedMem:unusedNum as integer}
end retMemoryUsage

on parseStrFromTo(aParamStr, fromStr, toStr)
  set theScanner to current application’s NSScanner’s scannerWithString:aParamStr
  
set anArray to current application’s NSMutableArray’s array()
  
  
repeat until (theScanner’s isAtEnd as boolean)
    — terminate check, return the result (aDict) to caller
    
set {theResult, theKey} to theScanner’s scanUpToString:fromStr intoString:(reference)
    
    
— skip over separator
    
theScanner’s scanString:fromStr intoString:(missing value)
    
set {theResult, theValue} to theScanner’s scanUpToString:toStr intoString:(reference)
    
if theValue is missing value then set theValue to "" –>追加
    
    
— skip over separator
    
theScanner’s scanString:toStr intoString:(missing value)
    
    
anArray’s addObject:theValue
  end repeat
  
  
return anArray as list
end parseStrFromTo

on returnNumberOnly(aStr)
  set anNSString to current application’s NSString’s stringWithString:aStr
  
set anNSString to anNSString’s stringByReplacingOccurrencesOfString:"[^0-9]" withString:"" options:(current application’s NSRegularExpressionSearch) range:{0, anNSString’s |length|()}
  
return anNSString as text
end returnNumberOnly

★Click Here to Open This Script 

Posted in System | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

ディスク使用状況を取得

Posted on 3月 9, 2018 by Takaaki Naganoya
AppleScript名:ディスク使用状況を取得
— Created 2017-12-17 by Takaaki Naganoya
— 2017 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

set dRes to diskUsage() of me
–> {readSector:8557760, readSize:"152G", writeSecotr:2601227, writeSize:"100G"}

on diskUsage()
  set dRes to (do shell script "top -l 1 | head -10 | grep ’Disks:’")
  
set dList to words of dRes
  
set readSectorNum to (contents of item 2 of dList) as integer
  
set readSizeNum to contents of item 3 of dList
  
set writeSectorNum to (contents of item 5 of dList) as integer
  
set writeSizeNum to contents of item 6 of dList
  
return {readSector:readSectorNum, readSize:readSizeNum, writeSecotr:writeSectorNum, writeSize:writeSizeNum}
end diskUsage

★Click Here to Open This Script 

Posted in System | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

ネットワーク使用状況を取得

Posted on 3月 9, 2018 by Takaaki Naganoya
AppleScript名:ネットワーク使用状況を取得
— Created 2017-12-17 by Takaaki Naganoya
— 2017 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

set nRes to networkUsage() of me
–> {inPacket:4904085, inSize:"5444M", outPacket:3426539, outSize:"396M"}

on networkUsage()
  set nRes to (do shell script "top -l 1 | head -10 | grep ’Networks: packets:’")
  
set nList to words of nRes
  
set inPackNum to (contents of item 3 of nList) as integer
  
set inSizeNum to (contents of item 4 of nList)
  
set outPackNum to (contents of item 6 of nList) as integer
  
set outSizeNum to (contents of item 7 of nList)
  
return {inPacket:inPackNum, inSize:inSizeNum, outPacket:outPackNum, outSize:outSizeNum}
end networkUsage

★Click Here to Open This Script 

Posted in System | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

get battery info v2

Posted on 3月 9, 2018 by Takaaki Naganoya

バッテリー関連の情報を取得するAppleScriptです。

ioregコマンドなどでハードウェア周りの情報を取得する方法は昔から知られており、有益な情報を利用できます。

本ScriptはCocoaの機能も使っておらず、割と古めな構造のものですが、安定して動作しているので使い続けています。

もともと、本Scriptのファイル名は「バッテリ情報を取得.scpt」というものでしたが、「バッテリ情報を取得 v2.scpt」にFinder上でリネームしようとしたら、「ファイル名が長すぎるか、句読点を含まないファイル名に変更してくれ」というエラーをmacOS 10.12および10.13のFinderが出力して、仕方なく英語のファイル名にリネームしました。

# 10.14.6でも10.15.1でも発生しています

macOSのどこのバージョンだかわからないのですが、おそらくファイル名の入力時に001Dのような不可視キャラクタが混入し、Finder上でリネームできなくなるようです。日本語環境でのみ発生する問題と思われます。

AppleScript名:get battery info v2
set bInfo to getBatteryInfo() of batteryKit
–> {CurrentCapacity:5129, MaxCapacity:5265, DesignCapacity:8460, CycleCount:478}

script batteryKit
  on getBatteryInfo()
    –ハードウェアの識別文字列を取得
    
set machineType to do shell script "sysctl -n hw.model"
    
    
–MacBook Proを検出したら、あるいは結果にMacBookの文字列が入っていなかったら終了
    
if machineType does not contain "MacBook" then
      return {CurrentCapacity:0, MaxCapacity:0, DesignCapacity:0}
    end if
    
    
–MacBookだけ処理続行
    
    
–ハードウェア情報を取得
    
set batCom to "ioreg -p IOService -n AppleSmartBattery -w 0"
    
set a to do shell script batCom
    
set aList to every paragraph of a
    
    
set itemCount to 1
    
set hitF to false
    
repeat with i in aList
      set j to contents of i
      
if j contains "AppleSmartBattery <class AppleSmartBattery" then
        set resList to items (itemCount + 2) thru (itemCount + 29) of aList
        
set hitF to true
        
exit repeat
      end if
      
set itemCount to itemCount + 1
    end repeat
    
if hitF = false then return
    
    
    
set findAttrList to {"CurrentCapacity", "MaxCapacity", "DesignCapacity", "CycleCount"}
    
set hitList to {}
    
repeat with i in findAttrList
      set j to string id 34 & contents of i & string id 34
      
      
repeat with ii in resList
        set jj to contents of ii
        
if jj contains j then
          set the end of hitList to jj
          
exit repeat
        end if
      end repeat
    end repeat
    
    
    
–現在のバッテリーの容量を取得
    
set curCap to parseAfterSpecifiedChar("=", contents of item 1 of hitList) of me
    
set curCap to curCap as number
    
    
–バッテリーの最大容量を取得
    
set maxCap to parseAfterSpecifiedChar("=", contents of item 2 of hitList) of me
    
set maxCap to maxCap as number
    
    
–バッテリーの最大容量を取得
    
set designCap to parseAfterSpecifiedChar("=", contents of item 3 of hitList) of me
    
set designCap to designCap as number
    
    
–バッテリーの充放電回数を取得
    
set cCount to parseAfterSpecifiedChar("=", contents of item 4 of hitList) of me
    
set cCount to cCount as number
    
    
return {CurrentCapacity:curCap, MaxCapacity:maxCap, DesignCapacity:designCap, CycleCount:cCount}
    
  end getBatteryInfo
  
  
  
–対象文字列(aData)の中で、aCharの文字以降を取得
  
on parseAfterSpecifiedChar(aChar, aData)
    set aPos to offset of aChar in aData
    
set resText to text (aPos + (length of aChar)) thru -1 of aData
    
return resText
  end parseAfterSpecifiedChar
end script

★Click Here to Open This Script 

Posted in System | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

指定アプリケーションのヘルプブック内の指定アンカーを表示する

Posted on 3月 8, 2018 by Takaaki Naganoya

指定名称のアプリケーションのヘルプブック内で指定アンカーを表示するAppleScriptです。

HelpBookを表示するOS標準搭載アプリケーション「HelpViewer」は一応AppleScript対応のスクリプタブルなアプリケーションなので、AppleScriptからコントロールできるのですが、経験上あまり信頼性がない(コマンドを無視して、表示しないことがある)ので、Cocoa経由でアンカー指定表示を行わせてみました。

Cocoa経由でもすぐに応答は返ってこないのですが、(HelpViewerの起動を含めて)数秒待たされて結果が表示される感じです。

HelpBookは、いわば「フローティング表示する、おそいWebブラウザ」で、かつてはWebコンテンツ内からAppleScriptの実行も指定できたため、一時期「Mac OS Xで有名なセキュリティーホール」として注目を集めました。URLイベント経由でScriptの実行を指定できてしまうとか、便利ではあったもののセキュリティーホールと言われればセキュリティホールです(注:すぐにふさがれました & この前後からローカルでのURLプロトコルの監視がきつくなりました)。

AppleScript名:指定アプリケーションのヘルプブック内の指定アンカーを表示する
— Created 2017-04-18 by Takaaki Naganoya
— 2017 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
use framework "AppKit"

set anAppName to "Script Editor"
set aTargAnchor to "scpedt1126" —-https://help.apple.com/scripteditor/mac/10.12/index.html?localePath=ja.lproj#/scpedt1126
set hRes to openHelpBook(anAppName, aTargAnchor) of me

–指定アプリケーションのヘルプブックで、指定アンカーを表示する
on openHelpBook(anAppName, aTargAnchor)
  set locBookName to getHelpBook(anAppName) of me
  
if locBookName = false then return false
  
current application’s NSHelpManager’s sharedHelpManager()’s openHelpAnchor:aTargAnchor inBook:locBookName
end openHelpBook

–指定アプリケーションのヘルプブック名称を取得する
on getHelpBook(anAppName)
  set aWorkspace to current application’s NSWorkspace’s sharedWorkspace()
  
set appPath to aWorkspace’s fullPathForApplication:anAppName
  
if appPath is equal to missing value then return false
  
  
set locBookName to (current application’s NSBundle’s bundleWithPath:appPath)’s objectForInfoDictionaryKey:"CFBundleHelpBookName"
  
if locBookName is equal to missing value then return false
  
–> "com.apple.ScriptEditor.help"
  
return locBookName
end getHelpBook

★Click Here to Open This Script 

AppleScript名:help_sample
tell application "HelpViewer"
  activate
  
try
    lookup anchor "scpedt1126" in book "com.apple.ScriptEditor.help"
  end try
end tell

★Click Here to Open This Script 

Posted in System | Tagged 10.11savvy 10.12savvy 10.13savvy HelpViewer | Leave a comment

指定アプリケーションのヘルプブック内で指定キーワードを検索する

Posted on 3月 8, 2018 by Takaaki Naganoya

指定名称のアプリケーションのヘルプブック内で指定キーワードを検索するAppleScriptです。

HelpBookを表示するOS標準搭載アプリケーション「HelpViewer」は一応AppleScript対応のスクリプタブルなアプリケーションなので、AppleScriptからコントロールできるのですが、経験上あまり信頼性がない(コマンドを無視して、表示しないことがある)ので、Cocoa経由で検索・表示を行わせてみました。

Cocoa経由でもすぐに応答は返ってこないのですが、(HelpViewerの起動を含めて)数秒待たされて結果が表示される感じです。

AppleScript名:指定アプリケーションのヘルプブック内で指定キーワードを検索する
— Created 2017-04-18 by Takaaki Naganoya
— 2017 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
use framework "AppKit"

set anAppName to "Script Editor"
set aTargString to "用語説明" –"Script Dictionary" in Japanese
set hRes to searchHelpBook(anAppName, aTargString) of me

–指定アプリケーションのヘルプブックで、指定アンカーを表示する
on searchHelpBook(anAppName, aTargString)
  set locBookName to getHelpBook(anAppName) of me
  
if locBookName = false then return false
  
current application’s NSHelpManager’s sharedHelpManager()’s findString:aTargString inBook:locBookName
end searchHelpBook

–指定アプリケーションのヘルプブック名称を取得する
on getHelpBook(anAppName)
  set aWorkspace to current application’s NSWorkspace’s sharedWorkspace()
  
set appPath to aWorkspace’s fullPathForApplication:anAppName
  
if appPath is equal to missing value then return false
  
  
set locBookName to (current application’s NSBundle’s bundleWithPath:appPath)’s objectForInfoDictionaryKey:"CFBundleHelpBookName"
  
if locBookName is equal to missing value then return false
  
–> "com.apple.ScriptEditor.help"
  
return locBookName
end getHelpBook

★Click Here to Open This Script 

▼AppleScript経由でHelpViewerにコマンドを発行してキーワード検索させたところ。検索が実行されない。

AppleScript名:HelpViewerで検索する?(コマンドを実行しても検索結果が表示されない)
tell application "HelpViewer"
  activate
  
search looking for "用語説明"
end tell

★Click Here to Open This Script 

Posted in System | Tagged 10.11savvy 10.12savvy 10.13savvy HelpViewer | Leave a comment

AppleScriptの構文色分けカラーフォーマットをplistから読み込む

Posted on 3月 7, 2018 by Takaaki Naganoya

AppleScriptの構文色分けフォーマットをplistから読み込むAppleScriptです。

ただし、本Scriptで取得した色情報はスクリプトエディタ上で設定した内容と若干RGB値が異なるため、色情報をもとに構文要素を判定するような処理に本Scriptをそのまま用いることは推奨しません。

AppleScript名:AppleScriptの構文色分けカラーフォーマットをplistから読み込む
— Created 2013-11-11 by Shane Stanley
— Changed 2014-12-14 by Takaaki Naganoya
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

set cList to getAppleScriptSourceColors() of me
–> {​​​​​{​​​​​​​redValue:37265, ​​​​​​​greenValue:10280, ​​​​​​​blueValue:37008, ​​​​​​​fontName:"Osaka", ​​​​​​​fontSize:13.0​​​​​}, ​​​​​{​​​​​​​redValue:15672, ​​​​​​​greenValue:3071, ​​​​​​​blueValue:15832, ​​​​​​​fontName:"Osaka", ​​​​​​​fontSize:13.0​​​​​}, ​​​​​{​​​​​​​redValue:3598, ​​​​​​​greenValue:15934, ​​​​​​​blueValue:64507, ​​​​​​​fontName:"Osaka", ​​​​​​​fontSize:13.0​​​​​}, ​​​​​{​​​​​​​redValue:30840, ​​​​​​​greenValue:13364, ​​​​​​​blueValue:52171, ​​​​​​​fontName:"Osaka", ​​​​​​​fontSize:13.0​​​​​}, ​​​​​{​​​​​​​redValue:64764, ​​​​​​​greenValue:10794, ​​​​​​​blueValue:7196, ​​​​​​​fontName:"Osaka", ​​​​​​​fontSize:13.0​​​​​}, ​​​​​{​​​​​​​redValue:0, ​​​​​​​greenValue:0, ​​​​​​​blueValue:0, ​​​​​​​fontName:"Osaka", ​​​​​​​fontSize:13.0​​​​​}, ​​​​​{​​​​​​​redValue:37265, ​​​​​​​greenValue:21074, ​​​​​​​blueValue:4369, ​​​​​​​fontName:"Osaka", ​​​​​​​fontSize:13.0​​​​​}, ​​​​​{​​​​​​​redValue:0, ​​​​​​​greenValue:0, ​​​​​​​blueValue:0, ​​​​​​​fontName:"Osaka", ​​​​​​​fontSize:13.0​​​​​}, ​​​​​{​​​​​​​redValue:10023, ​​​​​​​greenValue:51657, ​​​​​​​blueValue:51657, ​​​​​​​fontName:"Osaka", ​​​​​​​fontSize:13.0​​​​​}, ​​​​​{​​​​​​​redValue:3855, ​​​​​​​greenValue:15934, ​​​​​​​blueValue:64507, ​​​​​​​fontName:"Osaka", ​​​​​​​fontSize:13.0​​​​​}, ​​​​​{​​​​​​​redValue:7967, ​​​​​​​greenValue:46774, ​​​​​​​blueValue:64764, ​​​​​​​fontName:"Osaka", ​​​​​​​fontSize:13.0​​​​​}, ​​​​​{​​​​​​​redValue:33153, ​​​​​​​greenValue:14906, ​​​​​​​blueValue:55769, ​​​​​​​fontName:"Osaka", ​​​​​​​fontSize:13.0​​​​​}, ​​​​​{​​​​​​​redValue:23901, ​​​​​​​greenValue:13878, ​​​​​​​blueValue:37522, ​​​​​​​fontName:"Osaka", ​​​​​​​fontSize:13.0​​​​​}, ​​​​​{​​​​​​​redValue:47484, ​​​​​​​greenValue:3164, ​​​​​​​blueValue:32926, ​​​​​​​fontName:"Osaka", ​​​​​​​fontSize:13.0​​​​​}, ​​​​​{​​​​​​​redValue:6491, ​​​​​​​greenValue:47213, ​​​​​​​blueValue:32320, ​​​​​​​fontName:"Osaka", ​​​​​​​fontSize:13.0​​​​​}, ​​​​​{​​​​​​​redValue:40001, ​​​​​​​greenValue:37149, ​​​​​​​blueValue:1331, ​​​​​​​fontName:"Osaka", ​​​​​​​fontSize:13.0​​​​​}, ​​​​​{​​​​​​​redValue:20379, ​​​​​​​greenValue:0, ​​​​​​​blueValue:35059, ​​​​​​​fontName:"Osaka", ​​​​​​​fontSize:13.0​​​​​}, ​​​​​{​​​​​​​redValue:4539, ​​​​​​​greenValue:35536, ​​​​​​​blueValue:35798, ​​​​​​​fontName:"Osaka", ​​​​​​​fontSize:13.0​​​​​}​​​}

–AppleScriptの構文色分けのカラー値をRGBで取得する
on getAppleScriptSourceColors()
  
  
— get the info as a dictionary
  
set thePath to current application’s NSString’s stringWithString:"~/Library/Preferences/com.apple.applescript.plist"
  
set thePath to thePath’s stringByExpandingTildeInPath()
  
set theInfo to current application’s NSDictionary’s dictionaryWithContentsOfFile:thePath
  
  
— extract relevant part and loop through
  
set theArray to (theInfo’s valueForKey:"AppleScriptSourceAttributes") as list
  
  
set colList to {}
  
  
repeat with i from 1 to count of theArray
    set anEntry to item i of theArray
    
log anEntry
    
    
set colorData to NSColor of anEntry
    
set theColor to (current application’s NSUnarchiver’s unarchiveObjectWithData:colorData)
    
    
set {rVal, gVal, bVal} to retColListFromNSColor(theColor, 65535) of me
    
    
set fontData to NSFont of anEntry
    
set theFont to (current application’s NSUnarchiver’s unarchiveObjectWithData:fontData)
    
    
set aFontName to theFont’s displayName() as text
    
set aFontSize to theFont’s pointSize()
    
    
set aColRec to {redValue:rVal, greenValue:gVal, blueValue:bVal, fontName:aFontName, fontSize:aFontSize}
    
    
set the end of colList to aColRec
  end repeat
  
  
return colList
end getAppleScriptSourceColors

–NSColorからRGBの値を取り出す
on retColListFromNSColor(aCol, aMAX as integer)
  set aRed to round ((aCol’s redComponent()) * aMAX) rounding as taught in school
  
set aGreen to round ((aCol’s greenComponent()) * aMAX) rounding as taught in school
  
set aBlue to round ((aCol’s blueComponent()) * aMAX) rounding as taught in school
  
  
if aRed > aMAX then set aRed to aMAX
  
if aGreen > aMAX then set aGreen to aMAX
  
if aBlue > aMAX then set aBlue to aMAX
  
  
return {aRed, aGreen, aBlue}
end retColListFromNSColor

★Click Here to Open This Script 

Posted in Color OSA System | Tagged 10.11savvy 10.12savvy 10.13savvy Script Editor | 3 Comments

指定パスのAppleScript書類がコンパイル済みかどうかチェック

Posted on 3月 7, 2018 by Takaaki Naganoya
AppleScript名:指定パスのAppleScript書類がコンパイル済みかどうかチェック
— Created 2014-12-16 by Takaaki Naganoya
— 2014 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
use framework "OSAKit"

property |NSURL| : a reference to current application’s |NSURL|
property OSAScript : a reference to current application’s OSAScript

–指定AppleScriptがコンパイルずみ(中間コードへの翻訳の意)かどうかをしらべる
set a to (choose file of type {"com.apple.applescript.script-bundle", "com.apple.applescript.script", "com.apple.applescript.text"})
set asRes to chkAScompiled(a) as list of string or string
–> true or false

–指定のAppleScriptファイルがコンパイル(構文確認+中間言語化)ずみかどうかを取得する
on chkAScompiled(anAlias as {alias, string})
  set aURL to |NSURL|’s fileURLWithPath:(POSIX path of anAlias)
  
set asO to OSAScript’s alloc()’s initWithContentsOfURL:aURL |error|:(missing value)
  
  
try
    set compF to asO’s isCompiled() as boolean
    
return compF
  on error
    return false
  end try
end chkAScompiled

★Click Here to Open This Script 

Posted in Color OSA System | Tagged 10.11savvy 10.12savvy 10.13savvy Script Editor | Leave a comment

nameを指定してOSA言語のインスタンスを生成する

Posted on 3月 6, 2018 by Takaaki Naganoya

name(名称)を指定してOSA言語のインスタンスを生成するテストを行うAppleScriptです。

このあたりの話は、スクリプトエディタ上では直接取得できますし、コマンドラインからだとosalangコマンドを実行すれば名称一覧を取得できます。Cocoa経由でどの程度の情報が取得できるのか、ちょっと試してながらく放置したままになっていました。

再度、OSAKit系の情報を探してみても……見当たらない(ーー;

以前にAppleEvent Managerのドキュメントをまるごとオフラインにしていた前科があるので、担当に「(オフラインになっていて)見えないんだけど?」と確認したところ………

 「何が見えないんだ? 最初からそんなもんないぞ。これまでにドキュメントを作ったこともない」

と言われる始末。余計悪いわ(ーー;;;

というわけで、Web上にドキュメントが掲載されていないOSAKit系の情報については、Xcode上から、以下のように操作してヘッダーファイルの内容を確認することが必要なようです。

AppleScript名:nameを指定してOSA言語のインスタンスを生成する
— Created 2018-03-05 by Takaaki Naganoya
— 2018 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
use framework "OSAKit"

property OSALanguage : a reference to current application’s OSALanguage
property OSALanguageInstance : a reference to current application’s OSALanguageInstance

set anOSALanguageInstance to OSALanguageInstance’s languageInstanceWithLanguage:(OSALanguage’s defaultLanguage())
set aLanguage to anOSALanguageInstance’s |language|()’s |name|() as string
–> "AppleScript"

set bLanguage to OSALanguage’s languageForName:"AppleScript"
set bName to bLanguage’s |name|() as string
–> "AppleScript"

set cLanguage to OSALanguage’s languageForName:"JavaScript"
set cName to cLanguage’s |name|() as string
–> "JavaScript"

set langArray to (OSALanguage’s availableLanguages()’s valueForKeyPath:"name") as list
–> {"AppleScript", "JavaScript"}

★Click Here to Open This Script 

Posted in Color OSA System | Tagged 10.11savvy 10.12savvy 10.13savvy Script Editor | Leave a comment

Script Editorをコントロールして各構文要素の色情報を取得する v5

Posted on 3月 5, 2018 by Takaaki Naganoya

Script Editorをコントロールして、AppleScriptの各構文要素の色情報を取得するAppleScriptです。

AppleScriptの構文要素の色分けを取得するのに、当初はplistファイルから読み込んでいたのですが、途中から(Mac OS X 10.5あたり?)plistファイルのフォーマットがテキスト形式からバイナリ形式に変更になり、AppleScriptから読み込んでも判定できない内容になりました(Cocoaの機能を使うと読み取れるのですが)。

そこで、「プログラム的には意味はないが、対象の構文要素が入っているテキスト」でAppleScriptを新規ドキュメントを作成してコンパイル(構文確認)を実行。新規ドキュメントからリッチテキストとして書式情報を取得し、想定した文字の位置から指定構文要素に対応する色情報を取得します。

plistの保存形式が途中で変更されたのとは別に、書式つきテキスト(attribute runs)の挙動もOSバージョンによって微妙に変わってきました。

同じデータを与えても、書式の区切りが微妙に変わって、書式(色)情報を固定の箇所から読み取っていてはそのようなOSバージョン変更に伴う挙動の微妙な変更に対応し切れませんでした。そのため、文字列をサーチして毎回動的にデータ位置を検出するように書き換えた経緯があります。

本ルーチンは、変数名のリネーム用に作成したので構文要素確認用のダミーテキストは最低限のものだけを含んでいますが、その気になればすべての構文要素の色情報を取得可能です。

これとは別に、Cocoaの機能を用いてplistから構文書式情報を取得するAppleScriptも存在するものの、計算して微妙に色情報が合わないので、9年前に作成した本ルーチンを使い続けています(当時)。

→ さすがに重要なルーチンなので、Cocoa系の機能を使って処理するように書き換えました。いまはCocoa系ルーチンを使っています

AppleScript名:Script Editorをコントロールして各構文要素の色情報を取得する v5
— Created 2009-06-01 by Takaaki Naganoya
— 2009-2018 Piyomaru Software

set scList to getRexicalColorOfScriptEditor() of me
–> {{32053, 4213, 32213}, {15672, 3071, 15831}, {2841, 6963, 64125}, {8259, 42547, 64473}, {0, 0, 0}, {32202, 16452, 3889}}
–色書式データ。先頭から順番に、、、
–新規テキスト, 演算子など, スクリプティング予約語, コマンド名, 値(数値、データ), 変数およびサブルーチン名

–スクリプトエディタの各構文要素の指定色を返す
–v5の変更点:Leopard以降のStyle runsの挙動変化(スペースを分離する/しない)に対応し、動的にサンプル文を走査するようにした
–v4の変更点:構文要素検出時のテンポラリウィンドウ作成時にScript Editorを隠す
–v3の変更点:重複時のエラー検出を追加
on getRexicalColorOfScriptEditor()
  set aRes to setVisibleOfSpecifiedProcess("Script Editor", false) of me
  
  
set rexList to {"+", "set", "application", "Comment", "1", "a"} –文中から検索するテキスト要素
  
set colList to {} –色情報を入れるリスト
  
  
  
tell application "Script Editor"
    
    
set aDoc to make new document
    
tell front document
      set aName to name
      
–end tell
      
      
–tell document aName
      
–未コンパイル時のテキストを取得
      
set contents to "aaaaa"
      
set rexItem1 to (color of attribute runs)
      
set rexItem1 to contents of (item 1 of rexItem1)
      
      
set colList to {rexItem1}
      
      
      
–各種構文要素を含む文字を入れる
      
set contents to "1 + 1
set a to \"abc\"
tell application \"Finder\"
end tell
–Comment
"

      –追加する場合には、テキストを後ろに追加すること
      
      
try
        compile
      on error
        close without saving
        
return false
      end try
      
      
set rex1 to attribute runs
      
set rex2 to color of attribute runs
      
      
repeat with i in rexList
        set j to contents of i
        
set rC to 1
        
repeat with ii in rex1
          set jj to contents of ii
          
set jj to replaceText(jj, " ", "") of me –スペースを削除する
          
if j = jj then
            set the end of colList to contents of item rC of rex2
            
exit repeat –抜けていた
          end if
          
set rC to rC + 1
        end repeat
      end repeat
      
      
close without saving
    end tell
    
  end tell
  
  
–Script Editorの再表示
  
set aRes to setVisibleOfSpecifiedProcess("Script Editor", true) of me
  
  
–要素の重複検出
  
set aRes to detectDuplicationSimple(colList) of me
  
if aRes = false then
    return false
  else
    return colList
  end if
  
end getRexicalColorOfScriptEditor

–リスト中の重複検出
on detectDuplicationSimple(cList)
  copy cList to ccList
  
  
set j to length of ccList
  
  
repeat with i from 2 to j
    set first_item to item 1 of ccList
    
set ccList to rest of ccList
    
if first_item is in ccList then
      return false
    end if
  end repeat
  
  
return true
end detectDuplicationSimple

–指定プロセスの可視/不可視切り替え
on setVisibleOfSpecifiedProcess(aProc, aBoolean)
  tell application "System Events"
    if exists process aProc then
      set visible of process aProc to aBoolean
      
set resF to true
    else
      set resF to false
    end if
  end tell
  
return resF
end setVisibleOfSpecifiedProcess

–任意のデータから特定の文字列を置換
on replaceText(origData, origText, repText)
  set curDelim to AppleScript’s text item delimiters
  
set AppleScript’s text item delimiters to {origText}
  
set origData to text items of origData
  
set AppleScript’s text item delimiters to {repText}
  
set origData to origData as text
  
set AppleScript’s text item delimiters to curDelim
  
return origData
end replaceText

★Click Here to Open This Script 

Posted in Color OSA System | Tagged 10.11savvy 10.12savvy 10.13savvy Script Editor | 1 Comment

Terminalで指定コマンドのman pageを表示する

Posted on 2月 27, 2018 by Takaaki Naganoya

Terminal.appで指定コマンドのman pageを表示するAppleScriptです。

Terminal.appには

{appName:”Terminal”, appBundleID:”com.apple.Terminal”, urlScheme:{“telnet”, “ssh”, “x-man-page”}}

と、いろいろURL Schemeが定義されており、そのうちの1つ、x-man-pageのURL Shcemeを利用して表示させてみました。

AppleScript名:Terminalで指定コマンドのman pageを表示する
set aCommandName to "ps"
set aURL to "x-man-page://" & aCommandName
open location aURL

★Click Here to Open This Script 

Posted in System | Tagged 10.11savvy 10.12savvy 10.13savvy Terminal | Leave a comment

エンコーダーの情報を取得する

Posted on 2月 25, 2018 by Takaaki Naganoya
AppleScript名:エンコーダーの情報を取得する
tell application "iTunes"
  set anEncoder to current encoder
  
set aProp to properties of anEncoder
  
–> {class:encoder, id:63, index:1, name:"AAC Encoder"}
  
  
set encList to every encoder
  
–> {encoder id 63 of application "iTunes", encoder id 60 of application "iTunes", encoder id 61 of application "iTunes", encoder id 62 of application "iTunes", encoder id 59 of application "iTunes"}
  
  
set encnameList to name of every encoder
  
–> {"AAC Encoder", "AIFF Encoder", "Lossless Encoder", "MP3 Encoder", "WAV Encoder"}
  
  
set encPropList to properties of every encoder
  
–> {{class:encoder, id:63, index:1, name:"AAC Encoder"}, {class:encoder, id:60, index:2, name:"AIFF Encoder"}, {class:encoder, id:61, index:3, name:"Lossless Encoder"}, {class:encoder, id:62, index:5, name:"MP3 Encoder"}, {class:encoder, id:59, index:6, name:"WAV Encoder"}}
  
end tell

★Click Here to Open This Script 

iTunes Control

Posted in System | Tagged 10.11savvy 10.12savvy 10.13savvy iTunes | Leave a comment

デスクトップを隠すv6

Posted on 2月 24, 2018 by Takaaki Naganoya

Edama2さんから投稿していただいた、デスクトップを隠すAppleScriptアプレットです。

資料や本のために画面キャプチャを行うさい、デスクトップを隠しておく(アイコンとかデスクトップピクチャとか)必要があるケースがあります。そのような用途のために作られたものです。

–> download デスクトップを隠すv6

AppleScript名:デスクトップを隠すv6
script HideDesktop
  use AppleScript version "2.4"
  
use scripting additions
  
use framework "Foundation"
  
use framework "Carbon" — AEInteractWithUser() is in Carbon
  
  
#GUI部品のtag
  
property _TAG_OF_COLOR_WELL : 501
  
property _TAG_OF_SLIDER : 502
  
property _TAG_OF_BUTTON : 503
  
  
on run
    if current application’s AEInteractWithUser(-1, missing value, missing value) is not equal to 0 then return
    
    
#色データを復元
    
if my _color_data = missing value then
      set myColor to current application’s NSColor’s colorWithCalibratedRed:0.2 green:0.3 blue:0.5 alpha:1
    else
      set str to current application’s NSString’s stringWithString:(my _color_data)
      
set enc to current application’s NSISOLatin1StringEncoding
      
set strData to str’s dataUsingEncoding:(enc)
      
set myColor to current application’s NSUnarchiver’s unarchiveObjectWithData:strData
    end if
    
    
activate
    
my makeSettingWindow(myColor, my _alpha_value, my _is_show_icon)
  end run
  
  
on quit
    repeat with aWin in (current application’s NSApp’s |windows|())
      set aSound to missing value
      
if aWin’s styleMask() = current application’s NSBorderlessWindowMask then
        try
          tell current application’s NSSound’s alloc()
            tell initWithContentsOfFile_byReference_("/Applications/Messages.app/Contents/Resources/Default.aiff", true)
              set dTime to currentTime()
              
play()
              
set aSound to it
            end tell
          end tell
        end try
      end if
      (
my closeWin:(aWin))
      
if aSound ≠ missing value then delay (dTime + 0.5)
    end repeat
    
–continue quit
  end quit
  
  
on makeSettingWindow(myColor, alphaVal, isShowIcon)
    
    
#NSView
    
tell current application’s NSView’s alloc()
      tell initWithFrame_(current application’s NSMakeRect(0, 0, 360, 210))
        setNeedsDisplay_(true)
        
set aView to it
      end tell
    end tell
    
    
#Labelをつくる
    
tell current application’s NSTextField’s alloc()
      tell initWithFrame_(current application’s NSMakeRect(60, 150, 80, 20))
        setEditable_(false)
        
setStringValue_("背景色:")
        
setDrawsBackground_(false)
        
setBordered_(false)
        
setAlignment_(current application’s NSRightTextAlignment)
        
aView’s addSubview:it
      end tell
    end tell
    
tell current application’s NSTextField’s alloc()
      tell initWithFrame_(current application’s NSMakeRect(60, 110, 80, 20))
        setEditable_(false)
        
setStringValue_("透明度:")
        
setDrawsBackground_(false)
        
setBordered_(false)
        
setAlignment_(current application’s NSRightTextAlignment)
        
aView’s addSubview:it
      end tell
    end tell
    
tell current application’s NSTextField’s alloc()
      tell initWithFrame_(current application’s NSMakeRect(60, 70, 80, 20))
        setEditable_(false)
        
setStringValue_("オプション:")
        
setDrawsBackground_(false)
        
setBordered_(false)
        
setAlignment_(current application’s NSRightTextAlignment)
        
aView’s addSubview:it
      end tell
    end tell
    
#Color Well
    
tell current application’s NSColorWell’s alloc()
      tell initWithFrame_(current application’s NSMakeRect(140, 150, 180, 20))
        setColor_(myColor)
        
setTag_(my _TAG_OF_COLOR_WELL)
        
aView’s addSubview:it
      end tell
    end tell
    
#スライダー
    
tell current application’s NSSlider’s alloc()
      tell initWithFrame_(current application’s NSMakeRect(140, 110, 180, 20))
        setMaxValue_(100)
        
setMinValue_(10)
        
–setNumberOfTickMarks_(25)
        
setKnobThickness_(1)
        
setAllowsTickMarkValuesOnly_(true)
        
setTickMarkPosition_(current application’s NSTickMarkBelow)
        
setIntValue_(alphaVal)
        
setTag_(my _TAG_OF_SLIDER)
        
aView’s addSubview:it
      end tell
    end tell
    
#アイコンを隠すか
    
tell current application’s NSButton’s alloc()
      tell initWithFrame_(current application’s NSMakeRect(140, 70, 180, 20)) — pullsDown:false
        setButtonType_(current application’s NSSwitchButton)
        
setTitle_("アイコンも隠す")
        
setState_(isShowIcon)
        
setTag_(my _TAG_OF_BUTTON)
        
aView’s addSubview:it
      end tell
    end tell
    
#OK/Cancel Button
    
tell current application’s NSButton’s alloc()
      tell initWithFrame_(current application’s NSMakeRect(110, 10, 90, 40))
        setButtonType_(current application’s NSMomentaryLightButton)
        
setBezelStyle_(current application’s NSRoundedBezelStyle)
        
setTitle_("Cancel")
        
setTarget_(me)
        
setAction_("clicked:")
        
setKeyEquivalent_(ASCII character (27))
        
aView’s addSubview:it
      end tell
    end tell
    
tell current application’s NSButton’s alloc()
      tell initWithFrame_(current application’s NSMakeRect(210, 10, 90, 40))
        setButtonType_(current application’s NSMomentaryLightButton)
        
setBezelStyle_(current application’s NSRoundedBezelStyle)
        
setTitle_("OK")
        
setTarget_(me)
        
setAction_("clicked:")
        
setKeyEquivalent_(return)
        
aView’s addSubview:it
      end tell
    end tell
    
    
set aTitle to current application’s name as text
    
    
#Window
    
set aScreen to current application’s NSScreen’s mainScreen()
    
set aFrame to aView’s frame()
    
set aBacking to current application’s NSTitledWindowMask
    
set aDefer to current application’s NSBackingStoreBuffered
    
tell current application’s NSWindow’s alloc()
      tell initWithContentRect_styleMask_backing_defer_screen_(aFrame, aBacking, aDefer, false, aScreen)
        –setLevel_(current application’s NSNormalWindowLevel)
        
setTitle_(aTitle)
        
setDelegate_(me)
        
setDisplaysWhenScreenProfileChanges_(true)
        
setHasShadow_(true)
        
setIgnoresMouseEvents_(false)
        
setOpaque_(false)
        
setReleasedWhenClosed_(true)
        
setContentView_(aView)
        
|center|()
        
makeKeyAndOrderFront_((me))
      end tell
    end tell
  end makeSettingWindow
  
  
#ボタンをクリックした時
  
on clicked:aSender
    #カラーパネルを閉じる
    
tell current application’s NSColorPanel
      if (sharedColorPanelExists() as boolean) then sharedColorPanel()’s |close|()
    end tell
    
#設定値の読み込み
    
tell aSender’s superview()
      set myColor to viewWithTag_(my _TAG_OF_COLOR_WELL)’s |color|()
      
set alphaVal to viewWithTag_(my _TAG_OF_SLIDER)’s intValue()
      
set isShowIcon to viewWithTag_(my _TAG_OF_BUTTON)’s state()
    end tell
    
#Windowを閉じる
    
my closeWin:(aSender’s |window|())
    
    
set aTitle to aSender’s title() as text
    
if aTitle = "OK" then
      #デスクトップを隠す
      
set {myColor, my _alpha_value, my _is_show_icon} to my makeCoverWindow(myColor, alphaVal, isShowIcon)
      
      
#NSColor–>NSData–>NSString
      
set aData to current application’s NSArchiver’s archivedDataWithRootObject:(myColor)
      
set enc to current application’s NSISOLatin1StringEncoding
      
set str to current application’s NSString’s alloc()’s initWithData:(aData) encoding:enc
      
set my _color_data to str as text
      
    else if aTitle = "Cancel" then
      tell current application to quit
    end if
  end clicked:
  
  
#ウィンドウを作成
  
on makeCoverWindow(myColor, alphaVal as integer, isShowIcon as boolean)
    
    
set aScreen to current application’s NSScreen’s mainScreen()
    
set screenFrame to aScreen’s frame()
    
set aBacking to current application’s NSBorderlessWindowMask
    
set aDefer to current application’s NSBackingStoreBuffered
    
    
set aHeight to screenFrame’s |size|’s height
    
set aWidth to screenFrame’s |size|’s width
    
set aFrame to current application’s NSMakeRect(0.0, aHeight, aWidth, aHeight)
    
    
#Image
    
tell current application’s NSImage’s alloc()
      tell initWithSize_(screenFrame’s |size|)
        lockFocus()
        
set theColor to myColor’s colorWithAlphaComponent:(alphaVal / 100)
        
tell current application’s NSBezierPath’s bezierPath()
          appendBezierPathWithRect_(screenFrame)
          
theColor’s |set|()
          
fill()
        end tell
        
unlockFocus()
        
set anImage to it
      end tell
    end tell
    
    
#View
    
tell current application’s NSImageView’s alloc()
      tell initWithFrame_(aFrame)
        setNeedsDisplay_(true)
        
setImage_(anImage)
        
set aCustView to it
      end tell
    end tell
    
    
#Window
    
tell current application’s NSWindow’s alloc()
      tell initWithContentRect_styleMask_backing_defer_screen_(aFrame, aBacking, aDefer, false, aScreen)
        
        
#アイコンの表示
        
if not isShowIcon then
          setLevel_(current application’s kCGDesktopWindowLevel)
        else
          setLevel_(((current application’s kCGBackstopMenuLevelKey) – 100)) –>メニューバーの影のため100ひく
        end if
        
setBackgroundColor_(current application’s NSColor’s clearColor())
        
setContentView_(aCustView)
        
setDelegate_(me)
        
setDisplaysWhenScreenProfileChanges_(true)
        
setHasShadow_(false)
        
setIgnoresMouseEvents_(false)
        
setOpaque_(false)
        
setReleasedWhenClosed_(true)
        
makeKeyAndOrderFront_((me))
        
        
#Sound
        
try
          (current application’s NSSound’s alloc()’s initWithContentsOfFile:"/Applications/Messages.app/Contents/Resources/Invitation Accepted.aiff" byReference:true)’s play()
        on error the error_message number the error_number
          (current application’s NSSound’s soundNamed:"Purr")’s play()
        end try
        
        
setFrame_display_animate_(screenFrame, true, true)
      end tell
    end tell
    
    
return {myColor, alphaVal, isShowIcon}
  end makeCoverWindow
  
  
#close win
  
on closeWin:aWindow
    repeat with n from 10 to 1 by -1
      (aWindow’s setAlphaValue:n / 10)
      
delay 0.02
    end repeat
    
aWindow’s |close|()
    
delay 0.02
  end closeWin:
end script

#設定値
property _color_data : missing value
property _alpha_value : 100
property _is_show_icon : true

on run
  run of HideDesktop
end run

on quit
  quit of HideDesktop
  
continue quit
end quit

★Click Here to Open This Script 

Posted in System | Leave a comment

指定ファイルをFinderで選択表示_OLD Style_as

Posted on 2月 24, 2018 by Takaaki Naganoya
AppleScript名:指定ファイルをFinderで選択表示_OLD Style_as
— Created 2016-10-31 by Takaaki Naganoya
— 2016 Piyomaru Software

set aFile to choose file
tell application "Finder"
  activate
  
reveal aFile
end tell

★Click Here to Open This Script 

Posted in file System | Tagged 10.11savvy 10.12savvy 10.13savvy Finder | Leave a comment

Post navigation

  • Older posts
  • Newer posts

電子書籍(PDF)をオンラインストアで販売中!

Google Search

Popular posts

  • 開発機としてM2 Mac miniが来たのでガチレビュー
  • macOS 15, Sequoia
  • Pages本執筆中に、2つの書類モード切り替えに気がついた
  • Numbersで選択範囲のセルの前後の空白を削除
  • メキシカンハットの描画
  • Pixelmator Pro v3.6.4でAppleScriptからの操作時の挙動に違和感が
  • AppleScriptによる並列処理
  • Safariで「プロファイル」機能を使うとAppleScriptの処理に影響
  • macOS 15でも変化したText to Speech環境
  • AppleScript入門③AppleScriptを使った「自動化」とは?
  • デフォルトインストールされたフォント名を取得するAppleScript
  • macOS 15 リモートApple Eventsにバグ?
  • 【続報】macOS 15.5で特定ファイル名パターンのfileをaliasにcastすると100%クラッシュするバグ
  • AppleScript入門① AppleScriptってなんだろう?
  • Script Debuggerの開発と販売が2025年に終了
  • macOS 14で変更になったOSバージョン取得APIの返り値
  • NSObjectのクラス名を取得 v2.1
  • 有害ではなくなっていたSpaces
  • macOS 15:スクリプトエディタのAppleScript用語辞書を確認できない
  • Xcode上のAppleScriptObjCのプログラムから、Xcodeのログ欄へのメッセージ出力を実行

Tags

10.11savvy (1101) 10.12savvy (1242) 10.13savvy (1391) 10.14savvy (587) 10.15savvy (438) 11.0savvy (283) 12.0savvy (212) 13.0savvy (194) 14.0savvy (147) 15.0savvy (135) CotEditor (66) Finder (51) iTunes (19) Keynote (119) NSAlert (61) NSArray (51) NSBitmapImageRep (20) NSBundle (20) NSButton (34) NSColor (53) NSDictionary (28) NSFileManager (23) NSFont (21) NSImage (41) NSJSONSerialization (21) NSMutableArray (63) NSMutableDictionary (22) NSPredicate (36) NSRunningApplication (56) NSScreen (30) NSScrollView (22) NSString (119) NSURL (98) NSURLRequest (23) NSUTF8StringEncoding (30) NSView (33) NSWorkspace (20) Numbers (76) Pages (55) Safari (44) Script Editor (27) WKUserContentController (21) WKUserScript (20) WKWebView (23) WKWebViewConfiguration (22)

カテゴリー

  • 2D Bin Packing
  • 3D
  • AirDrop
  • AirPlay
  • Animation
  • AppleScript Application on Xcode
  • Beginner
  • Benchmark
  • beta
  • Bluetooth
  • Books
  • boolean
  • bounds
  • Bug
  • Calendar
  • call by reference
  • check sum
  • Clipboard
  • Cocoa-AppleScript Applet
  • Code Sign
  • Color
  • Custom Class
  • date
  • dialog
  • diff
  • drive
  • Droplet
  • exif
  • file
  • File path
  • filter
  • folder
  • Font
  • Font
  • GAME
  • geolocation
  • GUI
  • GUI Scripting
  • Hex
  • History
  • How To
  • iCloud
  • Icon
  • Image
  • Input Method
  • Internet
  • iOS App
  • JavaScript
  • JSON
  • JXA
  • Keychain
  • Keychain
  • Language
  • Library
  • list
  • Locale
  • Localize
  • Machine Learning
  • Map
  • Markdown
  • Menu
  • Metadata
  • MIDI
  • MIME
  • Natural Language Processing
  • Network
  • news
  • Noification
  • Notarization
  • Number
  • Object control
  • OCR
  • OSA
  • parallel processing
  • PDF
  • Peripheral
  • process
  • PRODUCTS
  • QR Code
  • Raw AppleEvent Code
  • Record
  • rectangle
  • recursive call
  • regexp
  • Release
  • Remote Control
  • Require Control-Command-R to run
  • REST API
  • Review
  • RTF
  • Sandbox
  • Screen Saver
  • Script Libraries
  • sdef
  • search
  • Security
  • selection
  • shell script
  • Shortcuts Workflow
  • Sort
  • Sound
  • Spellchecker
  • Spotlight
  • SVG
  • System
  • Tag
  • Telephony
  • Text
  • Text to Speech
  • timezone
  • Tools
  • Update
  • URL
  • UTI
  • Web Contents Control
  • WiFi
  • XML
  • XML-RPC
  • イベント(Event)
  • 未分類

アーカイブ

  • 2025年6月
  • 2025年5月
  • 2025年4月
  • 2025年3月
  • 2025年2月
  • 2025年1月
  • 2024年12月
  • 2024年11月
  • 2024年10月
  • 2024年9月
  • 2024年8月
  • 2024年7月
  • 2024年6月
  • 2024年5月
  • 2024年4月
  • 2024年3月
  • 2024年2月
  • 2024年1月
  • 2023年12月
  • 2023年11月
  • 2023年10月
  • 2023年9月
  • 2023年8月
  • 2023年7月
  • 2023年6月
  • 2023年5月
  • 2023年4月
  • 2023年3月
  • 2023年2月
  • 2023年1月
  • 2022年12月
  • 2022年11月
  • 2022年10月
  • 2022年9月
  • 2022年8月
  • 2022年7月
  • 2022年6月
  • 2022年5月
  • 2022年4月
  • 2022年3月
  • 2022年2月
  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年10月
  • 2021年9月
  • 2021年8月
  • 2021年7月
  • 2021年6月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年2月
  • 2021年1月
  • 2020年12月
  • 2020年11月
  • 2020年10月
  • 2020年9月
  • 2020年8月
  • 2020年7月
  • 2020年6月
  • 2020年5月
  • 2020年4月
  • 2020年3月
  • 2020年2月
  • 2020年1月
  • 2019年12月
  • 2019年11月
  • 2019年10月
  • 2019年9月
  • 2019年8月
  • 2019年7月
  • 2019年6月
  • 2019年5月
  • 2019年4月
  • 2019年3月
  • 2019年2月
  • 2019年1月
  • 2018年12月
  • 2018年11月
  • 2018年10月
  • 2018年9月
  • 2018年8月
  • 2018年7月
  • 2018年6月
  • 2018年5月
  • 2018年4月
  • 2018年3月
  • 2018年2月

https://piyomarusoft.booth.pm/items/301502

メタ情報

  • ログイン
  • 投稿フィード
  • コメントフィード
  • WordPress.org

Forum Posts

  • 人気のトピック
  • 返信がないトピック

メタ情報

  • ログイン
  • 投稿フィード
  • コメントフィード
  • WordPress.org
Proudly powered by WordPress
Theme: Flint by Star Verte LLC