visual-studio - 如何将 UAC 集成到我的 VB6 程序中?

标签 visual-studio vb6 uac administrator

我需要一些代码,将管理员权限图标添加到命令按钮并在单击此类按钮时显示提示。我怎样才能在 VB6 中做到这一点?某些操作需要管理员权限,因为它们会替换 Windows Vista/7 不允许程序正常访问文件的文件和内容。

最佳答案

这是一个 ShellExecuteEx 的 VB6 示例,它允许您有选择地执行具有管理员权限的任何进程。您可以将其放入模块或类中。

Option Explicit

Private Const SEE_MASK_DEFAULT = &H0

Public Enum EShellShowConstants
        essSW_HIDE = 0
        essSW_SHOWNORMAL = 1
        essSW_SHOWMINIMIZED = 2
        essSW_MAXIMIZE = 3
        essSW_SHOWMAXIMIZED = 3
        essSW_SHOWNOACTIVATE = 4
        essSW_SHOW = 5
        essSW_MINIMIZE = 6
        essSW_SHOWMINNOACTIVE = 7
        essSW_SHOWNA = 8
        essSW_RESTORE = 9
        essSW_SHOWDEFAULT = 10
End Enum

Private Type SHELLEXECUTEINFO
        cbSize        As Long
        fMask         As Long
        hwnd          As Long
        lpVerb        As String
        lpFile        As String
        lpParameters  As String
        lpDirectory   As String
        nShow         As Long
        hInstApp      As Long
        lpIDList      As Long     'Optional
        lpClass       As String   'Optional
        hkeyClass     As Long     'Optional
        dwHotKey      As Long     'Optional
        hIcon         As Long     'Optional
        hProcess      As Long     'Optional
End Type

Private Declare Function ShellExecuteEx Lib "shell32.dll" Alias "ShellExecuteExA" (lpSEI As SHELLEXECUTEINFO) As Long

Public Function ExecuteProcess(ByVal FilePath As String, ByVal hWndOwner As Long, ShellShowType As EShellShowConstants, Optional EXEParameters As String = "", Optional LaunchElevated As Boolean = False) As Boolean
    Dim SEI As SHELLEXECUTEINFO

    On Error GoTo Err

    'Fill the SEI structure
    With SEI
        .cbSize = Len(SEI)                  ' Bytes of the structure
        .fMask = SEE_MASK_DEFAULT           ' Check MSDN for more info on Mask
        .lpFile = FilePath                  ' Program Path
        .nShow = ShellShowType              ' How the program will be displayed
        .lpDirectory = PathGetFolder(FilePath)
        .lpParameters = EXEParameters       ' Each parameter must be separated by space. If the lpFile member specifies a document file, lpParameters should be NULL.
        .hwnd = hWndOwner                   ' Owner window handle

        ' Determine launch type (would recommend checking for Vista or greater here also)
        If LaunchElevated = True Then ' And m_OpSys.IsVistaOrGreater = True
            .lpVerb = "runas"
        Else
            .lpVerb = "Open"
        End If
    End With

     ExecuteProcess = ShellExecuteEx(SEI)   ' Execute the program, return success or failure

    Exit Function
Err:
    ' TODO: Log Error
    ExecuteProcess = False
End Function

Private Function PathGetFolder(psPath As String) As String
    On Error Resume Next
    Dim lPos As Long
    lPos = InStrRev(psPath, "\")
    PathGetFolder = Left$(psPath, lPos - 1)
End Function

关于visual-studio - 如何将 UAC 集成到我的 VB6 程序中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4754093/

相关文章:

mysql - Visual Basic 6vData 报告 "Report Width is larger than paper width"错误

sql - 无法使用 vb6 将记录插入 ms access 2007

vb6 - 是否可以在 VB6 中实现像 NullableOfInteger 这样的 Nullable 类型

batch-file - 从提升的脚本以受限用户身份启动进程

VB.NET 应用程序中的 C# 代码?

c++ - 如何将单链表变成双向链表

c++ - CreateProcess 在 Windows7 64 位中失败,错误代码为 '740'

windows - 在操作系统启动时启动提升权限的应用程序,而无需UAC提示

visual-studio - 如何将 VS 解决方案中引用的所有 Nuget 包下载为 nupkg 文件?

azure - 当 Azure 测试计划中的自动化测试失败时,如何在 DevOps 中自动创建错误