Computername

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

Computername

Beitrag 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.
Benutzeravatar
Macros
Beiträge: 1361
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag 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
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

Beitrag 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...
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Na wenn die Struktur schon "declared" ist, dann schmeiß 'se halt raus... und lern englisch ;)
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

Beitrag 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
Benutzeravatar
Macros
Beiträge: 1361
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag 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
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

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