Avatar billede thorin_deathrage Nybegynder
29. august 2005 - 17:28 Der er 4 kommentarer

Net Send i Delphi kode

Jeg har lett lenge etter en måte å sende net-send i delphi med, og var 100% sikker på at denne skulle funke:

KODESTART:
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;
KODESLUTT;

men av en eller annen grunn blir det IKKE sendt noen net-send når jeg kaller

KODESTART:
NetSend(edReciever.Text,edMld.Text+' -t'+edTermTime.Text);
KODESLUTT;

programmet skal brukes til å slå av pcene på en skole når skolen stenges, og net send er aktivert på maskinene (har prøvd manuelt...)

KAN NOEN HJELPE???
Avatar billede kodak Mester
29. august 2005 - 17:32 #1
forstår dig ikke
Avatar billede thorin_deathrage Nybegynder
29. august 2005 - 17:35 #2
hva? jeg har en funksjon her ^^^^^^ som SKAL kunne brukes til å sende Net Send til datamaskiner over Lokalnet, men den funker ikke... :(

Net Send kan du teste selv hvis du ikke vet hva det er, orker ikke forklare...
Avatar billede dkn Nybegynder
29. august 2005 - 20:04 #3
tror egentlig den kode virker ok. Men du skal være sikker på at RPC service'en er aktiv.
(Remote Procedure Call (RPC) Locator)

De fleste har den nok slået fra da det er pisse træls med de beskeder.

har ikke testet din kode men somsagt er jeg ret sikker på den er okay.

Virker det hvis du sender til dig selv fra cmd.exe ?
Avatar billede trer Nybegynder
18. september 2005 - 19:13 #4
Nemmeste måde at lave en net send på er ved at anvende IPC mailslots. 

Du skriver blot en fil til stien \\<hostname\mailslot - brug FileCreate() eller FileOpen().

Check documentationen vedr. dette.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester