好的,我找到了一個方法。這是Python中的代碼(拍下from here)。它可以使用一些清理和一些錯誤處理,但它可以工作。關鍵是來自ApplicationServices的未記錄的CPSSetProcessName。
def _osx_set_process_name(app_title):
""" Change OSX application title """
from ctypes import cdll, c_int, pointer, Structure
from ctypes.util import find_library
app_services = cdll.LoadLibrary(find_library("ApplicationServices"))
if app_services.CGMainDisplayID() == 0:
print "cannot run without OS X window manager"
else:
class ProcessSerialNumber(Structure):
_fields_ = [("highLongOfPSN", c_int),
("lowLongOfPSN", c_int)]
psn = ProcessSerialNumber()
psn_p = pointer(psn)
if ( (app_services.GetCurrentProcess(psn_p) < 0) or
(app_services.SetFrontProcess(psn_p) < 0)):
print "cannot run without OS X gui process"
print "setting process name"
app_services.CPSSetProcessName(psn_p, app_title)
return False
如果你調用它的時候了,它改變了活動監視器的進程名。我只好叫它小超時後,由於某種原因,也改變了菜單欄的名字:
import gobject
gobject.timeout_add(100, _osx_set_process_name, "MyTitle")
請注意,如果你把這個有。應用程序包,你可以得到一個Python應用程序的一個非常好的系統集成。雖然您可以更改圖標,Finder顯示名稱,...,但我試過的所有方法都將「CFBundleName」(菜單欄中的那個)保留爲「Python」。 (This answer僅用於更改長名稱(在停靠欄圖標上顯示),還有很多其他人幾乎可以工作。)
雖然此答案給出了預期的結果,但並不十分優雅。我很欣賞爲什麼我需要超時的一些見解......我認爲當我第一次導入gtk或運行主循環時,Python或pygtk會更改進程名稱本身。
來源
2013-01-02 13:41:02
jdm