将进程'窗口设置为前面。为什么最大化时这不起作用?

时间:2012-03-11 02:54:38

标签: objective-c macos nswindow

我正在尝试获取应用程序的窗口(让我们以Firefox为例)并将其带到最前面并将其集中。当程序没有最大化时,它工作正常,允许我将任何Firefox的窗口带到前面。

然而,当最大化时,它只是将整组窗口放在前面,无论它是否是我特别选择的窗口。这是我正在使用的:

AXUIElementPerformAction (element, kAXRaiseAction);
ProcessSerialNumber psn = [self serialNumberOfPid: [appPid unsignedIntValue]];
SetFrontProcessWithOptions (&psn, kSetFrontProcessFrontWindowOnly);

阅读其他一些帖子,我试过这个:

AXUIElementSetAttributeValue(element, kAXMainAttribute, kCFBooleanTrue);
AXUIElementSetAttributeValue(element, kAXFocusedAttribute, kCFBooleanTrue);
AXUIElementPerformAction (element, kAXRaiseAction);
    ProcessSerialNumber psn = [self serialNumberOfPid: [appPid unsignedIntValue]];
SetFrontProcessWithOptions (&psn, kSetFrontProcessFrontWindowOnly);

我做错了什么?为什么它只在窗户最大化时才会发生?有没有更好的方法呢?

1 个答案:

答案 0 :(得分:0)

尝试使用kAXFrontmostAttribute属性:

AXUIElementSetAttributeValue(element, kAXFrontmostAttribute, kCFBooleanTrue);