Ich habe gerade eine Procedure geschrieben, die alle sichtbaren Computer im LAN Netzwerk auflistet, funktioniert unter Windows NT, 2000, XP und Vista, benötigt PB 4 oder höher.
Ich weiß, das gibt es schon. Ich habe mich an dem im Codearchiv vorhandenen Code orientiert. Jedoch ist dieser Code in 3.94er-Manier geschrieben, d. h. 'EnableExplicit' funktioniert schon mal nicht.
Noch etwas ganz wichtiges: blbltheworm benutzt beispielsweise WideCharToMultiByte_(), ich ersetze das einfach durch PeekS(). Auch benutze ich weniger Variablen und benötigte Konstanten und Strukturen werden nur definiert, wenn sie noch nicht definiert worden sind (Defined()).
- Benötigt PB 4.00 oder höher. Auf XP SP2 erfolgreich getestet.
Code: Alles auswählen
Procedure.l getLanComputer(list.s()) ; by AND51, Mar/2007 Protected *buffer, found.l, n.l, result.l CompilerIf ~Defined(MAX_PREFERRED_LENGTH, #PB_Constant) #MAX_PREFERRED_LENGTH=-1 CompilerEndIf CompilerIf ~Defined(SV_TYPE_ALL, #PB_Constant) #SV_TYPE_ALL=$FFFFFFFF CompilerEndIf CompilerIf ~Defined(SERVER_INFO_100, #PB_Structure) Structure SERVER_INFO_100 platform_id.l name.l EndStructure CompilerEndIf Protected infoblock.SERVER_INFO_100 result=NetServerEnum_(0, 100, @*buffer, #MAX_PREFERRED_LENGTH, @found, @n, #SV_TYPE_ALL, 0, 0) For n=0 To found-1 CopyMemory(*buffer+SizeOf(SERVER_INFO_100)*n, @infoblock, SizeOf(SERVER_INFO_100)) AddElement(list()) list()=PeekS(infoblock\name, -1, #PB_Unicode) Next NetApiBufferFree_(*buffer) ProcedureReturn result EndProcedure NewList computer.s() getLanComputer(computer()) ForEach computer() Debug computer() Next
Handhabung: Man beglücke die Procedure nur mit einer LinkedList vom Typ String, das war's. Es werden nur die Hostnamen zurückgegeben (z. B. "HomePC"), zu denen kann man sofort eine Verbindung herstellen (OpenNetworkConnection("HomePC", 1234)).
Wer ausführlichere Informationen wünscht, stellt die Structure um von 'Structure_Info_100' auf 'Structure_Info_101' (siehe MSDN).
@ Andre: Können wir eventuell das vorhandene Beispiel im CodeArchiv durch meines ersetzen?