Как насчет простой:
if(!!variable){
//the variable is defined
}
Это должно работать:
#!/usr/bin/python
from AppKit import NSWorkspace
activeAppName = NSWorkspace.sharedWorkspace().activeApplication()['NSApplicationName']
print activeAppName
Только работы над Leopard, или над Tiger, если Вы установили PyObjC и, оказывается, указываете на правильный двоичный файл Python в строке на одну (не случай при установке универсального MacPython которого Вы, вероятно, хотели бы сделать на Tiger). Но ответ Peter с Углеродом, способ сделать это, вероятно, будет вполне немного быстрее, начиная с импорта чего-либо от AppKit в Python, требует времени, или более точно, импортирование чего-то от AppKit впервые в процессе Python требует времени.
, Если Вам нужна эта внутренняя часть приложение PyObjC, что я описываю, будет работать отлично и быстро, так как Вы только испытываете задержку импорта AppKit однажды. При необходимости в этом для работы инструментом командной строки, Вы заметите хит производительности. Если это относится к Вам, Вы - вероятно, более обеспеченное здание 10 инструментов командной строки Основы строки в XCode с помощью кода Peter как начальной точки.
Прежде всего Вы хотите окно или имя приложения? Это не Windows— процесс приложения на Mac OS X, может иметь несколько окон. (Кроме того, это было также верно для Windows в течение нескольких лет теперь, хотя я понятия не имею, на что API похож для этого.)
117-секундный, Углерод или Какао?
Для получения активного окна в Какао:
window = NSApp.mainWindow()
Для получения названия процесса в Какао:
appName = NSProcessInfo.processInfo().processName()
Редактирование: , О, я думаю, что знаю то, что Вы хотите. Название процесса frontmost, правильно?
я не думаю, что существует способ сделать это в Какао, но здесь - как сделать это в Углероде в 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 перевел бы последний аргумент CopyProcessName
в err, processName = CopyProcessName(…)
, но Углеродная привязка не полагается на PyObjC (они - часть базового Python 2), и я не уверен, что Вы делаете о PSN так или иначе.