Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

NET SEND EN DELPHI ( API NETMESSAGEBUFFERSEND )


Information sur la source

Description

Cliquez pour voir la capture en taille normale
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

  • { -------------------------------------
  • 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.
{ -------------------------------------

    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 !
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de Filipe35 le 25/11/2005 18:19:25

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

signaler à un administrateur
Commentaire de f0xi le 27/11/2005 20:40:56 administrateur CS

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...

signaler à un administrateur
Commentaire de elguevel le 30/11/2005 20:27:11

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 :-)

signaler à un administrateur
Commentaire de dj97 le 11/06/2008 10:52:33

j'ai executer ton aplliactif mais ça marche pas , j'ai toujours des erreurs , veuillez nous donner des exemples pour mieux comprendre , merci

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Api NetMessageBufferSend [ par paf24 ] Bonjour,j'ai besoin d'un peu d'aide pour utiliser l'api NetMessageBufferSend de la librairie Netapi32.dllen fait, je sais pas quel classe ajouter dans Api NetMessageBufferSend [ par paf24 ] Bonjour,j'ai besoin d'un peu d'aide pour utiliser l'api NetMessageBufferSend de la librairie Netapi32.dllen fait, je sais pas quel classe ajouter dans l'api IoCreateDevice ? [ par toto8966 ] Bonjour a tous !Comment faire pour pouvoir faire appel a l'api "IoCreateDevice" depuis Delphi (delphi 6 perso).Je pense que cette api se trouve dans N Les Api Windows [ par twoupy ] Est-ce que quelqu'un possède ou sait où je pourrais trouver l'aide sur les Api Windows (win32.hlp) en français. ce serait bien cool, parce que l'angl documentation API [ par Noureddine ] Bonjour,je cherche la documentation pour comprendre L'API, si vous avez une adresse ou je peut télécharger une documentation en français SVPMerci. problème avec une api [ par fabiin ] SalutEst-ce que kelk'un rencontre un problème lors de l'utilisation desetDCbrushcoloren Delphi 6Merci par avance@+Fabse Comment utiliser une API avec Delphi 5? [ par Manthis ] Salut,Je débute tout juste en Delphi 5. J'avais commencer par le VB. Et donc voila j'ai un problème comment utiliser une API avec Delphi?Ou doit-on la API sndPlaySoundA [ par jlg75 ] j'utilise l'API 'sndPlaySoundA' tirée de 'winmm.dll' pour lire des .wav dans un prog DELPHI. Je déclare explicitement cet API comme fonction 'external CHERCHE TUT DELPHI API [ par golum ] Salut je suis a la recherche d'un tut Delphi et API un peu comme EstDev pour VBAuriez vous quelque chose ? des adresses ? Winsock [ par SMoG ] Yop... Je desespere de trouver un jour de la doc sur l'api winsock avec des exemples delphi...Si qqn pouvait m'expliquer comment deux machines se con


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,515 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.