5

外部アプリ (textedit など) から特定のウィンドウを最前面に設定したいと考えています。

GetFrontProcess を使用してアプリ自体への参照を正常に取得し、それが最前面にあるかどうかを確認できます。そうでない場合は、setFrontProcess を使用してフォーカスを合わせることができます。

その後、アクセシビリティ API を使用して、そのアプリケーションの下にあるすべてのウィンドウを調べることができます。特定のウィンドウが存在することを確認しています。存在する場合は、アプリケーションの最前面のウィンドウと比較します。

//get the front window of textEditApp and store it in 'currentFrontWindow'
    AXUIElementCopyAttributeValue(textEditApp, kAXFocusedWindowAttribute, (CFTypeRef *)&currentFrontWindow);

関心のあるウィンドウが最前面にない場合は、そのように設定する必要があります。これを行うには AXUIElement Set AttributeValue を使用できると思いましたが、成功していません。以下は、私がそれをやろうとした方法です。

//set the front window of textEditApp to be desiredFrontWindow
AXUIElementSetAttributeValue(textEditApp, kAXFocusedUIElementAttribute, desiredFrontWindow);

ウィンドウが存在し、アプリケーションが正常に「切り替え」られていることを確認しました。しかし、このコード行が指定されたウィンドウを最前面に表示しないのはなぜでしょうか?

ありがとう。

4

3 に答える 3

8

しかし、このコード行が指定されたウィンドウを最前面に表示しないのはなぜでしょうか?

読み取り専用属性を設定しようとしたためです。

ウィンドウを最前面にするには、ウィンドウの適切なプロパティを設定する必要があります。同じことがアプリケーションにも当てはまります。アプリケーションを最前面にするには、アプリケーションの適切なプロパティを設定する必要があります。

一番手前のウィンドウの Cocoa/Mac OS X 名は「メイン ウィンドウ」です。(たとえば、その概念に関連するNSApplicationおよびNSWindow のメソッドを参照してください。) アクセシビリティは同じ名前を使用するため、1 つのウィンドウを最前面にするには、その値を に設定しkAXMainAttributeますkCFBooleanTrue

アプリケーションを最前面にする方法も同様です。その値を に設定しkAXFrontmostAttributeますkCFBooleanTrue。アプリケーションの最前面ウィンドウを設定し、アプリケーションをアクティブにするために、これらの両方を行う必要があります。

私が知る限り、アプリケーションの 1 つのウィンドウだけを最前面に移動してセッション フォーカスを与える方法はありません。

于 2010-01-22T04:44:21.077 に答える
5

私が取り組んでいたアプリでこれを達成するには、アプリケーションを前面に移動し、単一のウィンドウを前面に移動しました。

最初にアプリを前面に持ってきます:

let currentPid = NSRunningApplication.currentApplication().processIdentifier
if let pid = (the pid of the app in question) where pid != currentPid {
  NSRunningApplication(processIdentifier: pid)?.activateWithOptions(.ActivateIgnoringOtherApps)
}

次に、ウィンドウを前面に送信します。

let window = (window AXUIElement)
AXUIElementSetAttributeValue(window, NSAccessibilityMainAttribute, true)
于 2015-10-26T02:32:13.470 に答える
1

私は最近、Carbon を気にしない場合、SetFrontProcessWithOptionsを使用してウィンドウを前面に移動し、2 番目の引数として kSetFrontProcessFrontWindowOnly を渡すとフォーカスを与えることができることを発見しました。

于 2011-07-22T02:11:09.623 に答える