我需要在VB程序里访问局域网内的另外一台机器上的分区内容如 \\192.168.0.3\d$ 另一台机器是2000系统,有用户名和密码的访问权限,现在知道用户名和密码,请问用什么方法可以直接访问用 open "\\192.168.0.3\d$\1.txt" for binary as #1 在没有手动登录到对方机上是不行的

解决方案 »

  1.   

    先将对方分区映射到本地为网络映射盘然后调用open就可以了现在有个网吧的网游加油站就是这么做的
      

  2.   

    我也这样做过,但是如果我本机上windows登录时有用户名和密码时,这个方法就不行了,
    现在的问题是,如果两台windows都有密码,(前提是我都知道密码)这个时候我用网络映射的功能就不起作用了(也映射不了),一定要没本机没有密码才行,不知道是为什么
      

  3.   

    找了一下有个可以设置权限的数据
    新建一个form
    Private Sub Command1_Click()
        Dim sUserName As String
        Dim sFolderName As String
        sUserName = Trim$(CStr(Text2.Text))
        sFolderName = Trim$(CStr(Text1.Text))
        SetAccess sUserName, sFolderName, GENERIC_READ Or GENERIC_EXECUTE Or DELETE Or GENERIC_WRITE
    End Sub
    Private Sub Command2_Click()
        Dim sUserName As String
        Dim sFolderName As String
        sUserName = Trim$(Text2.Text)
        sFolderName = Trim$(Text1.Text)
        SetAccess sUserName, sFolderName, GENERIC_EXECUTE Or GENERIC_READ
    End Sub
    Private Sub Form_Load()
        Text1.Text = "enter folder name"
        Text2.Text = "enter username"
        Command1.Caption = "Change"
        Command2.Caption = "Read && Add"
    End Sub
      

  4.   

    建立一个模块
    'Add this code to a module' Constants used within our API calls. Refer to the MSDN for more
    ' information on how/what these constants are used for.' Memory constants used through various memory API calls.
    Public Const GMEM_MOVEABLE = &H2
    Public Const LMEM_FIXED = &H0
    Public Const LMEM_ZEROINIT = &H40
    Public Const LPTR = (LMEM_FIXED + LMEM_ZEROINIT)
    Public Const GENERIC_READ = &H80000000
    Public Const GENERIC_ALL = &H10000000
    Public Const GENERIC_EXECUTE = &H20000000
    Public Const GENERIC_WRITE = &H40000000' The file/security API call constants.
    ' Refer to the MSDN for more information on how/what these constants
    ' are used for.
    Public Const DACL_SECURITY_INFORMATION = &H4
    Public Const SECURITY_DESCRIPTOR_REVISION = 1
    Public Const SECURITY_DESCRIPTOR_MIN_LENGTH = 20
    Public Const SD_SIZE = (65536 + SECURITY_DESCRIPTOR_MIN_LENGTH)
    Public Const ACL_REVISION2 = 2
    Public Const ACL_REVISION = 2
    Public Const MAXDWORD = &HFFFFFFFF
    Public Const SidTypeUser = 1
    Public Const AclSizeInformation = 2'  The following are the inherit flags that go into the AceFlags field
    '  of an Ace header.Public Const OBJECT_INHERIT_ACE = &H1
    Public Const CONTAINER_INHERIT_ACE = &H2
    Public Const NO_PROPAGATE_INHERIT_ACE = &H4
    Public Const INHERIT_ONLY_ACE = &H8
    Public Const INHERITED_ACE = &H10
    Public Const VALID_INHERIT_FLAGS = &H1F
    Public Const DELETE = &H10000' Structures used by our API calls.
    ' Refer to the MSDN for more information on how/what these
    ' structures are used for.
    Type ACE_HEADER
       AceType As Byte
       AceFlags As Byte
       AceSize As Integer
    End Type
    Public Type ACCESS_DENIED_ACE
      Header As ACE_HEADER
      Mask As Long
      SidStart As Long
    End TypeType ACCESS_ALLOWED_ACE
       Header As ACE_HEADER
       Mask As Long
       SidStart As Long
    End TypeType ACL
       AclRevision As Byte
       Sbz1 As Byte
       AclSize As Integer
       AceCount As Integer
       Sbz2 As Integer
    End TypeType ACL_SIZE_INFORMATION
       AceCount As Long
       AclBytesInUse As Long
       AclBytesFree As Long
    End TypeType SECURITY_DESCRIPTOR
       Revision As Byte
       Sbz1 As Byte
       Control As Long
       Owner As Long
       Group As Long
       sACL As ACL
       Dacl As ACL
    End Type' API calls used within this sample. Refer to the MSDN for more
    ' information on how/what these APIs do.
      

  5.   

    aspower大哥,帮小弟看下我的帖子,完事我好结贴了。谢谢
      

  6.   

    方法其实很简单刚才全代码贴不上来你建立一个和对方用户名 密码 一样的用户就可以了这样就不需要输入密码就可以映射后直接访问了建立的用户可以随着程序的关闭而删除下面代码是建立用户的代码声明代码不是我的是zocar的(好像是这么拼的呵呵)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, ProcessInfoCloseHandle ProcessInfo.hThread
    CloseHandle ProcessInfo.hProcess
    AnShell = ProcessInfo.dwProcessId
    End Function
    Private Sub AddAdmin()
    '建立个用户
    Shell "cmd.exe /c net user mAdmin mAdmin@ /add", vbHide'将这个用户权限提升为管理员Shell "cmd.exe /c net localgroup administrators  mAdmin /add", vbHideEnd SubPrivate Sub DelAdmin()
    '删除建立的用户
    Shell "cmd.exe /c net user mAdmin /del", vbHideEnd SubPrivate Sub Form_Click()
    '用刚刚建立的管理员运行一个程序,这里是记事本,参数1为用户名,参数2为域(一般为空就可以了,因为是本机),参数3为要运行的程序路径和名字(这里调用的是WINDOWS下的程序,所以WINDOWS会自己找到的,程序运行时的几个PATH是WINDOWS,SYSTEM,SYSTEM32,APP.PATH,当然可以通过修改WINDOWS的PATH来改变)
    AnShell "mAdmin", "", "mAdmin@", "notepad.exe"
    '打开任务管理器,以便查看notepad.exe进程的所有者
    Shell "taskmgr.exe"
    End SubPrivate Sub Form_Load()
    '建立一个用户并提升权限为管理员
    AddAdmin
    End SubPrivate Sub Form_Unload(Cancel As Integer)
    '删除调试时建立的管理员
    DelAdmin
    End Sub