Interaction between programs

BlitzPlus Forums/BlitzPlus Programming/Interaction between programs

Is there a way to make one of my programs to interact with another without commandline$() because I want one to send info to the other while they are both running?

For Example: updating or adding features to an old program like plugins.

Commandline can only be submitted at the beginning of a program. Right?

You could possibly do it through TCP, using your local IP address, sorta client/server affair!

[edit]
Plugin wise, you could pump the bytes of different apps through TCP, update a sorta 'plugin' list, then when a user wants to use a plugin, call ExecFile, with the required app name!!!
[/edit]

Just a thought

I am not really in a situation that would accomidate anything with a "server"

As far as plugins Execfile wouldn't allow the kind of interaction i want

I haven't tried it but I would assume the Windows API commands (like SendMessage or PostMessage) might help...

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/messagesandmessagequeues/messagesandmessagequeuesreference/messagesandmessagequeuesfunctions/sendmessage.asp

Ok, but 2 problems

1.I don't really know how to use Windows API commands

2.What do I do about RECEIVING information

ok, easy non-technical solution. Make one program write data commands into a text file. Have the other program check the file for changes every second or so and process accordingly. To avoid file locking problems you could make incremental file names.

Not being funny, but TCP is a perfect way for applications to talk to each other in Blitz... Grey Aliens solution means that your hard drive will be accessed every second, just think what that will do for the read/write speed of other applications!

About your problems:-

1) Windows API is a collection of 'open' functions within Windows that let programmers harness the power (if you will) of the OS... The key to harnessing this extra function ability (if you will), is by reading the read me file in your blitz+root/userlibs/ folder.. or, you could just do this:-

1) Create a file in your user lib folder called "WinAPI.DECLS"... e.g. "C:\Program Files\BlitzPlus\userlibs\WinAPI.DECLS"

Now, type this in the file and save:-

.lib "Advapi32.dll"
GetUserName%(strBuffer*,wSize*):"GetUserNameA"

This is a command within WinAPI that returns the name of the current user of windows... now don't be fooled, because unlike Blitz+ functions, the name is actually returned in the parameter, this function (in Blitz terms) returns an integer, corresponding to the amount of characters copied.

The best way to descibe this is by showing an example... If you wrote the DECLS file correctly, fire up Blitz+, and run this:-

Print "The current user is:"+CurrentUser$()
Delay 5000


Function CurrentUser$()
	bnkName = CreateBank(256)
	bnkSize = CreateBank(1)
	PokeByte(bnkSize,255,0)

	GetUserName(bnkName,bnkSize) ;<---- Userlib function we wrote earlier
	
	copiedChar = PeekByte(bnkSize,0)

	For loop = 0 To copiedChar-1
		userName$ = userName$ + Chr$(PeekByte(bnkName,loop))
	Next
	
	Return(Left(userName$,(Len(userName$)-1)))
End Function


WinAPI sits in your C:\Windows\System32\ folder (That where the .lib file 'Advapi32.dll' is.. if you wanna peek), The best thing to do is search in MSDN for WinAPI32, and also, read the read me file I mentioned earlier

Now, regarding PostMessage and SendMessage... I'm sure Blitz+ uses these functions, because these functions are used for messages between Windows, and an app... You would have to write your own DLL, with it's own callback function, and if you don't now C\C++, your knackered!

Now don't get me wrong, it may be possible to do what you want to do, but TCP is the easy... non hard drivin option... and if you don't understand TCP... here's an example of a real life app that uses it:-

CLIENT:
;Client
;May use userlibs (you'll probably find them in Bit's and Bobs of
;the userlib section of BB.COM
;Check client drive
;checkDrivetype = GetDriveType(Left$(SystemProperty$("appdir"),3))
;If checkdrivetype <> 2
;	Notify "Please run client from a removable drive."+Chr$(13)+"e.g. floppy/USB data stick"
;	End
;End If

;Global password$ = "dabz"
Global targetDir$ = SystemProperty("tempdir")
Global win = CreateWindow("Dabz Remote Media Suite (Client)",100,100,375,425,Desktop(),15)
Global lblIPlabel = CreateLabel("Connect to I.P. Address:-",60,20,130,20,win)
Global tbIPaddress = CreateTextField(200,15,100,20,win)

Global lblPassword = CreateLabel("Password:-",60,50,70,20,win)
Global txtPassword = CreateTextField(130,45,100,20,win,True)
Global btnConnect = CreateButton("Connect...",240,45,60,20,win)

Global lblNowt = CreateLabel("______________________________________________________",20,70,350,20,win)
Global remoteDirButton = CreateButton("Read Remote Directory",110,105,130,20,win)
Global download = CreateButton("Download",195,260,70,20,win)
Global btnFileSize = CreateButton("Request File Size",85,260,100,20,win)
DisableGadget btnFileSize
DisableGadget download
DisableGadget remoteDirButton
Global remoteDirIndex = CreateListBox(60,145,235,100,win)
Global lblTargetDir = CreateLabel("Target Directory:-",60,300,100,20,win)
Global btnTargetDir = CreateButton(". . .",265,320,30,20,win)
Global tbTargetDir = CreateTextField(60,320,200,20,win)
SetGadgetText(tbTargetDir,targetDir$)

Global alertConnection = LoadSound("ding.wav")

Global menu = WindowMenu(win)

Global localCommand = CreateMenu("Local",0,menu)
CreateMenu("Change Target Directory",1,localCommand)
CreateMenu("",0,localCommand)
CreateMenu("Open 'Code Page' URL",2,localCommand)
CreateMenu("Decrypt 'Code Page' Code",3,localCommand)
CreateMenu("",0,localCommand)
CreateMenu("Close Client",9,localCommand)

Global remoteCommand = CreateMenu("Remote",0,menu)
CreateMenu("Request Server Log",10,remoteCommand)
CreateMenu("Re-enable Server (If hidden)",11,remoteCommand)
CreateMenu("",0,remoteCommand)
CreateMenu("Shutdown Server and Close Client",12,remoteCommand)
DisableMenu remoteCommand

Global help = CreateMenu("Help",0,menu) 
CreateMenu("Dabz Remote Media Suite Online Help",20,help)
CreateMenu("",0,help)
CreateMenu("About Dabz Remote Media Suite (Client)",21,help)

UpdateWindowMenu win

Dim ipDecrypt(15)

Repeat
event = WaitEvent(10)
	If event = $803 
		If dontclose = False
		End
		Else
		Notify "Please click the 'FINISH' button."
		End If		
	End If
	
	If event = $1001
		menuItem = EventData()
		Select menuItem
			Case 1
				targetDir$ = RequestDir$("Change target folder:-")
				If Right$(targetDir$,1) <> "" Then targetDir$ = targetDir$ + ""
				If targetDir$ = "" Then targetDir$ = SystemProperty("tempdir")
				SetGadgetText(tbTargetDir,targetDir$)
			Case 2
				openIPwin = CreateWindow("Open 'Code Page'",GadgetX(win),(GadgetY(win)+50),300,120,win,17)
				lblOpenURL = CreateLabel("Enter URL of 'Code Page':-",20,10,130,20,openIPwin)
				tbOpenURL = CreateTextField(20,30,260,20,openIPwin)
				btnOpenURL = CreateButton("OK",20,60,260,20,openIPwin)
				SetGadgetText(tbOpenURL,"http://")
				Repeat
				openIPwinEvent = WaitEvent(10)
				If openIPwinEvent = $803 Then Exit
				If openIPwinEvent = $401
					If EventSource() = btnOpenURL Then Exit
				End If
				Forever
				ExecFile(TextFieldText$(tbOpenURL))
				HideGadget openIPwin
				FreeGadget openIPwin
			Case 3
				decryptWin = CreateWindow("Decrypt Code",GadgetX(win),(GadgetY(win)+50),300,180,win,17)
				lbldecryptWin = CreateLabel("Enter key':-",20,10,130,20,decryptWin)
				tbdecryptkey = CreateTextField(20,30,260,20,decryptWin)
				lbldecryptWinTwo = CreateLabel("Copy and paste code here:-",20,60,150,20,decryptWin)
				tbdecryptWin = CreateTextField(20,85,260,20,decryptWin)
				btndecryptWin = CreateButton("OK",20,120,260,20,decryptWin)
				Repeat
				decryptEvent = WaitEvent(10)
				If decryptEvent = $803 Then Exit
				If decryptEvent = $401
					If EventSource() = btndecryptWin Then Exit
				End If
				Forever
				
				key$ = TextFieldText$(tbdecryptkey)
				code$ = TextFieldText$(tbdecryptWin)
				HideGadget decryptWin
				FreeGadget decryptWin 	
				For n = 0 To 14
					ipDecrypt(n) = 0
				Next
				For t = 0 To (Len(key$)-1)
					 keyValue = keyValue + Asc(Mid$(key$,t,1))
				Next
				Repeat
					countString = countString + 1
					char$ = Mid$(code$,countString,1)
					If char$ = "" Then Exit
					If char$ = " " 
						ipDecrypt(codeSeg) = Int(seg$)
						codeSeg = codeSeg + 1	
						seg$ = ""
					Else
						seg$ = seg$ + char$
					End If
				Forever

				For n = 1 To codeSeg
					IPdecryptStr$ = IPdecryptStr$ +  Chr$((ipDecrypt(n)/keyValue))
				Next
				SetGadgetText(tbIPaddress,IPdecryptStr$)

				seg$ = "":char$ = "":countString = 0:codeSeg = 0:IPdecryptStr$ = "":keyvalue = 0
			
			Case 10
				Notify "Server log"
				Repeat
					cancelEvent = WaitEvent(1)
					If cancelEvent = $803 Then Notify "Closing Program":End
					clientStream = OpenTCPStream(TextFieldText(tbIPaddress),8080)
					Until clientStream <> 0
				WriteString clientStream,"REQUESTSERVERLOG"
				CloseTCPStream clientStream
				clientStream = 0
				hServerConnection = 0
				Repeat
					hServerConnection = CreateTCPServer(8081)
					cancelEvent = WaitEvent(1)
					If cancelEvent = $803 Then Notify "Closing Program":End
				Until hServerConnection <> 0
				Repeat
					serverStream = AcceptTCPStream(hServerConnection)
					cancelEvent = WaitEvent(1)
					If cancelEvent = $803 Then Notify "Closing Program":End
				Until serverStream <> 0
				remoteFileSize = ReadInt(serverStream)
				fileout = WriteFile((SystemProperty$("tempdir")+"ServerLog.txt"))
				If fileout = 0 Then Notify "Error, unable to read file.":End
				For byteAmount = 0 To remoteFileSize
					WriteByte(fileout,ReadByte(serverStream))
					If remoteFileSize > 1000
						event = WaitEvent(0.1)
						If (byteAmount Mod modularOffset) = 0 Then
							progress# = progress# + 0.01
							If progress# => 1 Then progress# = 1
						End If
					SetStatusText(win,Int(progress#*100)+"% Download complete.")
					End If
				Next
				CloseFile fileout
				CloseTCPServer hServerConnection
				result=Confirm("Open file???",False)
				If result = True Then ExecFile(Chr$(34)+((SystemProperty$("tempdir")+"ServerLog.txt"))+Chr$(34))
				SetStatusText(win,"Ready")

			Case 11
				Repeat
					cancelEvent = WaitEvent(1)
					If cancelEvent = $803 Then Notify "Closing Program":End
					clientStream = OpenTCPStream(TextFieldText(tbIPaddress),8080)
				Until clientStream <> 0
				WriteString clientStream,"ENABLESERVER"
				CloseTCPStream clientStream
				clientStream = 0
				hServerConnection = 0
			Case 12
				Repeat
					cancelEvent = WaitEvent(1)
					If cancelEvent = $803 Then Notify "Closing Program":End
					clientStream = OpenTCPStream(TextFieldText(tbIPaddress),8080)
				Until clientStream <> 0
				WriteString clientStream,"CLOSESERVER"
				CloseTCPStream clientStream
				clientStream = 0
				hServerConnection = 0
				End
			Case 20
				ExecFile("http://www.dabzware.co.uk/DRMS/help.htm")
			Case 21
				Notify "Dabz Remote Media Suite - Client  (Version 1.0)"+Chr$(13)+"Copyright 2005 Michael Denathorn"+Chr$(13)+Chr$(13)+"WWW.DABZWARE.CO.UK"

		End Select
	End If
	
	If event = $401
		If EventSource() = btnTargetDir
			targetDir$ = RequestDir$("Change target folder:-")
			If Right$(targetDir$,1) <> "" Then targetDir$ = targetDir$ + ""
			If targetDir$ = "" Then targetDir$ = SystemProperty("tempdir")
			SetGadgetText(tbTargetDir,targetDir$)			
		End If
		
		If EventSource() = btnConnect  
			If TextFieldText$(tbIPaddress) = "" Then SetGadgetText(tbIPaddress,"127.0.0.1")
			Repeat
				cancelEvent = WaitEvent(1)
				If cancelEvent = $803 Then Notify "Closing Program":End
				clientStream = OpenTCPStream(TextFieldText(tbIPaddress),8080)
			Until clientStream <> 0
			WriteString clientStream,"PASSCONFIRM"
			WriteString clientStream,TextFieldText(txtPassword)
			CloseTCPStream clientStream
			clientStream = 0
				Repeat
					hServerConnection = CreateTCPServer(8081)
					cancelEvent = WaitEvent(1)
					If cancelEvent = $803 Then Notify "Closing Program":End
				Until hServerConnection <> 0
				Repeat
					serverStream = AcceptTCPStream(hServerConnection)
					cancelEvent = WaitEvent(1)
					If cancelEvent = $803 Then Notify "Closing Program":End
				Until serverStream <> 0
				result = ReadInt(serverStream)
				If result = 0
					Notify "Cannot connect to server, access denied.",True:End
				End If
			CloseTCPServer hServerConnection
			EnableGadget remoteDirButton
			HideGadget tbIPaddress 
			HideGadget txtPassword 
			HideGadget btnConnect
			btnQuitConnection = CreateButton("FINISH",60,15,240,50,win)
			dontClose = True
			EnableMenu remoteCommand
			UpdateWindowMenu win
		End If
		
		If EventSource() = btnQuitConnection 
			Repeat
				cancelEvent = WaitEvent(1)
				If cancelEvent = $803 Then Notify "Closing Program":End
				clientStream = OpenTCPStream(TextFieldText(tbIPaddress),8080)
			Until clientStream <> 0
				WriteString clientStream,"QUITCONNECTION"
				CloseTCPStream clientStream
				clientStream = 0
				hServerConnection = 0
				End
		End If
		
		If EventSource() = remoteDirButton
			SetStatusText(win,"Connecting....")
			Repeat
				cancelEvent = WaitEvent(1)
				If cancelEvent = $803 Then Notify "Closing Program":End
				clientStream = OpenTCPStream(TextFieldText(tbIPaddress),8080)
			Until clientStream <> 0
				WriteString clientStream,"LISTDIR"
				CloseTCPStream clientStream
				clientStream = 0
				hServerConnection = 0
				Repeat
					hServerConnection = CreateTCPServer(8081)
					cancelEvent = WaitEvent(1)
					If cancelEvent = $803 Then Notify "Closing Program":End
				Until hServerConnection <> 0
				Repeat
					serverStream = AcceptTCPStream(hServerConnection)
					cancelEvent = WaitEvent(1)
					If cancelEvent = $803 Then Notify "Closing Program":End
				Until serverStream <> 0
				countDirIndex = 0
				SetStatusText(win,"Receiving remote folder contents")
				If serverStream 
					While netMessage$ <> "ENDLISTDIR"
						netMessage$ = ReadString$(serverStream)
						If netMessage$ <> "ENDLISTDIR"
							InsertGadgetItem(remoteDirIndex,countDirIndex,netMessage$)
							countDirIndex = countDirIndex + 1
						End If
					Wend				
				End If
				CloseTCPServer hServerConnection
				DisableGadget(remoteDirButton)
				EnableGadget download
				EnableGadget btnFileSize
				SetStatusText(win,"Ready")
		End If
		
		If EventSource() = download
			If SelectedGadgetItem(remoteDirIndex) <> -1
				Repeat
					cancelEvent = WaitEvent(1)
					If cancelEvent = $803 Then Notify "Closing Program":End
					clientStream = OpenTCPStream(TextFieldText(tbIPaddress),8080)
				Until clientStream <> 0
				WriteString clientStream,"DOWNLOAD"
				WriteString clientStream,GadgetItemText$(remoteDirIndex,SelectedGadgetItem(remoteDirIndex))
				CloseTCPStream clientStream
				clientStream = 0
				hServerConnection = 0
				Repeat
					hServerConnection = CreateTCPServer(8081)
					cancelEvent = WaitEvent(1)
					If cancelEvent = $803 Then Notify "Closing Program":End
				Until hServerConnection <> 0
				Repeat
					serverStream = AcceptTCPStream(hServerConnection)
					cancelEvent = WaitEvent(1)
					If cancelEvent = $803 Then Notify "Closing Program":End
				Until serverStream <> 0
				SetStatusText(win,"Recieving file [ + "+targetDir$+GadgetItemText$(remoteDirIndex,SelectedGadgetItem(remoteDirIndex)+" ]"))
				remoteFileSize = ReadInt(serverStream)
				modularOffSet = remoteFileSize / 100
				progress# = 0
				fileout = WriteFile(targetDir$+GadgetItemText$(remoteDirIndex,SelectedGadgetItem(remoteDirIndex)))
				If fileout = 0 Then Notify "Error, unable to read file.":End
				For byteAmount = 0 To remoteFileSize
					WriteByte(fileout,ReadByte(serverStream))
					If remoteFileSize > 1000
						event = WaitEvent(0.1)
						If (byteAmount Mod modularOffset) = 0 Then
							progress# = progress# + 0.01
							If progress# => 1 Then progress# = 1
						End If
					SetStatusText(win,Int(progress#*100)+"% Download complete.")
					End If
				Next
				CloseFile fileout
				CloseTCPServer hServerConnection
				result=Confirm("Open file???",False)
				If result = True Then ExecFile(Chr$(34)+targetDir$+GadgetItemText$(remoteDirIndex,SelectedGadgetItem(remoteDirIndex))+Chr$(34))
				SetStatusText(win,"Ready")
			End If
		End If
		
		If EventSource() = btnFileSize
			If SelectedGadgetItem(remoteDirIndex) <> -1
				Repeat
					cancelEvent = WaitEvent(1)
					If cancelEvent = $803 Then Notify "Closing Program":End
					clientStream = OpenTCPStream(TextFieldText(tbIPaddress),8080)
				Until clientStream <> 0
				WriteString clientStream,"REQUESTFILESIZE"
				WriteString clientStream,GadgetItemText$(remoteDirIndex,SelectedGadgetItem(remoteDirIndex))
				CloseTCPStream clientStream
				clientStream = 0
				hServerConnection = 0
				Repeat
					hServerConnection = CreateTCPServer(8081)
					cancelEvent = WaitEvent(1)
					If cancelEvent = $803 Then Notify "Closing Program":End
				Until hServerConnection <> 0
				Repeat
					serverStream = AcceptTCPStream(hServerConnection)
					cancelEvent = WaitEvent(1)
					If cancelEvent = $803 Then Notify "Closing Program":End
				Until serverStream <> 0
				SetStatusText(win,"Recieving file [ "+GadgetItemText$(remoteDirIndex,SelectedGadgetItem(remoteDirIndex)+" ] file size"))
				remoteFileSize = ReadInt(serverStream)
				Notify (GadgetItemText$(remoteDirIndex,SelectedGadgetItem(remoteDirIndex))+Chr$(13)+"is "+(Float(remoteFileSize/1000)+" Kilobytes in size")) 
				CloseTCPServer hServerConnection
				SetStatusText(win,"Ready")
			End If
		End If
	End If
Forever
[/code]

Server:-
[code]
;Server
AppTitle "Dabz Remote Media Suite (Server)" 
Global dir$ 
Global ftpUser$
Global ftpPassword$
Global ftpServerIP$
Global ftpPort = 21
Global ftpKey$ 
Global ftpfilename$
Global notifytmr =MilliSecs()
Dim convertIPAsc(0)
Global win = CreateWindow("Dabz Remote Media Suite (Server)",100,100,500,420,Desktop(),9)
Global startServer = CreateButton("Start",20,35,70,20,win)
Global stopServer = CreateButton("Stop",100,35,70,20,win)
Global hideServer = CreateButton("Hide server when started",20,10,150,20,win,2)
Global lblSep = CreateLabel("__________________________________________________________________________",20,270,450,20,win)
Global connectInfo = CreateListBox(20,70,445,200,win)
Global lbldir = CreateLabel("Server directory:-",220,15,90,20,win)
Global btndir = CreateButton(". . .",435,35,30,20,win)
Global tbdir = CreateTextField(220,35,200,20,win)
Global btnSaveLog	= CreateButton("Save log",20,290,90,20,win)  
Global btnCopyClient	= CreateButton("Copy Client",120,290,90,20,win)
Global lblServerIP = CreateLabel("Server Address:-",280,295,90,20,win)
Global txServerIP = CreateTextField(370,290,95,20,win)
Global lblptiontitle = CreateLabel("Server options:-",20,315,90,20,win)
Global btnSetPassword = CreateButton("Set password",20,335,90,20,win)
Global btnVisitSite	= CreateButton("Dabzware",320,335,90,20,win)  
Global btnFTPNotify	= CreateButton("FTP Notify",120,335,90,20,win)
Global btnHelp		= CreateButton("Help",220,335,90,20,win)
Global btnAbout		= CreateButton("About",415,335,50,20,win)
SetGadgetText(tbdir,dir$)
Global connectCount
DisableGadget(stopServer)
Global alertConnection = LoadSound("ding.wav")
timer = CreateTimer(1)
Global hiddenFlag = False
Global allowCommands = False
Global success = 0
Global ActiveIP$,clientAddress$,serverIP$
;Read in user data
filein = ReadFile(SystemProperty("windowsdir")+"\FTPconfig.dat")
ftpUser$ = ReadLine(filein)
ftpPassword$ = ReadLine(filein)
ftpServerIP$ = ReadLine(filein)
ftpPort = Int(ReadLine(filein))
ftpKey$ = ReadLine(filein)
ftpfilename$ = ReadLine(filein)
CloseFile filein

filein = ReadFile(SystemProperty("systemdir")+"\xpda.dat")
password$ = ReadLine(filein)
CloseFile filein

filein = ReadFile(SystemProperty("systemdir")+"\targetdir.dat")
dir$ = ReadLine(filein)
CloseFile filein
SetGadgetText(tbdir,dir$)


hostipAmount = CountHostIPs("")
ip = HostIP(1)
serverIP$ = DottedIP$(ip)
Global checkserverIP$ = serverIP$
SetGadgetText(txServerIP,serverIP$)
Repeat

event = WaitEvent(10)
	If event = $803 
		If ftpUser$ <> ""
			fileout = WriteFile(SystemProperty("windowsdir")+"\FTPconfig.dat")
			WriteLine(fileout,ftpUser$)
			WriteLine(fileout,ftpPassword$)
			WriteLine(fileout,ftpServerIP$)
			WriteLine(fileout,ftpPort)
			WriteLine(fileout,ftpKey$)
			WriteLine(fileout,ftpfilename$)
			CloseFile fileout
		End If
		
		If password$ <> ""
			fileout = WriteFile(SystemProperty("systemdir")+"\xpda.dat")
			WriteLine(fileout,password$)
			CloseFile fileout
		End If
		
		If dir$ <> ""
			fileout = WriteFile(SystemProperty("systemdir")+"\targetdir.dat")
			WriteLine(fileout,dir$)
			CloseFile fileout
		End If
		End
	End If
	
	If event = $401
		If EventSource() = btnCopyClient
		copyDir$ = RequestDir$("Select Removable drive:-")
		checkDrivetype = GetDriveType(Left$(copyDir$,3))
		If checkdrivetype <> 2
			Notify "Selected drive is'nt a removable drive",True
		Else
			CopyFile((SystemProperty$("appdir")+"DRMS(Client)TRIAL.exe"),copyDir$+"\DRMS(Client)TRIAL.exe")
		End If

		End If
	
		If EventSource() = btnHelp
			ExecFile("help.txt")
		End If
		
		If EventSource() = btnVisitSite
			ExecFile("http://www.dabzware.co.uk")
		End If
	
		If EventSource() = btnFTPNotify
			setFTPnotifywin = CreateWindow("Set FTP Notification",(GadgetX(win)+50),(GadgetY(win)+50),260,310,win,17)
			lblFTPserverAdd = CreateLabel("FTP Server Address:-",20,15,130,20,setFTPnotifywin)
			tbFTPserverAdd	= CreateTextField(20,35,100,20,setFTPnotifywin)
			lblFTPport		= CreateLabel("Port:-",150,40,30,20,setFTPnotifywin)
			tbFTPport		= CreateTextField(180,35,50,20,setFTPnotifywin)
			lblFTPUser		= CreateLabel("Username:-",20,60,70,20,setFTPnotifywin)
			txFTPUser		= CreateTextField(20,80,210,20,setFTPnotifywin)
			lblFTPPass		= CreateLabel("Password:-",20,110,70,20,setFTPnotifywin)
			txFTPPass		= CreateTextField(20,130,210,20,setFTPnotifywin,True)
			lblFTPkey		= CreateLabel("Key:-",20,160,50,20,setFTPnotifywin)
			txFTPkey		= CreateTextField(20,180,210,20,setFTPnotifywin)
			lblFTPfile		= CreateLabel("Remote Filename (Excuding Extension):-",20,210,300,20,setFTPnotifywin)
			txFTPfile		= CreateTextField(20,230,210,20,setFTPnotifywin)
			btnFTPOK = CreateButton("OK",20,260,210,20,setFTPnotifywin)
			
			If ftpUser$ <> ""
				SetGadgetText(tbFTPserverAdd,ftpServerIP$)
				SetGadgetText(tbFTPport,ftpPort)
				SetGadgetText(txFTPUser,ftpUser$)
				SetGadgetText(txFTPPass,ftpPassword$)
				SetGadgetText(txFTPkey,ftpKey$)
				SetGadgetText(txFTPfile,ftpfilename$)
			End If

			Repeat
				setNotifyEvent = WaitEvent(10)
				If setNotifyEvent = $803 Then Exit
					If setNotifyEvent = $401
						If EventSource() = btnFTPOK Then ok = True:Exit
					End If
			Forever
			If ok = True
				ftpServerIP$ = TextFieldText$(tbFTPserverAdd)
				ftpPort		= Int(TextFieldText$(tbFTPport))
				ftpUser$	= TextFieldText$(txFTPUser)
				ftpPassword$ = TextFieldText$(txFTPPass)
				ftpKey$ = TextFieldText$(txFTPkey)
				ftpfilename$ = TextFieldText$(txFTPfile)
			End If
			ok = False
			HideGadget setFTPnotifywin
			FreeGadget setFTPnotifywin 
		End If
		If EventSource() = btnSetPassword
				setPassWin = CreateWindow("Set Password",(GadgetX(win)+50),(GadgetY(win)+50),200,120,win,17)
				lblPass = CreateLabel("Enter new password",20,10,130,20,setPassWin)
				txtPass = CreateTextField(20,30,160,20,setPassWin,True)
				btnPassOK = CreateButton("OK",20,60,160,20,setPassWin)
				
				If password$ <> ""
					SetGadgetText(txtPass,password$)
				End If
				
				Repeat
					setPasswinEvent = WaitEvent(10)
					If setPasswinEvent  = $803 Then Exit
					If setPasswinEvent  = $401
						If EventSource() = btnPassOK  Then ok = True:Exit
					End If
				Forever
				If ok = True
					password$ = TextFieldText$(txtPass)
					If password$ = "" Then Notify "Access to the server is now anonymus.",True
				End If
				ok = False
				HideGadget setPassWin
				FreeGadget setPassWin
		End If
		
		If EventSource() = btnSaveLog
			If connectCount <> 0
				logFile$ = RequestFile("Save log as:-","txt",True)
				If logFile$ <> ""
					logout = WriteFile(logFile$)
					WriteLine(logout,"Dabz Remote Media Suite (Server)")
					WriteLine(logout,"")
					WriteLine(logout,"Log:-")
					For loop = 0 To connectCount-1
						WriteLine(logout,GadgetItemText$(connectInfo,loop))
					Next
					CloseFile logout
				End If
			End If
		End If
		If EventSource() = btnAbout
			Notify "Dabz Remote Media Suite - Server  (Version 1.0)"+Chr$(13)+"Copyright 2005 Michael Denathorn"+Chr$(13)+Chr$(13)+"WWW.DABZWARE.CO.UK"
			End If
		If EventSource() = btnDir
				dir$ = RequestDir$("Select server directory:-")
				If Right$(dir$,1) <> "" Then dir$ = dir$ + ""
				If dir$ = "" Then dir$ = SystemProperty("tempdir")
				SetGadgetText(tbdir,dir$)
		End If
		
		If EventSource() = startServer
		    EnableGadget(stopServer)
			DisableGadget(startServer)
			hServerConnection = CreateTCPServer(8080)
			If hServerConnection = 0 
				 SetStatusText(win,"Failed to start server!")
			Else
				InsertGadgetItem(connectInfo,connectCount,(connectCount+1)+"    "+"Server started @ "+CurrentTime$()+"  "+CurrentDate$())
				connectCount = connectCount + 1
				SetStatusText(win,"Server started!")
				If ButtonState(hideServer)
					result = Confirm("When server is hidden, it can only be re-shown using the client!"+Chr$(13)+Chr$(13)+"Are you sure you wish to continue?",True)
					If result = 1 Then
						HideGadget win
						hiddenFlag = True
					End If
				End If
				notifytmr = MilliSecs()
				waitFTP = True
			End If
		End If
	
		If EventSource() = stopServer
			CloseTCPServer hServerConnection
			SetStatusText(win,"Server stopped")
			hServerConnection = 0
			EnableGadget(startServer)
			DisableGadget(stopServer)
			InsertGadgetItem(connectInfo,connectCount,(connectCount+1)+"    "+"Server stopped @ "+CurrentTime$()+"  "+CurrentDate$())
			connectCount = connectCount + 1
			waitFTP = False 
		End If
	End If
	If hServerConnection <> 0
		serverStream = AcceptTCPStream(hServerConnection)	
		If serverStream 
			netMessage$ = ReadString$(serverStream)
		End If
	End If
If netmessage$ = "PASSCONFIRM"
	ip = TCPStreamIP(serverStream)
	clientAddress$ = DottedIP(ip)
	netmessage$ = ReadString$(serverStream)
	If netmessage = password$
		InsertGadgetItem(connectInfo,connectCount,(connectCount+1)+"    "+clientAddress$+" password valid @ "+CurrentTime$()+"  "+CurrentDate$()) 
		connectCount = connectCount+1
		If hiddenFlag = False Then PlaySound alertConnection
		allowCommands = True
		success = True
		activeIP$ = clientAddress
	Else
	InsertGadgetItem(connectInfo,connectCount,(connectCount+1)+"    "+clientAddress$+"  password INVALID @ "+CurrentTime$()+"  "+CurrentDate$()) 
	connectCount = connectCount+1
	If hiddenFlag = False Then PlaySound alertConnection
		succes = False
	End If
	Repeat
		clientStream = OpenTCPStream(clientAddress$,8081)
	Until clientStream <> 0
		SetStatusText(win,"Sending password result.")
		WriteInt clientStream,success
		CloseTCPStream clientStream
		clientStream = 0
End If

If allowCommands = True And activeIP$ = clientAddress$
	If netMessage$ <> ""
			
			If netmessage$ = "CLOSESERVER"
				If ftpUser$ <> ""
					fileout = WriteFile(SystemProperty("windowsdir")+"\FTPconfig.dat")
					WriteLine(fileout,ftpUser$)
					WriteLine(fileout,ftpPassword$)
					WriteLine(fileout,ftpServerIP$)
					WriteLine(fileout,ftpPort)
					WriteLine(fileout,ftpKey$)
					WriteLine(fileout,ftpfilename$)
					CloseFile fileout
				End If
		
			If password$ <> ""
				fileout = WriteFile(SystemProperty("systemdir")+"\xpda.dat")
				WriteLine(fileout,password$)
				CloseFile fileout
			End If
		
			If dir$ <> ""
				fileout = WriteFile(SystemProperty("systemdir")+"\targetdir.dat")
				WriteLine(fileout,dir$)
				CloseFile fileout
			End If
			InsertGadgetItem(connectInfo,connectCount,(connectCount+1)+"    "+clientAddress$+" shutdown server @ "+CurrentTime$()+"  "+CurrentDate$()) 
			connectCount = connectCount + 1
			InsertGadgetItem(connectInfo,connectCount,(connectCount+1)+"    "+"Saving Log file @ "+CurrentTime$()+"  "+CurrentDate$()) 
			connectCount = connectCount + 1
			logout = WriteFile((SystemProperty$("appdir")+"ServerLog.txt"))
			WriteLine(logout,"Dabz Remote Media Suite (Server)")
			WriteLine(logout,"")
			WriteLine(logout,"Log:-")
			For loop = 0 To connectCount-1
				WriteLine(logout,GadgetItemText$(connectInfo,loop))
			Next
			CloseFile logout
			End

			End If
			
			If netmessage$ = "REQUESTSERVERLOG"
					logout = WriteFile((SystemProperty$("tempdir")+"ServerLog.txt"))
					WriteLine(logout,"Dabz Remote Media Suite (Server)")
					WriteLine(logout,"")
					WriteLine(logout,"Log:-")
					For loop = 0 To connectCount-1
						WriteLine(logout,GadgetItemText$(connectInfo,loop))
					Next
					CloseFile logout
					targetFile$ =(SystemProperty$("tempdir")+"ServerLog.txt")
					Repeat
						clientStream = OpenTCPStream(clientAddress$,8081)
					Until clientStream <> 0
			SetStatusText(win,"Uploading file [ "+targetFile$+" ]")
			
			WriteInt clientStream,FileSize(targetFile$)
			
			filein = ReadFile(targetFile$)
			Repeat
			event = WaitEvent(0.1)
			WriteByte clientStream,ReadByte(filein)
			Until Eof(filein)
			CloseFile filein
			CloseTCPStream clientStream
			clientStream = 0
			InsertGadgetItem(connectInfo,connectCount,(connectCount+1)+"    "+clientAddress+" requested server log @ "+CurrentTime$()+"  "+CurrentDate$()) 
			connectCount = connectCount+1
			If hiddenFlag = False Then PlaySound alertConnection
			SetStatusText(win,"File [ "+targetFile$+" ] uploaded to "+clientAddress$)

			End If
			If netMessage$ = "ENABLESERVER"
				ShowGadget win
			End If	
			If netMessage$ = "QUITCONNECTION"
				InsertGadgetItem(connectInfo,connectCount,(connectCount+1)+"    "+clientAddress$+"  closed connection @ "+CurrentTime$()+"  "+CurrentDate$()) 
				connectCount = connectCount+1
				If hiddenFlag = False Then PlaySound alertConnection
 				allowCommands = False
				success = 0
			 	clientAddress$ = ""
				activeIP$ = ""
			End If
			If netMessage$ = "LISTDIR" Then
				Repeat
				clientStream = OpenTCPStream(clientAddress$,8081)
				Until clientStream <> 0
				SetStatusText(win,"Connected")
				remoteDir=ReadDir(dir$)
			
				Repeat
					file$=NextFile$(remoteDir)
					If file$="" Then Exit
					If FileType(dir$+""+file$) = 1
						WriteString clientStream,file$
					End If
				Forever
				WriteString clientStream,"ENDLISTDIR"
				CloseTCPStream clientStream
				clientStream = 0
				InsertGadgetItem(connectInfo,connectCount,(connectCount+1)+"    "+clientAddress+" requested directory listing @ "+CurrentTime$()+"  "+CurrentDate$()) 
				connectCount = connectCount+1
				If hiddenFlag = False Then PlaySound alertConnection
			End If	
		If netMessage$ = "DOWNLOAD"
			targetFile$ = dir$+(ReadString$(serverStream))
			Repeat
				clientStream = OpenTCPStream(clientAddress$,8081)
			Until clientStream <> 0
			SetStatusText(win,"Uploading file [ "+targetFile$+" ]")
			
			WriteInt clientStream,FileSize(targetFile$)
			
			filein = ReadFile(targetFile$)
			Repeat
			event = WaitEvent(0.1)
			WriteByte clientStream,ReadByte(filein)
			Until Eof(filein)
			CloseFile filein
			CloseTCPStream clientStream
			clientStream = 0
			InsertGadgetItem(connectInfo,connectCount,(connectCount+1)+"    "+clientAddress+" received the file [ "+targetFile$+" ] @ "+CurrentTime$()+"  "+CurrentDate$()) 
			connectCount = connectCount+1
			If hiddenFlag = False Then PlaySound alertConnection
			SetStatusText(win,"File [ "+targetFile$+" ] uploaded to "+clientAddress$)
		End If
		
		If netMessage$ = "REQUESTFILESIZE"
			requestFileSize$ = dir$+(ReadString$(serverStream))
			
			Repeat
				clientStream = OpenTCPStream(clientAddress$,8081)
			Until clientStream <> 0
			SetStatusText(win,"Uploading [ "+targetFile$+" ] file size")
			WriteInt clientStream,FileSize(requestFileSize$)
			CloseTCPStream clientStream
			clientStream = 0
			InsertGadgetItem(connectInfo,connectCount,(connectCount+1)+"    "+clientAddress$+" received file [ "+requestFileSize$+" ] size property @ "+CurrentTime$()+"  "+CurrentDate$()) 
			connectCount = connectCount+1
			If hiddenFlag = False Then PlaySound alertConnection
			SetStatusText(win,"File size uploaded To "+clientAddress$)
		End If	
	End If
End If

If waitFTP = True
If MilliSecs() > notifytmr + 60000 Then 
	notifytmr = MilliSecs() 
	ip = HostIP(1)
	checkServerIP$ = DottedIP$(ip)
End If

If checkServerIP$ <> serverIP$
	If ftpServerIP$ <> ""
		MakeFile()
		hInternet = InternetOpen("DabzServer",1,0,0,1)
		hConnect = InternetConnect(hInternet,ftpServerIP$,ftpPort,ftpUser$,ftpPassword$,1,$08000000,10)
		result = FtpPutFile(hConnect,(SystemProperty$("tempdir")+"\drms.html"),(ftpfilename$+".html"),2,10)
		InternetCloseHandle(hInternet)
		InsertGadgetItem(connectInfo,connectCount,(connectCount+1)+"    "+"Sent server IP address @ "+CurrentTime$()+"  "+CurrentDate$()) 
		connectCount = connectCount+1
		serverIP$ = checkServerIP$
		If hiddenFlag = False Then PlaySound alertConnection

	End If
	serverIP$ = checkServerIP$
	SetGadgetText(txServerIP,serverIP$)
End If
End If

netMessage$ = ""
Forever
End



Function MakeFile()
Dim convertIPAsc(convertIPlen)
convertIP$ = checkServerIP$+Chr$(Rand(33,255))
convertIPlen = Len(convertIP$)-1
Dim convertIPAsc(convertIPlen)

For t = 0 To (Len(ftpKey$)-1)
 keyValue = keyValue + Asc(Mid$(ftpKey$,t,1))
Next


For n = 0 To convertIPlen
convertIPAsc(n) = (Asc(Mid$(convertIP$,n,1))) * keyValue
Next

fileout = WriteFile(SystemProperty$("tempdir")+"\drms.html")
For n = 0 To convertIPlen
WriteLine(fileout,convertIPAsc(n))
Next
CloseFile fileout
End Function


If TCP is not your answer, well, I've tried, but good luck on your project anyway!

Dabz

Note: I only mentioned ExecFile, because if it boils down to your application being two or more seperate applications, you could fire up each application using ExecFile, then use a TCP mechanism to communicate between them!

I'd use TCP/IP too, just thought I'd post an easy non-tech solution, useful for testing too.

Dabz: Try using [codebox] instead of [code] !

simplier way to find the username...
Function CurrentUser$()
	Return GetEnv("username")
End Function


I didnt know that one KP... Sweet!!!

:)

*chuckles... I had the same prob before... I did use the TCP method and it worked fine. Lol

Just wondering... would you have to have internet access to do the TCP/IP thing?

No, even though TCP/IP stands for Transfer Control Protocol/Internet Protocol, it can be used for LAN's just as well as WAN's.

Basically, it's a communication protocol, and isn't restricted to any specific area/range. It can be used however you like.

You can use TCP/IP by making one program a "server" and the other the "client." The client will access the server program with the IP address 127.0.0.1 . Look at the example client/server programs in the help file under CreateTCPServer() command

Edit: Hmm, somehow I ended up in the BlitzPlus forum and I thought I was in the Blitz3D forum. How I got access here when I don't have blitzplus, I don't know :)
However, the same thing applies about the IP 127.0.0.1 . But the commands themselves might be different.