0

アクセシビリティ API を使用して、OSX で他のアプリケーションを移動しようとしています。私は実際にこれを機能させています。しかし、私は大きな問題に遭遇しました。

AXUIElementRef appRef = AXUIElementCreateApplication(self.pid);

これは、アプリケーションの PID を使用して、後でウィンドウを移動します。複数のウィンドウが同じ PID を持っていることがわかりました。アプリケーションの 2 番目のウィンドウを移動しようとすると、アプリがクラッシュします。

WindowID だけを使用してアプリケーションを移動できますか?

4

1 に答える 1

0

本当に必要な場合に特定のウィンドウを一意に識別する方法は、 の結果を調べて、そこでCGWindowListCopyWindowInfo使用している pid に一致するものを選択することですappRefkCGWindowNumberCFNumber は、そのウィンドウの Quartz の一意の CGWindowID です。

ただし、ウィンドウを誤ってインデックス付けしている可能性が高いようです。これはあなたのために働くはずですappRef

CFArrayRef windows;
AXUIElementCopyAttributeValue(appRef, kAXWindowsAttribute, (CFTypeRef*)&windows);
int windowCount = windows ? CFArrayGetCount(windows) : 0;
for (int windowIndex = 0; windowIndex < windowCount; windowIndex++)
{
    AXUIElementRef windowRef = (AXUIElementRef)CFArrayGetValueAtIndex(windows, windowIndex);
    ... move windowRef here ...
}

それでも問題が明らかにならない場合は、クラッシュするコードとその方法を投稿してください。

于 2015-01-30T23:50:25.263 に答える