Нахождение Текущего Активного окна в Mac OS X с помощью Python

Как насчет простой:

if(!!variable){
  //the variable is defined
}
20
задан Jason Coco 17 December 2008 в 00:46
поделиться

2 ответа

Это должно работать:

#!/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 как начальной точки.

25
ответ дан 29 November 2019 в 23:30
поделиться

Прежде всего Вы хотите окно или имя приложения? Это не 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 так или иначе.

6
ответ дан 29 November 2019 в 23:30
поделиться