Entwickler-Ecke

Internet / Netzwerk - Nachricht zu einem anderen Computer schicken


Kalle557 - Sa 22.02.03 15:34
Titel: Nachricht zu einem anderen Computer schicken
hallo

und zwar wollte ich einfach ein kleines programm für das netzwerk programmieren, womit man eine nachricht an eine bestimmte ip adresse schicken kann, ohne das der empfänger die ganze zeit ein programm laufen lassen muss, was die nachricht empfängt.

geht das irgendwie? also es soll dann bei dem empfänger einfach so ein "showmessage-fenster" aufgehen.

mfg kalle


mars - Sa 22.02.03 15:56

Geht das nicht mit dem Nachrichtendienst von m$? Das Problem wäre dabei natürlich: Hat jemand den Dienst ausgeschaltet funktionierts nicht mehr...


matze - Sa 22.02.03 16:05

ich denke mal, dass da immer ein proggi im hintergrund laufen muss !!!


mars - Sa 22.02.03 18:27

matze hat folgendes geschrieben:
ich denke mal, dass da immer ein proggi im hintergrund laufen muss !!!

ja, das ist klar (gut, bei windows kann man nie sicher sein... :wink: ). Auch beim Nachrichtendienst läuft schliesslich ein Programm, nämlich der Dienst.


Cyrus - Mo 24.02.03 09:57

Vielleicht hilf das: Mit dieser Funktion kann man ein net send nachricht versenden (geht nur für win NT, win2k3 und win XP Pro)


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
function NetSend(dest, Source, Msg: string): Longint; overload; 
type 
  TNetMessageBufferSendFunction = function(servername, msgname, fromname: PWideChar; 
    buf: PWideChar; buflen: Cardinal): Longint;  
  stdcall; 
var 
  NetMessageBufferSend: TNetMessageBufferSendFunction; 
  SourceWideChar: PWideChar; 
  DestWideChar: PWideChar; 
  MessagetextWideChar: PWideChar; 
  Handle: THandle; 
begin 
  Handle := LoadLibrary('NETAPI32.DLL'); 
  if Handle = 0 then 
  begin 
    Result := GetLastError; 
    Exit; 
  end; 
    @NetMessageBufferSend := GetProcAddress(Handle, 'NetMessageBufferSend'); 
  if @NetMessageBufferSend = nil then 
  begin 
    Result := GetLastError; 
    Exit; 
  end; 

  MessagetextWideChar := nil; 
  SourceWideChar      := nil; 
  DestWideChar        := nil; 

  try 
    GetMem(MessagetextWideChar, Length(Msg) * SizeOf(WideChar) + 1); 
    GetMem(DestWideChar, 20 * SizeOf(WideChar) + 1); 
    StringToWideChar(Msg, MessagetextWideChar, Length(Msg) * SizeOf(WideChar) + 1); 
    StringToWideChar(Dest, DestWideChar, 20 * SizeOf(WideChar) + 1); 

    if Source = '' then 
      Result := NetMessageBufferSend(nil, DestWideChar, nil, 
        MessagetextWideChar, Length(Msg) * SizeOf(WideChar) + 1) 
    else 
    begin 
      GetMem(SourceWideChar, 20 * SizeOf(WideChar) + 1); 
      StringToWideChar(Source, SourceWideChar, 20 * SizeOf(WideChar) + 1); 
      Result := NetMessageBufferSend(nil, DestWideChar, SourceWideChar, 
        MessagetextWideChar, Length(Msg) * SizeOf(WideChar) + 1); 
      FreeMem(SourceWideChar); 
    end; 
  finally 
    FreeMem(MessagetextWideChar); 
    FreeLibrary(Handle); 
  end; 
end; 

function NetSend(Dest, Msg: string): Longint; overload; 
begin 
  Result := NetSend(Dest, '', Msg); 
end; 

function NetSend(Msg: string): Longint; overload; 
begin 
  Result := NetSend('', '', Msg); 
end; 

// Example: 

procedure TForm1.Button1Click(Sender: TObject); 
const 
  NERR_BASE = 2100; 
  NERR_NameNotFound = NERR_BASE + 173; 
  NERR_NetworkError = NERR_BASE + 36; 
  NERR_Success = 0; 
var 
  Res: Longint; 
  sMsg: string; 
begin 
  Res := NetSend('LoginName', 'Your Message...'); 
  case Res of 
    ERROR_ACCESS_DENIED: sMsg := 'user does not have access to the requested information.'; 
    ERROR_INVALID_PARAMETER: sMsg := 'The specified parameter is invalid.'; 
    ERROR_NOT_SUPPORTED: sMsg := 'This network request is not supported.'; 
    NERR_NameNotFound: sMsg := 'The user name could not be found.'; 
    NERR_NetworkError: sMsg := 'A general failure occurred in the network hardware.'; 
    NERR_Success: sMsg := 'Message sent!'; 
  end; 
  ShowMessage(sMsg); 
end;