3

次の AppleScript を Objective-C/C に変換する方法はありますか?

tell application "System Events" to set visible of process "Safari" to false

NSAppleScriptクラスまたは呼び出しを使用してObjective-Cでこのapplescriptを実行できることは知ってsystem("osascript -e '...'")いますが、別の方法はありませんか?

Applescriptはこれをどのように行いますか?

あるいは、Objective-C/C の別のアプリケーションからウィンドウを非表示にすることはできますか?

アップデート:

SBApplicationクラスを使用してこれを行うことができることがわかりました:

SBApplication *SystemEvents = [SBApplication applicationWithBundleIdentifier:@"com.apple.systemevents"];
/*SystemEventsApplicationProcess*/ id Safari = [[SystemEvents performSelector:@selector(applicationProcesses)] objectWithName:@"Safari"];
[Safari setVisible:NO]; // Doesn't work!

ただし、setVisibleおそらく私が思うことをしないので、これは機能しません。

これは のクラス階層ですSystemEventsApplicationProcess:

SystemEventsApplicationProcess : SystemEventsProcess : SystemEventsUIElement : SystemEventsItem : SBObject : NSObject

SystemEventsXXXこれらのクラスで使用できるメソッドは次のとおりです。

SystemEventsApplicationProcess
    applicationFile

SystemEventsProcess
    setVisible:
    visible
    unixId
    totalPartitionSize
    shortName
    partitionSpaceUsed
    name
    id
    hasScriptingTerminology
    setFrontmost:
    frontmost
    fileType
    file
    displayedName
    creatorType
    Classic
    bundleIdentifier
    backgroundOnly
    architecture
    acceptsRemoteEvents
    acceptsHighLevelEvents
    windows
    menuBars

SystemEventsUIElement
    select
    clickAt:
    setValue:
    value
    title
    subrole
    setSize:
    size
    setSelected:
    selected
    roleDescription
    role
    setPosition:
    position
    orientation
    name
    minimumValue
    maximumValue
    help
    setFocused:
    focused
    entireContents
    enabled
    objectDescription
    objectClass
    accessibilityDescription
    windows
    valueIndicators
    UIElements
    toolBars
    textFields
    textAreas
    tables
    tabGroups
    staticTexts
    splitterGroups
    splitters
    sliders
    sheets
    scrollBars
    scrollAreas
    rows
    relevanceIndicators
    radioGroups
    radioButtons
    progressIndicators
    popUpButtons
    popOvers
    outlines
    menuItems
    menuButtons
    menuBarItems
    menuBars
    menus
    lists
    incrementors
    images
    growAreas
    groups
    drawers
    comboBoxes
    columns
    colorWells
    checkboxes
    buttons
    busyIndicators
    browsers
    attributes
    actions

SystemEventsItem
    setName:
    name
    id
    removeActionFromUsingActionName:usingActionNumber:
    pick
    keyUp
    keyDown
    increment
    editActionOfUsingActionName:usingActionNumber:
    doScript
    doFolderActionFolderActionCode:withItemList:withWindowSize:
    decrement
    confirm
    cancel
    attachedScripts
    attachActionToUsing:
    stop
    start
    saveAs:in:
    moveTo:
    exists
    duplicateTo:withProperties:
    delete
    closeSaving:savingIn:
    setProperties:
    properties
    objectClass

SBObject
    // ...
NSObject
    // ...
4

2 に答える 2

2

NSRunningApplication(その名前が示すように) 実行中のアプリケーションを表し、-hideメソッドを持つ を使用できます。

NSWorkspace実行中のすべてのアプリのリストが表示されます:[[NSWorkspace sharedWorkspace] runningApplications]をフィルタリングするか、バンドル識別子を使用して Safari を表すオブジェクトを取得できます+[NSRunningApplication runningApplicationsWithBundleIdentifier:](同じアプリの実行中のインスタンスが複数ある場合は、実際には配列を返すことに注意してください)。

于 2012-08-04T19:50:25.690 に答える
2

スクリプト ブリッジ フレームワークをプロジェクトに追加し、他にもいくつか追加しない限り、コードは機能しません。やったのか…わかりません。このリンクには、指示が必要な場合に必要なものがよく説明されているようです。

ちなみに、「可視に設定」とは、アプリケーション メニューから非表示にするのと同じように、アプリケーションを非表示にすることを意味します。ただし、アプリケーションを非表示にしたい場合は、NSWorkspace メソッドがあると確信しています。

最後のアドバイス...ほんの数行のapplescriptコードの場合、NSApplescriptが最適なオプションです。多くの AppleScript スクリプト コードを使用する場合は、スクリプト ブリッジの方が適していますが、私自身はコンパイル済みのスクリプトをプロジェクトに配置し、NSApplescript を使用してそのスクリプトからハンドラーを開始することがよくあります。ApplescriptObjC 言語も使用できます。たくさんの選択肢があります。

于 2012-08-04T19:52:09.287 に答える