有沒有方法在使用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