Sending NT-Messages, retrieve all local LAN-Users
Posted: Mon Oct 07, 2002 6:39 pm
Code updated For 5.20+
Restored from previous forum. Originally posted by Rings.
As Subject say, Send Messages through NT (DID not Work on Win9x, neighter on Linux
) and retrieve all local (Network)users.
Its a long way to the top if you wanna .....CodeGuru
Restored from previous forum. Originally posted by Rings.
As Subject say, Send Messages through NT (DID not Work on Win9x, neighter on Linux

Code: Select all
;NetSend; Another Snippet by Siegfried Rings (C) 2002 CodeGuru
; This one retrieves all usernames from local Network
; and can send a message to them(Works only NT,2000 or XP , Nor Win9x, ME tested)
#Button1=1
#Button2=2
#ListViewGadget=3
#String1=4
#Text1=5
#Text2=6
Structure SERVER_INFO_101
dwPlatformId.l
lpszServerName.l
dwVersionMajor.l
dwVersionMinor.l
dwType.l
lpszComment.l
EndStructure
Structure WKSTA_INFO_100
wki100_platform_id.l ;Indicates level to use for get platform-specific info.
wki100_computername.l;Contains name of local computer in Unicode
wki100_langroup.l;Contains domain computer belongs to in Unicode
wki100_ver_major.l;Holds Major version number of OS on local computer
wki100_ver_minor.l;Holds Minor version number of OS on local computer
EndStructure
#MAX_PREFERRED_LENGTH = -1
#SV_TYPE_ALL =$FFFFFFFF
#NERR_SUCCESS = 0
#ERROR_MORE_DATA = 234
Procedure GetServerList()
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
;Loop through And the Data in the memory
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)
AddGadgetItem(#ListviewGadget, -1,Buffer)
Next
EndIf
NetApiBufferFree_(bufptr)
EndProcedure
Procedure.s GetLocalSystemName()
twkstaInfo100.WKSTA_INFO_100
lwkstaInfo100.l
nStructSize=SizeOf(WKSTA_INFO_100)
Result= NetWkstaGetInfo_(0, 100, @lwkstaInfo100)
If Result=0
CMResult=CopyMemory( lwkstaInfo100,@twkstaInfo100, nStructSize)
Buffer.s=Space(512)
Result=WideCharToMultiByte_(#CP_ACP ,0,twkstaInfo100\wki100_computername,-1,@Buffer.s,512,0,0)
ProcedureReturn Trim(Buffer)
Else
ProcedureReturn "DAMM :("
EndIf
EndProcedure
Procedure NTSendMessage(NTFrom.s,NTTo.s,NTMessage.s)
Buffer1 = AllocateMemory( Len(NTTo)*2, 0)
Result=MultiByteToWideChar_(#CP_ACP ,0,NTTo,-1,Buffer1,Len(NTTo)*2)
Buffer2 = AllocateMemory( Len(NTFrom)*2, 0)
Result=MultiByteToWideChar_(#CP_ACP ,0,NTFrom,-1,Buffer2,Len(NTFrom)*2)
buf.s="MeineNachricht"
buflen.l=Len(NTMessage)
Buffer3 = AllocateMemory( Len(NTMessage)*2, 0)
Result=MultiByteToWideChar_(#CP_ACP ,0,NTMessage.s,-1,Buffer3,buflen*2)
Result=NetMessageBufferSend_(0,Buffer1,Buffer2,buffer3,buflen*2)
FreeMemory(Buffer1)
FreeMemory(Buffer2)
FreeMemory(Buffer3)
EndProcedure
Localname.s=GetLocalSystemName()
;-Main
WindowID = OpenWindow(0, 200, 200, 400,120 , "Send NT-Message Local:"+Localname.s, #PB_Window_SystemMenu );+GetLocalSystemName())
If WindowID
StringGadget(#String1,130,20,265,40,"This is a Testmessage",#PB_Text_Center)
ButtonGadget(#Button1,130,100,100,19,"SEND")
ButtonGadget(#Button2,230,100,100,19,"Refresh")
ListViewGadget(#ListViewGadget,2,20,120,100)
TextGadget(#Text1,2,1,100,16,"Users")
TextGadget(#Text2,120,1,100,16,"Message")
GetServerlist()
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_Gadget
GadgetID=EventGadget()
Select GadgetID
Case #Button1
Pos=GetGadgetState(#Listviewgadget)
If Pos>-1
NTTo.s=GetGadgetItemText(#Listviewgadget,pos,0)
NTSendMessage(Localname,NTTo.s,GetGadgetText(#String1))
Else
Beep_(100,50)
EndIf
Case #Button2
GetServerlist()
EndSelect
EndIf
Until EventID = #PB_Event_CloseWindow
EndIf