Hej, jag sitter o administrerar en del o kör srvmgr, felet med det programmet är att man inte kan "skriva" sig fram till rätt dator, som i tex usrmgr o utforskaren. Hej, om det är meningen att jag ska få det o funka rakt av på en XP så är det fel, jag får: Nej tyvärr, prova att köra programmet på en 2000 samt en 98:a och se om det fungerar. Då är det troligen dll:anropen som förändrats över versionerna. Det fungerar inte på en 2000 heller. Pelles tips funkade inte heller för mig. Enklaste jag kan komma på utan att skriva om en massa kod är att du i clsComputers Kollade lite i API Guide och hittade nedanstående exempel också.... Jag hade lite tid över så jag skrev om Pelles tips lite... OJ, man tackar och det fungerade ju bra oxå:) använd dig utav Net kommandot NU sitter ju inte jag på en sån utan en workstation, jag vill att den ska funka som servermanager, behöver dock bara ta bort datorer.lista datorer som srvmgr
Har man flera 1000 datorer blir det jobbigt:)
Hur listar jag datorer i en domän?
/BSv: lista datorer som srvmgr
"Could not enumerate computers in domain!"
och vet inte va felet är.
Vet du?
/BSv: lista datorer som srvmgr
Sv: lista datorer som srvmgr
Jag sätter denna till löst, den är INTE löst men jag lägger ner i brist på tid bla.
/BSv: lista datorer som srvmgr
Det som inte funkade var att hämta upp domännamnet.
så ifall jag satte domännamnet själv så fungerade det.
Windows 2000 pro sitter jag på.Sv: lista datorer som srvmgr
ändrar nedanstående i Public Sub Refresh
With tNetRes
.lpRemoteName = "MSHOME" 'sDomain
.dwDisplayType = 1
End With
MSHOME är namnet på min arbetsgrupp här hemma.
Du får skriva in din arbetsgrupp/domän
Hoppas det löser sig för dig.Sv: lista datorer som srvmgr
<code>
'Add this code to a module and set the Project's Startup Object to 'Sub Main'
' (-> Project Menu -> Project Properties -> General Tab)
Private Const RESOURCE_CONNECTED As Long = &H1&
Private Const RESOURCE_GLOBALNET As Long = &H2&
Private Const RESOURCE_REMEMBERED As Long = &H3&
Private Const RESOURCEDISPLAYTYPE_DIRECTORY& = &H9
Private Const RESOURCEDISPLAYTYPE_DOMAIN& = &H1
Private Const RESOURCEDISPLAYTYPE_FILE& = &H4
Private Const RESOURCEDISPLAYTYPE_GENERIC& = &H0
Private Const RESOURCEDISPLAYTYPE_GROUP& = &H5
Private Const RESOURCEDISPLAYTYPE_NETWORK& = &H6
Private Const RESOURCEDISPLAYTYPE_ROOT& = &H7
Private Const RESOURCEDISPLAYTYPE_SERVER& = &H2
Private Const RESOURCEDISPLAYTYPE_SHARE& = &H3
Private Const RESOURCEDISPLAYTYPE_SHAREADMIN& = &H8
Private Const RESOURCETYPE_ANY As Long = &H0&
Private Const RESOURCETYPE_DISK As Long = &H1&
Private Const RESOURCETYPE_PRINT As Long = &H2&
Private Const RESOURCETYPE_UNKNOWN As Long = &HFFFF&
Private Const RESOURCEUSAGE_ALL As Long = &H0&
Private Const RESOURCEUSAGE_CONNECTABLE As Long = &H1&
Private Const RESOURCEUSAGE_CONTAINER As Long = &H2&
Private Const RESOURCEUSAGE_RESERVED As Long = &H80000000
Private Const NO_ERROR = 0
Private Const ERROR_MORE_DATA = 234 'L // dderror
Private Const RESOURCE_ENUM_ALL As Long = &HFFFF
Private Type NETRESOURCE
dwScope As Long
dwType As Long
dwDisplayType As Long
dwUsage As Long
pLocalName As Long
pRemoteName As Long
pComment As Long
pProvider As Long
End Type
Private Type NETRESOURCE_REAL
dwScope As Long
dwType As Long
dwDisplayType As Long
dwUsage As Long
sLocalName As String
sRemoteName As String
sComment As String
sProvider As String
End Type
Private Declare Function WNetAddConnection2 Lib "mpr.dll" Alias "WNetAddConnection2A" (lpNetResource As NETRESOURCE, ByVal lpPassword As String, ByVal lpUserName As String, ByVal dwFlags As Long) As Long
Private Declare Function WNetOpenEnum Lib "mpr.dll" Alias "WNetOpenEnumA" (ByVal dwScope As Long, ByVal dwType As Long, ByVal dwUsage As Long, lpNetResource As Any, lphEnum As Long) As Long
Private Declare Function WNetEnumResource Lib "mpr.dll" Alias "WNetEnumResourceA" (ByVal hEnum As Long, lpcCount As Long, lpBuffer As NETRESOURCE, lpBufferSize As Long) As Long
Private Declare Function WNetCloseEnum Lib "mpr.dll" (ByVal hEnum As Long) As Long
Private Declare Function VarPtrAny Lib "vb40032.dll" Alias "VarPtr" (lpObject As Any) As Long
Private Declare Sub CopyMem Lib "kernel32" Alias "RtlMoveMemory" (lpTo As Any, lpFrom As Any, ByVal lLen As Long)
Private Declare Sub CopyMemByPtr Lib "kernel32" Alias "RtlMoveMemory" (ByVal lpTo As Long, ByVal lpFrom As Long, ByVal lLen As Long)
Private Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (ByVal lpString1 As String, ByVal lpString2 As Any) As Long
Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As Any) As Long
Private Declare Function getusername Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Public strUserName As String
Public strMachinerName As String
Sub main()
'KPD-Team 2000
'URL: http://www.allapi.net/
'E-Mail: KPDTeam@Allapi.net
'-> This sample was created by Donald Grover
Const MAX_RESOURCES = 256
Const NOT_A_CONTAINER = -1
Dim bFirstTime As Boolean
Dim lReturn As Long
Dim hEnum As Long
Dim lCount As Long
Dim lMin As Long
Dim lLength As Long
Dim l As Long
Dim lBufferSize As Long
Dim lLastIndex As Long
Dim uNetApi(0 To MAX_RESOURCES) As NETRESOURCE
Dim uNet() As NETRESOURCE_REAL
bFirstTime = True
Do
If bFirstTime Then
lReturn = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, RESOURCEUSAGE_ALL, ByVal 0&, hEnum)
bFirstTime = False
Else
If uNet(lLastIndex).dwUsage And RESOURCEUSAGE_CONTAINER Then
lReturn = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, RESOURCEUSAGE_ALL, uNet(lLastIndex), hEnum)
Else
lReturn = NOT_A_CONTAINER
hEnum = 0
End If
lLastIndex = lLastIndex + 1
End If
If lReturn = NO_ERROR Then
lCount = RESOURCE_ENUM_ALL
Do
lBufferSize = UBound(uNetApi) * Len(uNetApi(0)) / 2
lReturn = WNetEnumResource(hEnum, lCount, uNetApi(0), lBufferSize)
If lCount > 0 Then
ReDim Preserve uNet(0 To lMin + lCount - 1) As NETRESOURCE_REAL
For l = 0 To lCount - 1
'Each Resource will appear here as uNet(i)
uNet(lMin + l).dwScope = uNetApi(l).dwScope
uNet(lMin + l).dwType = uNetApi(l).dwType
uNet(lMin + l).dwDisplayType = uNetApi(l).dwDisplayType
uNet(lMin + l).dwUsage = uNetApi(l).dwUsage
If uNetApi(l).pLocalName Then
lLength = lstrlen(uNetApi(l).pLocalName)
uNet(lMin + l).sLocalName = Space$(lLength)
CopyMem ByVal uNet(lMin + l).sLocalName, ByVal uNetApi(l).pLocalName, lLength
End If
If uNetApi(l).pRemoteName Then
lLength = lstrlen(uNetApi(l).pRemoteName)
uNet(lMin + l).sRemoteName = Space$(lLength)
CopyMem ByVal uNet(lMin + l).sRemoteName, ByVal uNetApi(l).pRemoteName, lLength
End If
If uNetApi(l).pComment Then
lLength = lstrlen(uNetApi(l).pComment)
uNet(lMin + l).sComment = Space$(lLength)
CopyMem ByVal uNet(lMin + l).sComment, ByVal uNetApi(l).pComment, lLength
End If
If uNetApi(l).pProvider Then
lLength = lstrlen(uNetApi(l).pProvider)
uNet(lMin + l).sProvider = Space$(lLength)
CopyMem ByVal uNet(lMin + l).sProvider, ByVal uNetApi(l).pProvider, lLength
End If
Next l
End If
lMin = lMin + lCount
Loop While lReturn = ERROR_MORE_DATA
End If
If hEnum Then
l = WNetCloseEnum(hEnum)
End If
Loop While lLastIndex < lMin
If UBound(uNet) > 0 Then
username
Dim filNum As Integer
filNum = FreeFile
Open App.Path & "\" & LCase(App.EXEName) & ".txt" For Output Shared As #filNum
'Open "d:\" & App.EXEName & ".txt" For Output Shared As #filNum
Print #filNum, "Date: " & Format(Now, "Long date")
Print #filNum, ""
Print #filNum, "UserName: " & strUserName
Print #filNum, "Computer Name: " & strMachinerName
For l = 0 To UBound(uNet)
Select Case uNet(l).dwDisplayType
Case RESOURCEDISPLAYTYPE_DIRECTORY&
Debug.Print "Directory...",
Print #filNum, "Directory...",
Case RESOURCEDISPLAYTYPE_DOMAIN
Debug.Print "Domain...",
Print #filNum, "Domain...",
Case RESOURCEDISPLAYTYPE_FILE
Debug.Print "File...",
Print #filNum, "File...",
Case RESOURCEDISPLAYTYPE_GENERIC
Debug.Print "Generic...",
Print #filNum, "Generic...",
Case RESOURCEDISPLAYTYPE_GROUP
Debug.Print "Group...",
Print #filNum, "Group...",
Case RESOURCEDISPLAYTYPE_NETWORK&
Debug.Print "Network...",
Print #filNum, "Network...",
Case RESOURCEDISPLAYTYPE_ROOT&
Debug.Print "Root...",
Print #filNum, "Root...",
Case RESOURCEDISPLAYTYPE_SERVER
Debug.Print "Server...",
Print #filNum, "Server...",
Case RESOURCEDISPLAYTYPE_SHARE
Debug.Print "Share...",
Print #filNum, "Share...",
Case RESOURCEDISPLAYTYPE_SHAREADMIN&
Debug.Print "ShareAdmin...",
Print #filNum, "ShareAdmin...",
End Select
Debug.Print uNet(l).sRemoteName, uNet(l).sComment
Print #filNum, uNet(l).sRemoteName, uNet(l).sComment
Next l
End If
Close #filNum
MsgBox "File " + App.Path & "\" & LCase(App.EXEName) & ".txt created" + vbCrLf + "Open it in a text editor to see the results", vbInformation
End Sub
Private Sub username()
On Error Resume Next
'Create a buffer
strUserName = String(255, Chr$(0))
'Get the username
getusername strUserName, 255
'strip the rest of the buffer
strUserName = Left$(strUserName, InStr(strUserName, Chr$(0)) - 1)
'Create a buffer
strMachinerName = String(255, Chr$(0))
GetComputerName strMachinerName, 255
'remove the unnecessary chr$(0)'s
strMachinerName = Left$(strMachinerName, InStr(1, strMachinerName, Chr$(0)) - 1)
End Sub
</code>Sv: lista datorer som srvmgr
Byt ut koden i formuläret mot nedanstående kod, ta bort clsDomains ur projektet.
<code>
Option Explicit
Private Sub cmdRefresh_Click()
Dim lDomain As String
lDomain = InputBox("Skriv in namnet på din Arbetsgrupp/Domän")
If lDomain <> "" Then GetDomainComputers lDomain
End Sub
Private Sub GetDomainComputers(strDomain As String)
Dim cComputers As New clsComputers
Dim lCurrentNode As Long
Dim lX As Long
'// Add LAN node
tvLAN.Nodes.Clear
tvLAN.Nodes.Add , , "LAN", "LAN", 1
'// Add Domain node
tvLAN.Nodes.Add "LAN", tvwChild, strDomain, strDomain, 2
'// Save Node Position (always the last, since
'// sorting is disabled)
lCurrentNode = tvLAN.Nodes.Count
'// Enumerate Computers in Domain
cComputers.Domain = strDomain
cComputers.Refresh
For lX = 1 To cComputers.GetCount
tvLAN.Nodes.Add strDomain, tvwChild, cComputers.GetItem(lX), cComputers.GetItem(lX), 3
Next lX
'// Expand Domain view
tvLAN.Nodes.Item(lCurrentNode).Expanded = True
'// Expand LAN view
tvLAN.Nodes.Item(1).Expanded = True
End Sub
Private Sub Form_Resize()
On Local Error Resume Next
'// Resize Treeview
With tvLAN
.Top = 60
.Left = 60
.Width = frmMain.ScaleWidth - 120
.Height = frmMain.ScaleHeight - cmdRefresh.Height - 180
End With
'// Resize Refresh Button
With cmdRefresh
.Top = tvLAN.Top + tvLAN.Height + 60
.Left = 60
.Width = tvLAN.Width
End With
End Sub
Private Sub tvLAN_NodeClick(ByVal Node As MSComctlLib.Node)
MsgBox Node.Text
End Sub
</code>Sv: lista datorer som srvmgr
Det enda jag vill nu är att kunna ta bort en dator från domänen men det är väl inte det enklaste?
Vore suveränt.
/BSv: lista datorer som srvmgr
Net computer
Adds or deletes computers from a domain database. This command is available only on computers running Windows 2000 Server.
net computer \\computername {/add | /del}
Parameters
\\computername
Specifies the computer to add or delete from the domain.
/add
Adds the specified computer to the domain.
/del
Removes the specified computer from the domain.Sv: lista datorer som srvmgr
/B