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 :allright:

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...