Jump to content


Photo

[Truco Delphi] Alternativa a NET SEND.


  • Please log in to reply
3 replies to this topic

#1 sir.dev.a.lot

sir.dev.a.lot

    Advanced Member

  • Miembros
  • PipPipPip
  • 545 posts
  • Location127.0.0.1

Posted 18 August 2016 - 10:26 AM

[Truco Delphi] Alternativa a NET SEND.


delphi
  1. function NetSend(dest, source, msg: string): longint; overload;
  2. type
  3. TNetMessageBufferSendFunction = function(servername, msgname, fromname:
  4. PWideChar; buf: PWideChar; buflen: Cardinal): longint; stdcall;
  5. var
  6. NetMessageBufferSend: TNetMessageBufferSendFunction;
  7. SourceWideChar : PWideChar;
  8. DestWideChar : PWideChar;
  9. MessagetextWideChar: PWideChar;
  10. Handle : THandle;
  11. begin
  12.  
  13. Handle := LoadLibrary('NETAPI32.DLL');
  14. if Handle = 0 then
  15. begin
  16. Result := GetLastError;
  17. exit;
  18. end;
  19.  
  20. @NetMessageBufferSend := GetProcAddress(Handle, 'NetMessageBufferSend');
  21. if @NetMessageBufferSend = nil then
  22. begin
  23. Result := GetLastError;
  24. exit;
  25. end;
  26.  
  27. MessagetextWideChar := nil;
  28. SourceWideChar := nil;
  29. DestWideChar := nil;
  30.  
  31. try
  32. GetMem(MessagetextWideChar, Length(msg) * SizeOf(WideChar) + 1);
  33. GetMem(DestWideChar, 20 * SizeOf(WideChar) + 1);
  34. StringToWideChar(msg, MessagetextWideChar, Length(msg) *
  35. SizeOf(WideChar) + 1);
  36. StringToWideChar(Dest, DestWideChar, 20 * SizeOf(WideChar) + 1);
  37. if source = '' then
  38. result := NetMessageBufferSend(nil, DestWideChar, nil,
  39. MessagetextWideChar, Length(msg) * SizeOf(WideChar) + 1)
  40. else
  41. begin
  42. GetMem(SourceWideChar, 20 * SizeOf(WideChar) + 1);
  43. StringToWideChar(source, SourceWideChar, 20 * SizeOf(WideChar) + 1);
  44. result := NetMessageBufferSend(nil, DestWideChar, SourceWideChar,
  45. MessagetextWideChar, Length(msg) * SizeOf(WideChar) + 1);
  46. freemem(SourceWideChar);
  47. end;
  48. finally
  49. FreeMem(MessagetextWideChar);
  50. FreeLibrary(Handle);
  51. end;
  52. end;
  53.  
  54. function NetSend(Dest, msg: string): longint; overload;
  55. begin
  56. Result := NetSend(Dest, '', msg);
  57. end;
  58.  
  59. function NetSend(msg: string): longint; overload;
  60. begin
  61. Result := NetSend('', '', msg);
  62. end;

Ejemplo de Uso:


delphi
  1. NetSend('egostar','Hello World');

Saludos!


  • 3

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14448 posts
  • LocationMéxico

Posted 18 August 2016 - 10:28 AM

A mi siempre me han gustado estas llamadas al API y aquí tenemos a varios compañeros amantes del API :) (y)

 

Saludos


  • 0

#3 sir.dev.a.lot

sir.dev.a.lot

    Advanced Member

  • Miembros
  • PipPipPip
  • 545 posts
  • Location127.0.0.1

Posted 19 August 2016 - 10:00 PM

Hey, egostar.

 

Mas adelante, publicare algo con PIPEs y MailSlots.

 

estoy trabajando con un proyecto donde esto es muy util en un Red de Area Local para notificar sobre cambios cuando una Base de datos es actualizada, funciona como las Alertas en Firebird / Interbase.

 

Saludos!


  • 1

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14448 posts
  • LocationMéxico

Posted 19 August 2016 - 10:52 PM

Hey, egostar.

 

Mas adelante, publicare algo con PIPEs y MailSlots.

 

estoy trabajando con un proyecto donde esto es muy util en un Red de Area Local para notificar sobre cambios cuando una Base de datos es actualizada, funciona como las Alertas en Firebird / Interbase.

 

Saludos!

 

 

Me parece muy interesante, hasta ahora he usado los eventos de base de datos para actuar en consecuencia, ya espero tu publicación que será (estoy seguro) por demás ilustrativa.

 

Saludos


  • 0




IP.Board spam blocked by CleanTalk.