在Python中的Windows上,可能使用Outlook API,我怎样才能从他们较小的login名得到一个用户的全名?

在工作中,我们有简短的login名,例如hastingsg ,但Outlook和我相信Windows系统的其他部分也可以使用更长的名字,例如Jeff Hastings。

在cpython(不是IronPython)中,如果我有更短的login名,我怎样才能得到更长的全名? 我有pywin32和ExchangeCDO安装。

通过pywin32的COM部分,您需要获得Outlook的Application对象,并从中获得其属性Session ,从而为您提供Namespace对象( GetNamespace方法也应该为相同的目的工作,只用唯一支持的参数值调用'MAPI' )。 从那里你可以使用Accounts属性来获取Accounts对象,这是一个典型的COM集合 – 可以通过Item直到它的Count来索引。 您可以遍历它并检查每个Account对象:每个Account对象都有两个感兴趣的属性 – 一个UserName (您希望检查与“较短的登录名”相等的字符串)和一个DisplayName (您希望的字符串)。

是的,这是令人难以置信的漫长和令人费解的,但是,这是MS应用程序提供的COM接口的过程。 对于我所知道的,在最近的Outlook版本中可能会有一些比较简单的方法 – 这是长期以来一直工作很久的一种方式(现在我甚至没有Windows安装手册来检查这一点并编写Python为你…!-)

我认为你可以用专用的模块来查询你的Exchange server Active Directory

(未测试):

 import active_directory user = active_directory.find_user("hastingsg") print user.displayName 

可能是你需要TranslateName api例如玩这样的事情,2ns / 3参数可以是常量从http://msdn.microsoft.com/en-us/library/ms724268(VS.85).aspx

 win32security.TranslateName(win32api.GetUserName(), win32api.NameUnknown, win32api.NameDisplay) 

要么

 win32net.NetUseGetInfo(win32api.GetComputerName(),win32api.GetUserName())