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