我正在处理调整所选窗口大小的应用程序。 选择任何窗口时,它都能成功运行。但是没有选择窗口时会崩溃。
目前从以下代码中获取最前面的窗口。
AXUIElementCopyAttributeValue(frontMostApp, kAXFocusedWindowAttribute, (CFTypeRef *)&frontMostWindow);
但如何检测该控件是在桌面上还是所有窗口都处于非活动状态。
答案 0 :(得分:3)
AXUIElementCopyAttributeValue()返回AXError,因此您可以捕获它,然后check what happened。
AXError error = AXUIElementCopyAttributeValue(frontMostApp, kAXFocusedWindowAttribute, (CFTypeRef *)&frontMostWindow);
if (error != kAXErrorSuccess) {
//solve problems here
}
在您的特定情况下,返回的错误值为kAXErrorNoValue = -25212
答案 1 :(得分:1)
您可以使用AppleScript执行此操作。在Xcode中创建新项目时,您可以选择“Cocoa-AppleScript”作为您的应用类型,方法是在OS X>下进行。其他制作同时具有Obj-C和AppleScript的应用程序。您可以使用此代码使具有焦点的应用程序执行某些操作:
tell current app to ...
您可以使用此代码更改窗口的大小
set the bounds of the front window to {x, y, x + width, y + height}
此处,x
和y
是距离左上角的距离。
您可以将其添加到项目中,并修改当前位于前面的窗口的大小。这意味着将调整具有焦点的应用程序的最前面窗口的大小。这是一个有效且完全互动的例子:
set theWindows to the windows of the current application
if the length of theWindows is 0 then
display alert "There are no windows to resize"
else
display dialog "Enter x" default answer ""
set x to text returned of result as number
display dialog "Enter y" default answer ""
set y to text returned of result as number
display dialog "Enter width" default answer ""
set width to text returned of result as number
set width to (x + width)
display dialog "Enter height" default answer ""
set height to text returned of result as number
set height to (y + height)
tell current application to set the bounds of the front window to {x, y, width, height}
end if
在Yosemite中,您可以创建没有任何内容的应用程序,但AppleScript使用“脚本编辑器”应用程序。在Mavericks和旧系统中,该应用程序称为“AppleScript编辑器”。如果您需要Objective-C用于应用程序的其他部分,您可以使用我之前描述的方法创建Cocoa-AppleScript程序。