Net send en delphi ( api netmessagebuffersend )

Soyez le premier à donner votre avis sur cette source.

Vue 14 063 fois - Téléchargée 1 760 fois

Description

Comme le titre l'explicite, c'est un programme qui permet d'envoyer des messages sur le reseau (ou domaine) de la meme façon qu'un "net send".

Attention je precise que mon programme reprend une API windows, ce n'est pas un vulgaire "Shell()" car désolé mais cette méthode me fait gerber !

Source / Exemple :


{ -------------------------------------

    Programme   : Librairie de "Net Sender"
    Auteur      : LEVEUGLE Damien
    Année       : 2005
    API Utilisé : "NetMessageBufferSend"
    Explication : Permet d'envoyer des messages de type "Net Send" au utilisateur du reseau local
                  ou du domaine.

  ------------------------------------- }

unit ElgSender;

interface

uses Windows, SysUtils, Classes;

  { Fonction importée (API) }
  function ElgNetMessageBufferSend( WcServeur : PWideChar;
                                    WcDestination : PWideChar;
                                    WcSource : PWideChar;
                                    WcBuffer : PWideChar;
                                    iBufferLen : Cardinal) : Longint; stdcall; external 'NETAPI32.DLL' name 'NetMessageBufferSend';

  { Fonctions à appeler pour l'envoi de message }
  function NetSend( sDestinataire : string; sMessage : string; sSource : string; sServeur : string ) : Longint;

  { Fonction de convertion }
  function AllouePointeur( Chaine : string ) : PWideChar;

implementation

{ Fonction qui permet d'enoyer un message sur le réseau}
function NetSend( sDestinataire : string; sMessage : string; sSource : string; sServeur : string ) : Longint;
{ ---------------------------------------------------------------------------------------------
  sDestinataire : Nom de la machine client à qui envoyer le message
  sMessage      : Message à envoyer
  sSource       : [Facultatif] Nom de la machine qui l'envoi (doit etre un nom de machine valide 
                  sur le reseau)
  sServeur      : [Facultatif] Si un serveur de domaine existe on peut le preciser, 
                  sinon on peut aussi mettre le meme nom de machine
                  que la machine Source. (sServeur = sSource)

 -----------------------------------------------------------------------------------------------  }

var
  // Pointeurs
  PDestinataire : PWideChar;
  PMessage      : PWideChar;
  PSource       : PWideChar;
  PServeur      : PWideChar;
begin

  try

    // Convertie les chaines de type String en Pointeur sur WideChar
    PDestinataire := AllouePointeur( sDestinataire );
    PMessage      := AllouePointeur( sMessage );
    PSource       := AllouePointeur( sSource  );
    PServeur      := AllouePointeur( sServeur );

    // Fonction d'envoi (API Windows)
    Result := ElgNetMessageBufferSend( PServeur, PDestinataire, PSource, 
              PMessage, (Length(sMessage) * SizeOf(WideChar) + 1) );

  finally

    // Libère les buffers
    FreeMem( PServeur );
    FreeMem( PSource );
    FreeMem( PMessage );
    FreeMem( PDestinataire );
    
  end;

end;

{ Genere des Pointeurs de WideChar, en fonction de la chaine passé }
function AllouePointeur( Chaine : string ) : PWideChar;
var
  Taille : Integer;
  PPointeur : PWideChar;
begin
   Taille := Length(Chaine) * SizeOf(WideChar) + 1;
   GetMem( PPointeur, Taille );
   // Si chaine inexistante le pointeur sera Null
   if ( Trim( Chaine ) = '' ) then PPointeur := nil else StringToWideChar( Chaine, PPointeur, Taille );
   Result := PPointeur;
end;

end.

Conclusion :


Pour envoyé un message assuré vous que sur votre poste et celui du client le service Affichage des message est démarré.

Sinon pour envoyé des messages en mettant un autre nom de machine que la votre il vous faut des droits suffisants !

Vous pouvez sans relache critiquer mon code, merci !

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
250
Date d'inscription
lundi 9 novembre 2009
Statut
Membre
Dernière intervention
4 septembre 2020

Salut,
quelle doit être le format de la destination?
'192.168.0.105'?
ou '//192.168.0.105'
ou '\\192.168.0.105'???
ou 'Truc' (le nom de la machine?)

à quoi correspondent les codes d'erreur retournés par 'result'?

Merci pour votre aide!!!

PhilLu
Messages postés
5
Date d'inscription
lundi 18 juin 2007
Statut
Membre
Dernière intervention
4 février 2014

j'ai executer ton aplliactif mais ça marche pas , j'ai toujours des erreurs , veuillez nous donner des exemples pour mieux comprendre , merci
Messages postés
718
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
22 novembre 2016
3
Filipe35 > Ba j'me suis rendu compte que si j'tapait le nom d'un utilisateur fictif çà marchait pas, si je tape le nom d'un utilisateur du domaine, alors la çà marche (étant biensur administrateur sinon pas possibilité).

f0xi > Le fait qui est les dcu et l'exe ne devrait pas te poser de problème pour regarder les sources ??
Si ta des optimisation, alors fait en profité tout le monde, je me suis pas attardé sur la puissance ou l'optimisation e l'outils, c'est juste une Démo de l'API.

Et merci pour vos Coms :-)
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
37
Pourrait tu supprimer de ton archive les fichiers .Exe, .CFG, .DOF et .DCU, ce serait gentil merci.

Parce que j'aimerais bien regarder au sources de l'appli, surtout que j'ai vus d'aprés le code d'exemple qu'il y aurait quelques optimisations possible...
Messages postés
470
Date d'inscription
vendredi 14 novembre 2003
Statut
Membre
Dernière intervention
23 octobre 2007
1
salut

j'ai pas encore tester ton code mais quelque chose m'interpel:

# sSource : [Facultatif] Nom de la machine qui l'envoi (doit etre un nom de machine valide sur le reseau)

Or il se trouve qu'en VB on n'est pas obliger d'en mettre un valide,par exemple sur certains programmes qui envoie des messages anonyme, as tu testés ?

Filipe

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.