在浮动窗口中从重复循环显示变量

时间:2019-03-24 00:11:55

标签: applescript

我有一个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我想在另一个窗口中实时镜像

1 个答案:

答案 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