Microsoft Office 文档,我的情况是:PowerPoint 演示文稿,可以具有受限权限。如何以编程方式找出我的代码对给定文档具有哪些权限?
我可以在 MSDN 上找到关于这个主题的所有内容:
http://msdn.microsoft.com/en-us/library/aa432118.aspx
如果我运行以下代码,我将获得对给定文档具有权限的用户列表:
Sub test()
Dim perm As Office.Permission
Set perm = ActivePresentation.Permission
Debug.Print "Enabled=" & perm.Enabled
If perm.Enabled Then
Debug.Print "PermissionFromPolicy=" & perm.PermissionFromPolicy
Debug.Print "PolicyName='" & perm.PolicyName & "'"
Debug.Print "PolicyDescription='" & perm.PolicyDescription & "'"
Dim uperm As Office.UserPermission
For Each uperm In perm
Debug.Print uperm.UserId & ", " & uperm.Permission
Next uperm
End If
End Sub
样本输出:
Enabled=True
PermissionFromPolicy=False
PolicyName='Do Not Distribute'
PolicyDescription='Permission is currently restricted. Only specified users can access this content.'
john@doe.com, 64
user@system.de, 33
myname@example.com, 33
“权限”是一个位图,我在微软的公共(public) COM 头文件中找到了它的定义:
enum MsoPermission
{
msoPermissionView = 1,
msoPermissionRead = 1,
msoPermissionEdit = 2,
msoPermissionSave = 4,
msoPermissionExtract = 8,
msoPermissionChange = 15,
msoPermissionPrint = 16,
msoPermissionObjModel = 32,
msoPermissionFullControl = 64,
msoPermissionAllCommon = 127
};
尽管如此,这并没有告诉我我的代码具有哪些特定权限。如果我只知道我是谁(根据 UserPermission.UserId),我可以在 Permission 对象中查找我的权限。但我找不到那一点信息。我错过了什么?
有一些已知的方法可以获取 Windows 用户名(该 Windows 机器上当前用户的登录名)。不幸的是,这不是在 PowerPoint 决定我对文档拥有哪些权限时检查的用户 ID。强调一下:PowerPoint 提供了一个 UI,可以让我在运行时更改“我是谁”。显然,这不会改变登录用户名(即 ADVAPI 返回的名称)。 PowerPoint 所指的用户名是通过 Microsoft 的 Passport 识别/授权的。
提前致谢!
沃尔克
最佳答案
尝试 GetUserName()、GetUserNameW() 或 GetUserNameA() 函数之一,并因此声明它:
Private Declare Function GetUserName Lib "advapi32.dll" Alias _
"GetUserName" (ByVal lpBuffer As String, nSize As Long) As Long
另见 MSDN about GetUserName .
您需要
dim
长度为 255 并将 254 作为参数传递的字符串 nSize
.此字符串通过 ByVal
回到调用者。也许你需要left()
您可以使用它与 uperm.UserId
进行比较之前的字符串.
关于vba - 我是谁?如何使用 Microsoft Office 权限/用户权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1928866/