Seite 1 von 1
Computername
Verfasst: 26.04.2006 17:36
von Tsuki-Namida
Hallo,
ich bin dabei ein Netzwerk Tool zu bauen, dazu brauche ich den Entsprechenden Computername der das gegen Programm Ausführt. Ich möchte aber keinen Server und Clienten machen damit man nicht von ausen ran kann!
Was ich nun genau wissen möchte ist: Wie kann ich die Computernamen aller Computer im Netzwerk Herausfinden? ich möchte diese dann in einem Listview anzeigen.
Verfasst: 26.04.2006 17:44
von Macros
Damit der Code auch mal im Forum steht (aus dem Codearchiv)
Code: Alles auswählen
; German forum: http://robsite.de/php/pureboard/viewtopic.php?t=834&highlight=
; Author: PWS32
; Date: 02. May 2003
Structure HOSTENT
h_name.l
h_aliases.l
h_addrtype.w
h_length.w
h_addr_list.l
EndStructure
Structure SERVER_INFO_101
dwPlatformId.l
lpszServerName.l
dwVersionMajor.l
dwVersionMinor.l
dwType.l
lpszComment.l
EndStructure
#MAX_PREFERRED_LENGTH = -1
#SV_TYPE_ALL = $FFFFFFFF
#NERR_SUCCESS = 0
#ERROR_MORE_DATA = 234
#MainWindow = 100
#MMTB = 200
Global MMTextBox
Procedure Message (M.s)
WriteMessage.s
WriteMessage +Chr(13)+Chr(10)+M
SetGadgetText(#MMTB,GetGadgetText(#MMTB) + WriteMessage )
SendMessage_(MMTextBox,$00B6,0,10000)
EndProcedure
Procedure.s GetIPbyName (NameIP.s)
TheIPAdress.s
If InitNetwork()
pHostinfo = gethostbyname_(NameIP)
If pHostinfo = 0
TheIPAdress = "Unable to resolve domain name"
Else
CopyMemory (pHostinfo, hostinfo.HOSTENT, SizeOf(HOSTENT))
If hostinfo\h_addrtype <> #AF_INET
MessageRequester("Info","A non-IP address was returned",0)
Else
While PeekL(hostinfo\h_addr_list+AdressNumber*4)
ipAddress = PeekL(hostinfo\h_addr_list+AdressNumber*4)
TheIPAdress = StrU(PeekB(ipAddress),0)+"."+StrU(PeekB(ipAddress+1),0)+"."+StrU(PeekB(ipAddress+2),0)+"."+StrU(PeekB(ipAddress+3),0)
AdressNumber+1
Wend
EndIf
EndIf
Else
MessageRequester("Info","Network can't be initialized",0)
EndIf
ProcedureReturn TheIPAdress
EndProcedure
Procedure GetLANList()
IPResult.s
se101.SERVER_INFO_101
nStructSize = SizeOf(SERVER_INFO_101)
RetCode = NetServerEnum_(0, 101, @bufptr, #MAX_PREFERRED_LENGTH, @dwEntriesread, @dwTotalentries, #SV_TYPE_ALL, 0, @dwResumehandle)
If RetCode = #NERR_SUCCESS And RetCode <> #ERROR_MORE_DATA
For i = 0 To dwEntriesread - 1
CopyMemory( bufptr + (nStructSize * i),@se101, nStructSize)
Buffer.s=Space(512)
Result=WideCharToMultiByte_(#CP_ACP ,0,se101\lpszServerName,255,@Buffer.s,512,0,0)
IPResult = GetIPbyName (Buffer)
Message ("No : "+ Str(i+1) + " " + Buffer + " --> " + IPResult)
Next
Else
MessageRequester("Info","Failed",0)
EndIf
NetApiBufferFree_(bufptr)
SendMessage_(MMTextBox,$00B6,0,30)
EndProcedure
hWnd = OpenWindow(#MainWindow, 100, 150, 300, 250, #PB_Window_SystemMenu , " Name > IP")
If CreateGadgetList(WindowID())
ButtonGadget(1, 1, 224, WindowWidth()-1,26, "Get Name and IP")
MMTextBox=StringGadget(#MMTB, 0, 2, WindowWidth()-1,WindowHeight()-30 ,"Name > IP by P.Spisla 2003 ",#PB_String_Multiline|#ES_AUTOVSCROLL|#WS_VSCROLL|#PB_String_ReadOnly)
Message("--------------------------------------------")
EndIf
;GetLANList()
Repeat
Select WaitWindowEvent()
Case #PB_EventGadget
Select EventGadgetID()
Case 1
Message ("Examine the Network, please wait !")
GetLANList()
Message ("End of List")
EndSelect
Case #PB_EventCloseWindow
End
EndSelect
ForEver
; ExecutableFormat=Windows
; FirstLine=1
; EOF
Und noch ein paar Stichworte damit er in der Suche auftaucht:
Ip und Computernamen im Lan Netzwerk
Verfasst: 26.04.2006 19:54
von Tsuki-Namida
Beim Testen des Codes bekomme ich ein Error in Zeile 5:
[COMPILER] Zeile5: 'Structure' or 'Interface' already declared: HOSTENT
Ich habe PB 3.94 fals es daran liegen kann...
Verfasst: 26.04.2006 20:00
von Deeem2031
Na wenn die Struktur schon "declared" ist, dann schmeiß 'se halt raus... und lern englisch

Verfasst: 26.04.2006 20:30
von Tsuki-Namida
Ich weis nicht ganz was du meinst??? okay Englisch lernen ist keine schlechte idee.... aber ich kann doch keine Struktur abschalten.... ich habe es zwar versucht aber dann läuft garnichts mehr..... kommen dann halt immer mehr errors
Code: Alles auswählen
Structure HOSTENT
h_name.l
h_aliases.l
h_addrtype.w
h_length.w
h_addr_list.l
EndStructure
Structure SERVER_INFO_101
dwPlatformId.l
lpszServerName.l
dwVersionMajor.l
dwVersionMinor.l
dwType.l
lpszComment.l
EndStructure
Verfasst: 26.04.2006 20:53
von Macros
Einfach umbenennen, sorry,, hatte vergessen, das der Code nicht mehr funktioniert.
Code: Alles auswählen
; German forum: http://robsite.de/php/pureboard/viewtopic.php?t=834&highlight=
; Author: PWS32
; Date: 02. May 2003
Structure HOSTENTold
h_name.l
h_aliases.l
h_addrtype.w
h_length.w
h_addr_list.l
EndStructure
Structure SERVER_INFO_101
dwPlatformId.l
lpszServerName.l
dwVersionMajor.l
dwVersionMinor.l
dwType.l
lpszComment.l
EndStructure
#MAX_PREFERRED_LENGTH = -1
#SV_TYPE_ALL = $FFFFFFFF
#NERR_SUCCESS = 0
#ERROR_MORE_DATA = 234
#MainWindow = 100
#MMTB = 200
Global MMTextBox
Procedure Message (M.s)
WriteMessage.s
WriteMessage +Chr(13)+Chr(10)+M
SetGadgetText(#MMTB,GetGadgetText(#MMTB) + WriteMessage )
SendMessage_(MMTextBox,$00B6,0,10000)
EndProcedure
Procedure.s GetIPbyName (NameIP.s)
TheIPAdress.s
If InitNetwork()
pHostinfo = gethostbyname_(NameIP)
If pHostinfo = 0
TheIPAdress = "Unable to resolve domain name"
Else
CopyMemory (pHostinfo, hostinfo.HOSTENTold, SizeOf(HOSTENTold))
If hostinfo\h_addrtype <> #AF_INET
MessageRequester("Info","A non-IP address was returned",0)
Else
While PeekL(hostinfo\h_addr_list+AdressNumber*4)
ipAddress = PeekL(hostinfo\h_addr_list+AdressNumber*4)
TheIPAdress = StrU(PeekB(ipAddress),0)+"."+StrU(PeekB(ipAddress+1),0)+"."+StrU(PeekB(ipAddress+2),0)+"."+StrU(PeekB(ipAddress+3),0)
AdressNumber+1
Wend
EndIf
EndIf
Else
MessageRequester("Info","Network can't be initialized",0)
EndIf
ProcedureReturn TheIPAdress
EndProcedure
Procedure GetLANList()
IPResult.s
se101.SERVER_INFO_101
nStructSize = SizeOf(SERVER_INFO_101)
RetCode = NetServerEnum_(0, 101, @bufptr, #MAX_PREFERRED_LENGTH, @dwEntriesread, @dwTotalentries, #SV_TYPE_ALL, 0, @dwResumehandle)
If RetCode = #NERR_SUCCESS And RetCode <> #ERROR_MORE_DATA
For i = 0 To dwEntriesread - 1
CopyMemory( bufptr + (nStructSize * i),@se101, nStructSize)
Buffer.s=Space(512)
Result=WideCharToMultiByte_(#CP_ACP ,0,se101\lpszServerName,255,@Buffer.s,512,0,0)
IPResult = GetIPbyName (Buffer)
Message ("No : "+ Str(i+1) + " " + Buffer + " --> " + IPResult)
Next
Else
MessageRequester("Info","Failed",0)
EndIf
NetApiBufferFree_(bufptr)
SendMessage_(MMTextBox,$00B6,0,30)
EndProcedure
hWnd = OpenWindow(#MainWindow, 100, 150, 300, 250, #PB_Window_SystemMenu , " Name > IP")
If CreateGadgetList(WindowID())
ButtonGadget(1, 1, 224, WindowWidth()-1,26, "Get Name and IP")
MMTextBox=StringGadget(#MMTB, 0, 2, WindowWidth()-1,WindowHeight()-30 ,"Name > IP by P.Spisla 2003 ",#PB_String_MultiLine|#ES_AUTOVSCROLL|#WS_VSCROLL|#PB_String_ReadOnly)
Message("--------------------------------------------")
EndIf
;GetLANList()
Repeat
Select WaitWindowEvent()
Case #PB_EventGadget
Select EventGadgetID()
Case 1
Message ("Examine the Network, please wait !")
GetLANList()
Message ("End of List")
EndSelect
Case #PB_EventCloseWindow
End
EndSelect
ForEver
; ExecutableFormat=Windows
; FirstLine=1
; EOF
Verfasst: 26.04.2006 21:02
von Tsuki-Namida
Super jetzt funktioniert es
Kann man das aber auch irgentwie Arbeitsgruppen übergreifend machen?
Da wir zum Beispiel 2 Arbeitsgruppen hier zuhause haben....
Nur der Code greift nur auf "Arbeitsgruppe" zu ich hab aber auch nichts im Code gesehen das ich ggf. eine andere gruppe eintragen könnte...