我有一个AppleScript可以捕获另一个应用程序中的计数器。这工作正常,但我想将结果输出到另一个浮动窗口,并使其随每个循环更新。有人知道这样做的方法吗?完成新手。
谢谢
编辑:
我的代码是:
tell application "System Events"
tell process "MIDI Editor"
with timeout of 0 seconds
repeat
set barCount to value of text field "Main Counter" of group "Counter Display Cluster" of window "Edit: kjhsdf" of application process "MIDI Editor" of application "System Events"
delay 0.01
end repeat
end timeout
end tell
end tell
(不知道为什么最后一句话会不断突破代码块!)
所以它的barCount我想在另一个窗口中实时镜像
答案 0 :(得分:2)
在脚本编辑器中,您可以使用某些AppleScriptObjC以编程方式创建带有可更新文本字段的非模式窗口。在下面的示例中,我使用重复计时器而不是AppleScript repeat语句,因为这样的紧密循环会阻塞用户界面。将脚本另存为应用程序,并设置选项保持打开状态。
use AppleScript version "2.4" -- Yosemite (10.10) or later
use framework "Cocoa"
use scripting additions
property WindowFrame : {{200, 600}, {150, 50}} -- window location and size
property TextFrame : {{10, 10}, {130, 30}} -- window size minus 20
property mainWindow : missing value
property textField : missing value
property timer : missing value
on run -- example
setup()
update()
set my timer to current application's NSTimer's timerWithTimeInterval:0.25 target:me selector:"update" userInfo:(missing value) repeats:true
current application's NSRunLoop's mainRunLoop's addTimer:timer forMode:(current application's NSDefaultRunLoopMode)
end run
to update() -- update text field
set barCount to ""
with timeout of 0.5 seconds
tell application "System Events" to tell process "MIDI Editor"
set barCount to value of text field "Main Counter" of group "Counter Display Cluster" of window "Edit: kjhsdf"
end tell
end timeout
textField's setStringValue:(barCount as text)
end update
to setup() -- create UI objects
tell (current application's NSTextField's alloc's initWithFrame:TextFrame)
set my textField to it
its setFont:(current application's NSFont's fontWithName:"Menlo" |size|:18)
its setBordered:false
its setDrawsBackground:false
its setSelectable:false
end tell
tell (current application's NSWindow's alloc's initWithContentRect:WindowFrame styleMask:1 backing:(current application's NSBackingStoreBuffered) defer:true)
set my mainWindow to it
its setAllowsConcurrentViewDrawing:true
its setHasShadow:true
its setTitle:"Progress"
its setLevel:(current application's NSFloatingWindowLevel)
its (contentView's addSubview:textField)
its setFrameAutosaveName:"Update Window" -- keep window position
its setFrameUsingName:"Update Window"
its makeKeyAndOrderFront:me
end tell
end setup