有没有方法在使用Python的Mac OS X上给定时间查找当前活动窗口的应用程序名称?使用Python在Mac OS X中查找当前活动窗口
回答
这应该工作:
#!/usr/bin/python
from AppKit import NSWorkspace
activeAppName = NSWorkspace.sharedWorkspace().activeApplication()['NSApplicationName']
print activeAppName
只能对豹或老虎,如果你有安装PyObjC和发生在一个行权蟒蛇二进制(不是这样的点,如果你已经安装了通用MacPython,你可能希望在Tiger上做)。但是用Peter的方式来做这件事可能会快很多,因为从AppKit导入任何东西需要一段时间,或者更确切地说,在Python过程中首次从AppKit导入某些东西需要一段时间。
如果您在PyObjC应用程序中需要这样的内容,我所描述的将会非常快速,因为您只会遇到一次导入AppKit的延迟。如果你需要这个作为一个命令行工具,你会注意到性能受到影响。如果这与你有关,那么你最好使用Peter的代码作为起点在Xcode中构建一个10行的基础命令行工具。
首先,您想要窗口还是应用程序名称?这不是Windows - Mac OS X上的应用程序进程可以有多个窗口。 (此外,Windows已经有几年了,尽管我不知道API是什么样子的。)
二,碳还是可可?
获取活动窗口可可:
window = NSApp.mainWindow()
要在可可得到你的进程的名称:
appName = NSProcessInfo.processInfo().processName()
编辑:哦,我想我知道你想要什么。最前面的过程的名称,对吗?
我不认为有办法做到这一点可可,但在这里是如何做到这一点在中碳C:
ProcessSerialNumber psn = { 0L, 0L };
OSStatus err = GetFrontProcess(&psn);
/*error check*/
CFStringRef processName = NULL;
err = CopyProcessName(&psn, &processName);
/*error check*/
记住CFRelease(processName)
当你用它做。
我不确定在Python中看起来像什么,或者甚至可能。 Python没有指针,这使得棘手。我知道PyObjC会将后面的参数转换为到err, processName = CopyProcessName(…)
,但是Carbon绑定并不依赖于PyObjC(它们是Python 2的核心部分),我不确定你对PSN做了什么无论哪种方式。
我需要Python脚本中的当前最前面的应用程序,它可以很好地在我的屏幕上排列窗口(请参阅move_window
)。
当然,完整的功劳归功于彼得!但这里是完整的程序:
#include <Carbon/Carbon.h>
int main(int, char) {
ProcessSerialNumber psn = { 0L, 0L };
OSStatus err = GetFrontProcess(&psn);
CFStringRef processName = NULL;
err = CopyProcessName(&psn, &processName);
printf("%s\n", CFStringGetCStringPtr(processName, NULL));
CFRelease(processName);
}
建立与gcc -framework Carbon filename.c
这是python的答案吗? – GreenAsJade 2014-01-26 21:56:47
在接受答案的方法,OS X 10.7以上版本已被否决。目前推荐的版本如下:
from AppKit import NSWorkspace
active_app_name = NSWorkspace.sharedWorkspace().frontmostApplication().localizedName()
print(active_app_name)
- 1. 在Mac OS X中获取当前活动窗口/文档的标题
- 2. 使用python查找活动窗口
- 3. Python:激活窗口在OS X
- 4. 如何在Mac中使用Python获取活动窗口标题?
- 5. 使用Accessibility API在Mac OS X上移动其他窗口
- 6. Tkinter窗口焦点在Mac OS X上
- 7. 在Mac OS X中使用python virtualenv 10.6.8
- 8. 如何在mac os中获得浮动窗口x
- 9. 的Mac OS X - 控制等窗口
- 10. Mac os x主窗口控制器
- 11. 初始化窗口代码Mac OS X
- 12. 如何在Python中获取当前活动窗口的名称?
- 13. 杀“登录窗口”使用命令行中的Mac OS X
- 14. Mac OS X中的ACL - 查找GUID
- 15. 如何使用AppleScript在Mac OS X词典中查找单词?
- 16. 如何在Mac OS X上自动打开终端窗口
- 17. “在Mac OS X上使用mod_ssl”文档的当前版本?
- 18. 在Mac OS X上的Python
- 19. Mac OS X - 当最前面的窗口发生变化时收到通知
- 20. 如何登录Python程序活动在Mac OS X
- 21. 如何在Mac OS X上查找串行端口号?
- 22. 如何在mac os x中使用python查找文件夹路径?
- 23. pygame OpenGL窗口不刷新Mac OS X 10.6,Python 2.7
- 24. mac os x连接活动目录
- 25. 使网络活动监控器在Mac OS X中可见
- 26. 高亮显示当前活动窗口
- 27. 在Mac OS X中在全屏和窗口之间切换
- 28. 如何在使用Python的Mac OS X上的前台启动应用程序?
- 29. 使用Mac OS X的Python + Arduino
- 30. 如何使用FLTK在Windows,Mac OS X和Linux中使窗口透明?
我们需要导入什么来获取NSApp和NSProcessInto? – GreenAsJade 2014-01-26 21:59:46
@GreenAsJade:按照Dirk的回答,推测可能是Foundation和AppKit。 – 2014-01-26 22:34:14