Solved

Send message to another computer API calls

Posted on 1998-12-08
15
207 Views
Last Modified: 2010-04-04
How can i send message to another computer to remind the person about something? Is this API Calls ( Do you have some code ) Thanks!!
0
Comment
Question by:emiltor
  • 5
  • 4
  • 3
  • +2
15 Comments
 
LVL 3

Expert Comment

by:williams2
ID: 1349899
Nope! It is either DCOM, UDP, IPX, TCPIP etc.

If you are to setup a server through a Local Area Network, you should use either DCOM (Distributed COM) or UDP (User Datagram Protocol)

Another and more secure way, is to make the client do a TCP/IP connection to the server at startup. Afterwards, it's very easy to control events and dataparsing. I can give you bright examples of this.

Which version of Delphi have you got?

regards,
Williams
0
 
LVL 12

Expert Comment

by:rwilson032697
ID: 1349900
Odd - I always thought the U in UDP was for Unreliable in that the protocol does not in fact gurantee delivery of the packet. (at least it is in the Unix world...)

Cheers,

Raymond.
0
 
LVL 7

Accepted Solution

by:
BlackMan earned 50 total points
ID: 1349901
There is the good ol' WinPopup, which uses Mailslots. There is a Delphi implementation of WinPopup, including source, at http://djernaes.dk/martin/winpopup.html
0
 
LVL 3

Expert Comment

by:williams2
ID: 1349902
Hi Raymond!

So did I, until I got corrected by Andrew S. Tannenbaum in his book "Computer Networks"

BlackMan is right, I guess. This must be the easiest way to do this.

Cheers,
Williams
0
 

Author Comment

by:emiltor
ID: 1349903
I have Delphi 3.0.1 Client/Server
0
 
LVL 4

Expert Comment

by:erajoj
ID: 1349904
You can also use NetMessageBufferSend, this is really easy, but works only in NT.

/// John
0
 

Author Comment

by:emiltor
ID: 1349905
Excelent !! I only use NT , Do you have any code or something ?
0
IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

 
LVL 3

Expert Comment

by:williams2
ID: 1349906
I guess this might work. You have to declare the function first!

Like this:

interface


  ...

  Function NetMessageBufferSend (
     pServername,
     pMsgName,
     pFromname: PWideChar;
     buf: pChar;
     buflen: DWORD): UINT; stdcall;
  external 'netapi32.dll' name 'NetMessageBufferSend';

implementation

{$R *.DFM}

procedure DoSendMessage(ServerName,Headline,From: String; Message: TStringList);
var
  i,count: Integer;
begin
  count:= 0;
  For i:= 0 to message.Count-1 do Inc(Count,length(message.strings[i])+1);
  If From='' then From:= #0; //uses the default loginName
  NetMessageBufferSend(PWideChar(ServerName),
                       PWideChar(Headline),
                       PWideChar(From),
                       Message.GetText,
                       count);
End;

..


end.


Does that work? ..I'm sorry, that I cannot test it myself, I haven't got two computers, but the app seemed to be busy doing something hehe. :-)

Cheers,
Williams
0
 
LVL 4

Expert Comment

by:erajoj
ID: 1349907
Do you need further help, or is Williams comment enough?
The drawback with this method is: you can't handle the message yourself on the receiver end, unless you substitute the messenger service.

/// John

0
 

Author Comment

by:emiltor
ID: 1349908
I'm glad if you have any code John....

Williams have to explane his answer better - i don't understand it enought

thanks..... williams & John

(/Ho is better)
0
 
LVL 7

Expert Comment

by:BlackMan
ID: 1349909
If you go for Williams / johns answer, I think you should reject my answer...
0
 

Author Comment

by:emiltor
ID: 1349910
Sorry Blackman, when i go to the page you send me it doesn't work and now when i test again it works. and there is lots of stuff about my question ( "allright" )

Thanks...

0
 
LVL 4

Expert Comment

by:erajoj
ID: 1349911
Hi again,
Here's a simple unit with the functions supplied by Williams and some sample code:

unit NetMsg;

{ Example unit for sending messages over the network }
{ For users at experts-exchange, use freely at own risk }
{ created 1998-12-10 by John Johansson (erajoj) }

interface

uses Windows, Classes;

function NetMessageBufferSend(
   pServername,
   pMsgName,
   pFromname,
   pBuf: PWideChar;
   dwBufLen: DWORD): UINT; stdcall;
   external 'netapi32.dll' name 'NetMessageBufferSend';

{ Send strings to single recipient at optional server and with optional signature }
function DoSendMessage( pServerName, pFrom, pReceiver: PWideChar; rgsMsg: TStrings ): Boolean;
{ Send strings to multiple recipients at optional server and with optional signature }
function DoSendMessageEx( pServerName, pFrom: PWideChar; rgsReceiver, rgsMsg: TStrings ): Boolean;
{ Lightweight send strings to single recipient }
function SendMsg( sReceiver, sMessage: string ): Boolean;

implementation

function DoSendMessage( pServerName, pFrom, pReceiver: PWideChar; rgsMsg: TStrings ): Boolean;
var
  sMsg: WideString;
begin
  sMsg := rgsMsg.Text; { autoconvert from ansi to wide string }
  Result := NetMessageBufferSend(
    pServerName,
    pReceiver,
    pFrom,
    PWideChar( sMsg ),
    SizeOf( WideChar ) * ( Length( sMsg ) + 1 ) { 2 byte per char + zero terminator }
  ) = 0;
end;

function DoSendMessageEx( pServerName, pFrom: PWideChar; rgsReceiver, rgsMsg: TStrings ): Boolean;
var
  sMsg: WideString;
  iIndex: Integer;
begin
  Result := True;
  for iIndex := 0 to rgsReceiver.Count - 1 do
  begin
    sMsg   := rgsReceiver[ iIndex ]; { autoconvert from ansi to wide string }
    Result := Result and DoSendMessage( pServerName, pFrom, PWideChar( sMsg ), rgsMsg );
  end;
end;

function SendMsg( sReceiver, sMessage: string ): Boolean;
var
  sRec, sMsg: WideString;
begin
  sRec := sReceiver; { autoconvert from ansi to wide string }
  sMsg := sMessage;  { autoconvert from ansi to wide string }
  Result := NetMessageBufferSend(
    nil,
    PWideChar( sRec ),
    nil,
    PWideChar( sMsg ),
    SizeOf( WideChar ) * ( Length( sMsg ) + 1 ) { 2 byte per char + zero terminator }
  ) = 0;
end;

Samples:

uses ..., netmsg;
  ...

procedure TMainForm.Button1Click(Sender: TObject);
begin
  SendMsg( 'john', 'Hello! Let''s go out to lunch!' );
end;

procedure TMainForm.Button2Click(Sender: TObject);
begin
  DoSendMessageEx( '\\DEVSRV', nil, ColleagueListBox.Items, MessageListBox.Items );
end;

procedure TMainForm.Button3Click(Sender: TObject);
begin
  DoSendMessage( nil, nil, 'myonlyfriend', InfoStringList );
end;

procedure TMainForm.Button4Click(Sender: TObject);
begin
  if not SendMsg( 'emiltor', 'Enough?' ) then
    ShowMessage( 'Not good enough. Didn''t get through!' );
end;

end.

Can't really do any better than this right now...
Points go to Williams if this solution is sufficient.

/// John
0
 

Author Comment

by:emiltor
ID: 1349912
Thanks
Blackman,Williams,John,Raymond

Now i can send message

Keep the smile high..............
0
 
LVL 3

Expert Comment

by:williams2
ID: 1349913
You're welcome

Thanx to John for his corrections :-)

Regards,
Williams
0

Featured Post

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Objective: - This article will help user in how to convert their numeric value become words. How to use 1. You can copy this code in your Unit as function 2. than you can perform your function by type this code The Code   (CODE) The Im…
Introduction The parallel port is a very commonly known port, it was widely used to connect a printer to the PC, if you look at the back of your computer, for those who don't have newer computers, there will be a port with 25 pins and a small print…
Get a first impression of how PRTG looks and learn how it works.   This video is a short introduction to PRTG, as an initial overview or as a quick start for new PRTG users.
This video gives you a great overview about bandwidth monitoring with SNMP and WMI with our network monitoring solution PRTG Network Monitor (https://www.paessler.com/prtg). If you're looking for how to monitor bandwidth using netflow or packet s…

746 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

16 Experts available now in Live!

Get 1:1 Help Now