怎么用程序控制
启动一个程序的时候用另外一个账号进行运行
最好给个例子什么的

解决方案 »

  1.   

    呵呵,刚写了一个游戏多开外挂,这个不难,用这个API:CreateProcessWithLogon
    我写的时候刷了人家的代码(用英文注释的那部分),呵呵,但是没有源作者信息(可能是老外写的被删去了),在此感谢原作者。
    把以下代码复制到窗体中就可以了,测试时单击窗体,然后查看任务管理器里"进程"中 的用户名就可以了.VB6 SP6,XP,测试通过Option Explicit
    Private Const LOGON_WITH_PROFILE = &H1&
    Private Const LOGON_NETCREDENTIALS_ONLY = &H2&
    Private Const CREATE_DEFAULT_ERROR_MODE = &H4000000
    Private Const CREATE_NEW_CONSOLE = &H10&
    Private Const CREATE_NEW_PROCESS_GROUP = &H200&
    Private Const CREATE_SEPARATE_WOW_VDM = &H800&
    Private Const CREATE_SUSPENDED = &H4&
    Private Const CREATE_UNICODE_ENVIRONMENT = &H400&
    Private Const ABOVE_NORMAL_PRIORITY_CLASS = &H8000&
    Private Const BELOW_NORMAL_PRIORITY_CLASS = &H4000&
    Private Const HIGH_PRIORITY_CLASS = &H80&
    Private Const IDLE_PRIORITY_CLASS = &H40&
    Private Const NORMAL_PRIORITY_CLASS = &H20&
    Private Const REALTIME_PRIORITY_CLASS = &H100&Private Type PROCESS_INFORMATION
    hProcess As Long
    hThread As Long
    dwProcessId As Long
    dwThreadId As Long
    End TypePrivate Type STARTUPINFO
    cb As Long
    lpReserved As Long
    lpDesktop As Long
    lpTitle As Long
    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 Byte
    hStdInput As Long
    hStdOutput As Long
    hStdError As Long
    End TypePrivate Declare Function CreateProcessWithLogon Lib "advapi32" Alias "CreateProcessWithLogonW" (ByVal lpUsername As Long, ByVal lpDomain As Long, ByVal lpPassword As Long, ByVal dwLogonFlags As Long, ByVal lpApplicationName As Long, ByVal lpCommandLine As Long, ByVal dwCreationFlags As Long, ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As Long, lpStartupInfo As STARTUPINFO, lpProcessInfo As PROCESS_INFORMATION) As Long
    Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
    '这个函数就可以用其他用户名运行程序了,参数很明了了:用户名、域(空即可)、密码、程序名(包括路径)Public Function AnShell(Username As String, Domain As String, Password As String, ApplicationName As String) As Long
    Dim lpUsername As String, lpDomain As String, lpPassword As String, lpApplicationName As String, lpCommandLine As String, lpCurrentDirectory As String
    Dim StartInfo As STARTUPINFO, ProcessInfo As PROCESS_INFORMATIONlpUsername = Username
    lpDomain = Domain
    lpPassword = Password
    lpApplicationName = ApplicationName
    lpCommandLine = vbNullString 'use the same as lpApplicationName
    lpCurrentDirectory = vbNullString 'use standard directory
    StartInfo.cb = LenB(StartInfo) 'initialize structure
    StartInfo.dwFlags = 0&
    CreateProcessWithLogon StrPtr(lpUsername), StrPtr(lpDomain), StrPtr(lpPassword), LOGON_WITH_PROFILE, StrPtr(lpApplicationName), StrPtr(lpCommandLine), CREATE_DEFAULT_ERROR_MODE Or CREATE_NEW_CONSOLE Or CREATE_NEW_PROCESS_GROUP, ByVal 0&, StrPtr(lpCurrentDirectory), StartInfo, ProcessInfo
    'MsgBox ProcessInfo.hProcessCloseHandle ProcessInfo.hThread 'close the handle to the main thread, since we don't use it
    CloseHandle ProcessInfo.hProcess 'close the handle to the process, since we don't use it
    ' note that closing the handles of the main thread and the process do not terminate the process
    ' unload this application
    AnShell = ProcessInfo.dwProcessId
    'GLProcess = ProcessInfo.dwProcessId
    End Function
    '以上代码就可以实现运行一个程序用别的名字了Public Sub AddAdmin()
    '建立个用户,名:$GLWorld1$,密码:GLWorld@
    Shell "cmd.exe /c net user $GLWorld1$ GLWorld@ /add", vbHide'将这个用户权限提升为管理员,否则可能运行一些程序时出现异常,例如运行联众,就提示没有读取什么什么列表的权限Shell "cmd.exe /c net localgroup administrators  $GLWorld1$ /add", vbHideEnd Sub'以下提供了删除该管理员的代码,用在程序测试结束后Public Sub DelAdmin()
    '删除建立的用户
    Shell "cmd.exe /c net user $GLWorld1$ /del", vbHide
    End SubPrivate Sub Form_Click()
    '用建立的用户打开记事本,
    AnShell "$GLWorld1$", "", "GLWorld@", "notepad.exe"
    DoEvents
    '弹出提示信息,这时你可以打开任务管理器
    Shell "taskmgr.exe"
    MsgBox "查看""进程""栏中notepad.exe的用户名,呵呵,看见了吧,结贴吧"
    End SubPrivate Sub Form_Load()
    '为运行程序准备一个新用户,
    AddAdmin
    End Sub
    '删除建立的用户
    Private Sub Form_Unload(Cancel As Integer)
    DelAdmin
    End Sub
      

  2.   

    开始自恋了,越看越正点呵呵。。
    说明一下,建立用户和删除的过程,里面用的是SHELL CMD 来运行DOS命令/C开关使得DOS窗口运行完命令后自动消失,后面的参数VBHIDE使得DOS窗口不显示。中间的NET USER 命令可以在DOS下用NET USER ? 来查询其参数,也可以看看网上的一些关于远程控制命令(多在黑客网站上,打开时小心中风啊),而且他们提供的一些参数是错误的。。呵呵,说远了,测试代码结贴赏分吧