vba - 我是谁?如何使用 Microsoft Office 权限/用户权限

标签 vba com ms-office permissions

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/

相关文章:

excel - 如何在 Excel UDF 函数中返回值?

vba - 在 Excel 中使用 VBA 打开超链接(运行时错误 9)

excel - Office URI 方案忽略内容处置

ms-word - 将 Office JS 页面中的拖放到 Word 文档中

vba - 如何使用 WorksheetFunction.VLookup 处理 1004 错误?

excel - Excel VBA 中的 .NumberFormat 选项是什么?

visual-c++ - 使用 CComVariant 访问 SafeArray 时出现问题

windows-7 - 无法在 Windows 7 中加载 VB6 OCX 错误 372

c# - 如何从 .NET 应用程序使用 WinFax Pro COM 对象?

c# - 如何检索演示文稿中 PowerPoint 幻灯片之间的链接