Ir al contenido


Foto

[Truco Delphi] Alternativa a NET SEND.


  • Por favor identifícate para responder
3 respuestas en este tema

#1 sir.dev.a.lot

sir.dev.a.lot

    Advanced Member

  • Miembros
  • PipPipPip
  • 545 mensajes
  • Location127.0.0.1

Escrito 18 agosto 2016 - 10:26

[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
  • 14.448 mensajes
  • LocationMéxico

Escrito 18 agosto 2016 - 10:28

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 mensajes
  • Location127.0.0.1

Escrito 19 agosto 2016 - 10:00

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
  • 14.448 mensajes
  • LocationMéxico

Escrito 19 agosto 2016 - 10:52

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.