输入进程名,点按钮后优先级变为高

解决方案 »

  1.   

    给你个函数你自己改造一下,这个函数并不能万无一失。 EnableDebugPriv '提升自身进程权限。
    Public Declare Function OpenProcessToken Lib "advapi32" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
    Public Declare Function LookupPrivilegeValue Lib "advapi32" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As Long
    Public Declare Function AdjustTokenPrivileges Lib "advapi32" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As Long
    Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As LongPublic Const TOKEN_ADJUST_PRIVILEGES = &H20
    Public Const TOKEN_QUERY = &H8
    Public Const ANYSIZE_ARRAY = 1
    Public Const SE_PRIVILEGE_ENABLED = &H2Type LUID
        LowPart As Long
        HighPart As Long
    End TypeType LUID_AND_ATTRIBUTES
        pLuid As LUID
        Attributes As Long
    End TypeType TOKEN_PRIVILEGES
        PrivilegeCount As Long
        Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
    End TypePublic Sub EnableDebugPriv()
        Dim hProc As Long
        Dim hToken As Long
        Dim mLUID As LUID
        Dim mPriv As TOKEN_PRIVILEGES
        Dim mNewPriv As TOKEN_PRIVILEGES
        hProc = GetCurrentProcess()'若其他进程则用 OpenProcess(PROCESS_ALL_ACCESS, False, m_Pid)'先取得操作句柄
        'MsgBox "My Pid is:" & Str(hProc)
        OpenProcessToken hProc, TOKEN_ADJUST_PRIVILEGES + TOKEN_QUERY, hToken
        Debug.Print "My Pid is:" & Str(hToken)
        LookupPrivilegeValue "", "SeDebugPrivilege", mLUID
        mPriv.PrivilegeCount = 1
        mPriv.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED
        mPriv.Privileges(0).pLuid = mLUID
        ' enable debug privilege for the current application
        AdjustTokenPrivileges hToken, False, mPriv, 4 + (12 * mPriv.PrivilegeCount), mNewPriv, 4 + (12 * mNewPriv.PrivilegeCount)
        CloseHandle hToken
        
    End Sub
    m_Pid 为进程ID号,首先需要通过进程名称取得进程ID号再 OpenProcess 得到句柄,才能提权。至于怎么取得进程ID,我想你已经问道提权了,不应该不知道怎么取得进程ID吧?
      

  2.   

    Option Explicit'*************************************************************************
    '**模 块 名:ModRunFile
    '**说    明:紫水晶 版权所有2005 - 2006(C)
    '**创 建 人:马大哈(摘于李海文选  http://www.zealsoftstudio.com/articles/qa9805.html)
    '**日    期:2005年11月27日
    '**描    述:本模块用于以指定优先级运行程序
    '**版    本:V1.0
    '*************************************************************************
    Private Type STARTUPINFO
        cb As Long
        lpReserved As String
        lpDesktop As String
        lpTitle As String
        dwX As Long
        dwY As Long
        dwXSize As Long
        dwYSize As Long
        dwXCountChars As Long
        dwYCountChars As Long
        dwFillAttribute As Long
        dwFlags As Long
        wShowWindow As Integer
        cbReserved2 As Integer
        lpReserved2 As Long
        hStdInput As Long
        hStdOutput As Long
        hStdError As Long
    End TypePrivate Type PROCESS_INFORMATION
        hProcess As Long
        hThread As Long
        dwProcessId As Long
        dwThreadId As Long
    End TypePrivate Type SECURITY_ATTRIBUTES
        nLength As Long
        lpSecurityDescriptor As Long
        bInheritHandle As Long
    End TypePrivate Const HIGH_PRIORITY_CLASS = &H80
    Private Const DEF_PRIORITY_CLASS = 11           '
    Private Const REALTIME_PRIORITY_CLASS = &H100   '
    Private Const STARTF_USESHOWWINDOW = &H1
    Private Const MAX_PATH = 260Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal Hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
    Private Declare Function CloseHandle Lib "kernel32" (hObject As Long) As Boolean
    Private Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, lpProcessAttributes As SECURITY_ATTRIBUTES, lpThreadAttributes As SECURITY_ATTRIBUTES, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDriectory As String, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As LongPublic Sub ShellEx(ByVal ExeName As String, ByVal CmdLine As String, ByVal StartDir As String)
        '使用CreateProcess运行程序,可设定初始目录
        Dim sInfo As STARTUPINFO
        Dim pInfo As PROCESS_INFORMATION
        Dim Sec1 As SECURITY_ATTRIBUTES
        Dim Sec2 As SECURITY_ATTRIBUTES
        Dim pClass As Long
        Dim X As Long
        
        Sec1.nLength = Len(Sec1)
        Sec2.nLength = Len(Sec2)
        sInfo.cb = Len(sInfo)
        
        sInfo.dwFlags = STARTF_USESHOWWINDOW
        
        sInfo.wShowWindow = 1
        
        pClass = HIGH_PRIORITY_CLASS                    '优先级
        
        X = CreateProcess(ExeName, CmdLine, Sec1, Sec2, True, pClass, 0&, vbNullString, sInfo, pInfo)
        X = CloseHandle(pInfo.hProcess)
    End Sub函数中的注释是优先级设置,已经是高优先级.调用:call ShellEx("c:\windows\notepad.exe",vbnullstring,vbnullstring)打开后用任务管理器看看优先级吧.