Newsgroup: it.comp.lang.delphi
Titolo: help!!!!!!!!!!!

Salve a tutti,
ho un problema che non sono al momento in grado di risolvere: ho
scritto un programmino cretino per evitarmi la pena di usare il prompt
di dos per la spedizione dei messaggi; utilizza una procedura che
viene richiamata dalla pressione di un tasto, senonchč cosě come č
scritta (vedi piů sotto) sarei costratta a modificare il sorgente e
ricompilarlo ogni volta che voglio cambiare hostname del PC
"bersaglio" o messaggio ... con buona pace del miglioramento rispetto
all'uso del prompt!!!
	il cuore del programma č il seguente:
procedure ExecuteShellCommand(cmdline: string; hidden: Boolean); 
const 
  flags: array[Boolean] of Integer = (SW_SHOWNORMAL, SW_HIDE); 
var 
  cmdbuffer: array[0..MAX_PATH] of Char; 
begin
  GetEnvironmentVariable('COMSPEC', cmdBUffer, SizeOf(cmdBuffer));
  ShellExecute(0,'open',cmdbuffer, PChar('/c' + cmdline), nil,
flags[hidden]);
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
ExecuteShellCommand('net send Hostname messaggio', True);
end;
	L'obiettivo che mi sono posta sarebbe di rendere possibile il
passaggio dei parametri hostname e messaggio da due controlli Edit, ma
assolutamente non vuole funzionare ...
	Qualcuno saprebbe darmi un consiglio?
	Grazie,
		Haydee

 end
Prova eventualmente in questa maniera:
procedure TForm1.BitBtn1Click(Sender: TObject);
Var s:string;
begin
 s:='net send '+edit1.text+' '+edit2.text;
ExecuteShellCommand(s, True);
end;
In ogni caso ci sono componenti appositamente sviluppati per fare questo
senza richiamare net send.
http://www.djernaes.dk/martin
 -> VCL
e cerca WinPopup Demo
Ciao
Matteo

 	Qualcuno saprebbe darmi un consiglio?
Mi sembra di averti gia' risposto (
http://tinyurl.com/ykem
), comunque:
Ti suggerisco di studiarti:
http://www.marcocantu.com/epascal/default.htm
http://www.marcocantu.com/edelphi/default.htm
e di comprarti un buon libro su Delphi.
Comunque ...
ExecuteShellCommand('net send ' + edNomePC.Text + ' ' +
edMessaggio.Text, True);
-- 
I'am what I'am, I do what I can

Io faccio così:
Metti su form 1 una listbox un memo e un button
Ciao
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Button1: TButton;
    Button2: TButton;
    Label1: TLabel;
    Memo1: TMemo;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure DoEnumeration;
type
  PNetResourceArray = ^TNetResourceArray;
  TNetResourceArray = array[0..MaxInt div SizeOf(TNetResource) - 1] of
TNetResource;
var
  I, BufSize, NetResult: Integer;
  NetHandle: THandle;
  NetResources: PNetResourceArray;
  Server : string;
  Count : Longint;
  Size : DWORD;
begin { DoEnumeration }
//  if WNetOpenEnum(RESOURCE_CONNECTED, RESOURCETYPE_ANY, 0, nil,NetHandle)
<> NO_ERROR then
  if WNetOpenEnum(RESOURCE_CONTEXT, RESOURCETYPE_ANY, 0, nil,NetHandle) <>
NO_ERROR then
    Exit;
  try
    BufSize := 50 * SizeOf(TNetResource);
    GetMem(NetResources, BufSize);
    try
      while True do
      begin { while Tr.. }
        Count := -1;
        Size := BufSize;
        NetResult := WNetEnumResource(NetHandle, DWORD(Count),
NetResources,Size);
        if NetResult = ERROR_MORE_DATA then
        begin
          BufSize := Size;
          ReallocMem(NetResources, BufSize);
          Continue;
        end;
        if NetResult <> NO_ERROR then Exit;
        for I := 0 to Count - 1 do
          Form1.ListBox1.Items.Add(NetResources^[I].lpRemoteName);
//          with NetResources^[I] do
//          begin { with Net.. }
//            Server := Fix (lpRemoteName);
//            if ListBox1.Items.IndexOf(Server) < 0 then
//              ListBox1.Items.Add(Server)
//          end; { with Net.. }
      end; { while Tr.. }
    finally
      FreeMem(NetResources, BufSize);
    end; { try }
  finally
    WNetCloseEnum(NetHandle);
  end; { try }
end; { DoEnumeration }
procedure TForm1.Button1Click(Sender: TObject);
begin
   ListBox1.Clear;
   DoEnumeration;
end;
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;
procedure TForm1.Button2Click(Sender: TObject);
const
  NERR_BASE = 2100;
  NERR_NameNotFound = NERR_BASE + 173;
  NERR_NetworkError = NERR_BASE + 36;
  NERR_Success = 0;
var
  Res: Longint;
  sMsg: string;
  i : Integer;
begin
   for i := 1 to ListBox1.Items.Count - 1 do
   begin
      if ListBox1.Selected[I] then
      begin
         Res := NetSend(copy(ListBox1.Items[i], 3,
Length(ListBox1.Items[i])), Memo1.Text);
         case Res of
            ERROR_ACCESS_DENIED: sMsg := 'user does not have access to the
requested information.';
            ERROR_INVALID_PARAMETER: sMsg := 'The specified parameter is
invalid.';
            ERROR_NOT_SUPPORTED: sMsg := 'This network request is not
supported.';
            NERR_NameNotFound: sMsg := 'The user name could not be found.';
            NERR_NetworkError: sMsg := 'A general failure occurred in the
network hardware.';
            NERR_Success: sMsg := 'Message sent!';
         end;
         ShowMessage(copy(ListBox1.Items[i], 3, Length(ListBox1.Items[i])) +
' : ' +sMsg);
      end;
   end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
   Button1Click(Self);
end;
end.