2

Automatorでキーボードビューアを切り替えるコードを作成しました。

on run {input, parameters}
    if application "KeyboardViewer" is running then
        quit application "KeyboardViewer"
    else
        activate application "KeyboardViewer"
    end if
    return input
end run

ただし、キーボードビューアが現在実行中のウィンドウになり、すぐに入力を開始できません(前のウィンドウに戻す必要があります)。前のウィンドウが再び強調表示されるように追加できる特定のコードはありますか?

4

2 に答える 2

6

launch代わりに使用できますactivate

tell application "KeyboardViewer"
    if running then
        quit
    else
        launch
    end if
end tell

アプリケーションが開いていない場合は、launch通常、他のアプリケーションの上で、最前面のアプリケーションの下に新しいウィンドウが開きます。それ以外の場合は、アプリケーションをバックグラウンドに保持します。2番目のケースでは、ウィンドウを上げるために使用できますがAXRaise、アクティブなウィンドウのように見せることもできます。

launch application "Terminal"
tell application "System Events" to tell process "Terminal"
    perform action "AXRaise" of windows
end tell

前のアプリケーションを変数に保存することもできます。

set a to path to frontmost application as text
activate application "Terminal"
activate application a

フォーカスをバックグラウンドアプリケーションに移動する場合は、後で最前面のアプリケーションをアクティブ化できます。

try
    tell application "SystemUIServer"
        display dialog "" default answer ""
    end tell
end try
activate application (path to frontmost application as text)
于 2012-10-07T12:06:51.610 に答える
1

アプリケーションの「KeyboardViewer」行をアクティブ化した直後にこれを試してください...

tell application "System Events" to keystroke tab using command down

編集:上記の元の投稿はあなたのためにそれをしなかったので、それからこれを試してください。このような場合、最前線で実行されているアプリケーションを取得するために使用するサブルーチンを使用します。このコードをオートマターアクションのapplescriptセクションに配置するだけです...

on run {input, parameters}
    if application "KeyboardViewer" is running then
        quit application "KeyboardViewer"
    else
        set frontAppPath to my getFrontAppPath()
        activate application "KeyboardViewer"
        delay 0.2
        tell application frontAppPath to activate
    end if
    return input
end run

on getFrontAppPath()
    set frontAppPath to (path to frontmost application) as text
    set myPath to (path to me) as text

    if frontAppPath is myPath then
        try
            tell application "Finder" to set bundleID to id of file myPath
            tell application "System Events" to set visible of (first process whose bundle identifier is bundleID) to false

            -- we need to delay because it takes time for the process to hide
            -- I noticed this when running the code as an application from the applescript menu bar item
            set inTime to current date
            repeat
                set frontAppPath to (path to frontmost application) as text
                if frontAppPath is not myPath then exit repeat
                if (current date) - inTime is greater than 1 then exit repeat
            end repeat
        end try
    end if
    return frontAppPath
end getFrontAppPath
于 2012-10-07T09:17:47.847 に答える