怎么实现dos下runas自动输入密码 
http://bbs.pfan.cn/post-278076.html 
代码如下:
Option Explicit
Private Const LOGON_WITH_PROFILE = &H1&
Private Const CREATE_DEFAULT_ERROR_MODE = &H4000000
Private Const CREATE_NEW_CONSOLE = &H10&
Private Const CREATE_NEW_PROCESS_GROUP = &H200&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
'以下函数用制定名和密码调用了应用程序
Private 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_INFORMATION
lpUsername = Username
lpDomain = Domain
lpPassword = Password
lpApplicationName = ApplicationName
lpCommandLine = vbNullString
lpCurrentDirectory = vbNullString
StartInfo.cb = LenB(StartInfo)
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
CloseHandle ProcessInfo.hThread
CloseHandle ProcessInfo.hProcess
AnShell = ProcessInfo.dwProcessId
End Function
Private Sub Form_Click()
'用刚刚建立的管理员运行一个程序,这里是记事本,参数1为用户名,参数2为域(一般为空就可以了,因为是本机),参数3为要运行的程序路径和名字(这里调用的是WINDOWS下的程序,所以WINDOWS会自己找到的,程序运行时的几个PATH是WINDOWS,SYSTEM,SYSTEM32,APP.PATH,当然可以通过修改WINDOWS的PATH来改变) 请访问:http://www.cnnic-qd.cn/it/index.html
AnShell "administrator", "", "12", "c:\radmin.exe"
End
End Subps:pg_dump是一个postgresql备份工具 
在dos下备份的格式是这样的: >pg_dump -U postgres -W  database1 > c:\backup.tar 
>password: 输入完密码后开始备份。难点就在这输入密码,和输出文件。 从网上查到一个是vb的例子比较接近我的意图。可惜vb学得不深,看不太明白。望大侠能翻成delphi或vc++的代码,谢谢。 

解决方案 »

  1.   

    楼主既然懂delphi和c那么一个api的事情何必找人翻译呢??
      

  2.   

    api 也不太熟。 delphi上没人回。这代码 用到几个api函数啊?
      

  3.   

    Private 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
    '以下函数用制定名和密码调用了应用程序
    Private 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_INFORMATION三个API函数
      

  4.   

    说一个API的事情,这里n多人都可以帮你转换,但是大家都没有动手,主要是这个 太简单了,让你自己动手的机会
      

  5.   

    CreateProcessWithLogon 和 CloseHandle
    两个
      

  6.   


    其实就是对CreateProcessWithLogon的调用而已CloseHandle可要可无,如果会用CreateProcess创建进程那么CreateProcessWithLogon就一样而已无非增加了些参数而已
      

  7.   

    看了一下如果说按照楼主的VB代码转换成C++,难度为0。
    我就不相信一个懂C++的人,连这么简单的VB代码也看不懂。不外乎就是一些变量的赋值操作,至于 StrPtr(),在C++里可以忽略,直接把TCHAR传进即可。调用的时候用_T()宏包含字符就行了。如果说按照楼主的要求转换、完善、修改代码,难度为100,因为我没看懂楼主的意图何在~
      

  8.   

    不知这样行不:
    #include <windows.h>
    #include <string>
    #pragma comment(lib,"Advapi32.lib")using namespace std;//以下函数用制定名和密码调用了应用程序
    int AnShell(string Username, string Domain, string Password, string ApplicationName)
    {
    string lpUsername, lpDomain, lpPassword, lpApplicationName, lpCommandLine, lpCurrentDirectory;
        STARTUPINFO StartInfo;
    PROCESS_INFORMATION ProcessInfo; lpUsername = Username;
    lpDomain = Domain;
    lpPassword = Password;
    lpApplicationName = ApplicationName;
    lpCommandLine = "";
    lpCurrentDirectory = "";
    StartInfo.cb = sizeof(StartInfo);
    StartInfo.dwFlags = 0;
    CreateProcessWithLogon(lpUsername, lpDomain, lpPassword, LOGON_WITH_PROFILE, lpApplicationName, lpCommandLine, 
    CREATE_DEFAULT_ERROR_MODE | CREATE_NEW_CONSOLE | CREATE_NEW_PROCESS_GROUP, NULL, 
    lpCurrentDirectory, StartInfo, ProcessInfo);
    CloseHandle(ProcessInfo.hThread);
    CloseHandle(ProcessInfo.hProcess);
    return ProcessInfo.dwProcessId;
    }