Net Send Ganti ID Pengirim
Ok jumpa lagi,wakakakakakaka….
sekarang sigw mau ngasih tips buat yang suka kirim2 pesan antar LAN pake Command “Net Send”, artikel disini akan bahas buat mengganti ID pengirimnya… Ok langsung aja..
Buat New Aplikasi terus nama unitnya NetSend.pas
unit NetSend;
interface
uses
Windows, Messages, Classes, Dialogs, Forms,
IdIPWatch, BtnCtrls,
XPMan, Controls, StdCtrls, IdBaseComponent, IdComponent;
type
TForm1 = class(TForm)
IdIPWatch1: TIdIPWatch;
Memo1: TMemo;
Label8: TLabel;
Label7: TLabel;
Label6: TLabel;
Label5: TLabel;
Label3: TLabel;
Label2: TLabel;
Label1: TLabel;
Edit1: TEdit;
ComboBox1: TComboBox;
ImageButton1: TImageButton;
XPManifest1: TXPManifest;
ImageButton2: TImageButton;
procedure FormCreate(Sender: TObject);
procedure CaptionBox1Close(Sender: TObject);
procedure ImageButton2Click(Sender: TObject);
procedure ImageButton1Click(Sender: TObject);
procedure Memo1Change(Sender: TObject);
procedure Memo1KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
fromsaha: string;
implementation
{$R *.dfm}
type
PNetResourceArray = ^TNetResourceArray;
TNetResourceArray = array[0..100] of TNetResource;
function CreateNetResourceList(ResourceType: DWord;
NetResource: PNetResource;
out Entries: DWord;
out List: PNetResourceArray): Boolean;
var
EnumHandle: THandle;
BufSize: DWord;
Res: DWord;
begin
Result := False;
List := Nil;
Entries := 0;
if WNetOpenEnum(RESOURCE_GLOBALNET,
ResourceType,
0,
NetResource,
EnumHandle) = NO_ERROR then begin
try
BufSize := $4000; // 16 kByte
GetMem(List, BufSize);
try
repeat
Entries := DWord(-1);
FillChar(List^, BufSize, 0);
Res := WNetEnumResource(EnumHandle, Entries, List, BufSize);
if Res = ERROR_MORE_DATA then
begin
ReAllocMem(List, BufSize);
end;
until Res ERROR_MORE_DATA;
Result := Res = NO_ERROR;
if not Result then
begin
FreeMem(List);
List := Nil;
Entries := 0;
end;
except
FreeMem(List);
raise;
end;
finally
WNetCloseEnum(EnumHandle);
end;
end;
end;
procedure ScanNetworkResources(ResourceType, DisplayType:
DWord; List: TStrings);
procedure ScanLevel(NetResource: PNetResource);
var
Entries: DWord;
NetResourceList: PNetResourceArray;
i: Integer;
begin
if CreateNetResourceList(ResourceType, NetResource,
Entries, NetResourceList) then
try
for i := 0 to Integer(Entries) - 1 do
begin
if (DisplayType = RESOURCEDISPLAYTYPE_GENERIC) or
(NetResourceList[i].dwDisplayType = DisplayType) then begin
List.AddObject(NetResourceList[i].lpRemoteName,
Pointer(NetResourceList[i].dwDisplayType));
end;
if (NetResourceList[i].dwUsage and RESOURCEUSAGE_CONTAINER) 0 then
ScanLevel(@NetResourceList[i]);
end;
finally
FreeMem(NetResourceList);
end;
end;
begin
ScanLevel(Nil);
end;
function NetMessageBufferSendSubstA(ServerName, MsgName,
FromName, Msg: AnsiString): Boolean;
{.$DEFINE SYNCHRONOUS}
const
szService = '\\mailslot\\messngr';
MaxBufLen = $700;
var
hFile: THandle;
WrittenBytes: DWORD;
{$IFNDEF SYNCHRONOUS}
ovs: OVERLAPPED;
EventName: AnsiString;
{$ENDIF}
begin
Result := False;
if Length(Msg) * sizeof(AnsiChar) > MaxBufLen then
SetLength(Msg, MaxBufLen div sizeof(AnsiChar));
{$IFNDEF SYNCHRONOUS}
EventName := 'NetSendEvent_' + ServerName;
{$ENDIF}
ServerName := '\\\\' + Servername + szService;
hFile := CreateFileA(
@ServerName[1], GENERIC_WRITE, FILE_SHARE_READ, nil, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL or FILE_FLAG_NO_BUFFERING or FILE_FLAG_OVERLAPPED, 0);
if hFile INVALID_HANDLE_VALUE then
try
Msg := FromName + #0 + MsgName + #0 + Msg;
{$IFNDEF SYNCHRONOUS}
ovs.hEvent := CreateEventA(nil, True, False, @EventName[1]);
WriteFile(hFile, Pointer(Msg)^, Length(Msg), WrittenBytes, @ovs);
{$ELSE}
WriteFile(hFile, Pointer(Msg)^, Length(Msg), WrittenBytes, nil);
{$ENDIF}
Result := GetLastError = ERROR_IO_PENDING;
finally
{$IFNDEF SYNCHRONOUS}
if WaitForSingleObject(ovs.hEvent, INFINITE) WAIT_TIMEOUT then
{$ENDIF}
CloseHandle(hFile);
end;
end;
function NetMessageBufferSendSubstW(ServerName, MsgName,
FromName, Msg: WideString): Boolean;
begin
result := NetMessageBufferSendSubstA(ServerName, MsgName,
FromName, Msg);
end;
function NetSendMsg(name_, text_: string): DWORD;
{$IFDEF USENORMALNETSEND}
var
msgname: WideString;
msgtext: WideString;
{$ENDIF}
begin
while name_[1] = '\\' do delete(name_, 1, 1);
{$IFDEF USENORMALNETSEND}
msgname := WideString(name_);
msgtext := WideString(text_);
Result := NetMessageBufferSend(nil, PWideChar(msgname), nil,
PWideChar(msgtext), sizeof(WideChar) * Length(msgtext));
{$ELSE}
case NetMessageBufferSendSubstA(name_ , name_, fromsaha, text_) of
True: result := ERROR_SUCCESS;
else
result := ERROR_ACCESS_DENIED;
end;
{$ENDIF}
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Label7.Caption := IdIPWatch1.LocalName;
Label8.Caption := IdIPWatch1.LocalIP;
ComboBox1.Text := Label7.Caption;
ScanNetworkResources(RESOURCETYPE_DISK, RESOURCEDISPLAYTYPE_SERVER,
ComboBox1.Items);
end;
procedure TForm1.CaptionBox1Close(Sender: TObject);
begin
Application.Terminate;
end;
procedure TForm1.ImageButton2Click(Sender: TObject);
begin
Memo1.Clear;
Memo1.SetFocus;
end;
procedure TForm1.ImageButton1Click(Sender: TObject);
begin
if Memo1.Text='' then
begin
ShowMessage('Isi dulu pesannya bozzz....');
Memo1.Clear;
end
else
begin
Fromsaha:=Edit1.Text;
NetSendMsg(ComBobox1.Text, Memo1.Text);
ImageButton1.Enabled:=False;
Edit1.Text := 'Dhanie';
Memo1.SetFocus;
Memo1.Clear;
end;
end;
procedure TForm1.Memo1Change(Sender: TObject);
begin
If Memo1.Text='' then
ImageButton1.Enabled:=False
else
ImageButton1.Enabled:=True;
end;
procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
If key=#13 then
ImageButton1.Click;
end;
end.
Syntax Highlighted with http://delphi-id.org/syntax
Ok sekarang buat unit barudengan nama kirim.pas
unit kirim;
interface
uses
Windows;
implementation
uses NetSend;
type
PNetResourceArray = ^TNetResourceArray;
TNetResourceArray = array[0..100] of TNetResource;
function CreateNetResourceList(ResourceType: DWord;
NetResource: PNetResource;
out Entries: DWord;
out List: PNetResourceArray): Boolean;
var
EnumHandle: THandle;
BufSize: DWord;
Res: DWord;
begin
Result := False;
List := Nil;
Entries := 0;
if WNetOpenEnum(RESOURCE_GLOBALNET,
ResourceType,
0,
NetResource,
EnumHandle) = NO_ERROR then begin
try
BufSize := $4000; // 16 kByte
GetMem(List, BufSize);
try
repeat
Entries := DWord(-1);
FillChar(List^, BufSize, 0);
Res := WNetEnumResource(EnumHandle, Entries, List, BufSize);
if Res = ERROR_MORE_DATA then
begin
ReAllocMem(List, BufSize);
end;
until Res ERROR_MORE_DATA;
Result := Res = NO_ERROR;
if not Result then
begin
FreeMem(List);
List := Nil;
Entries := 0;
end;
except
FreeMem(List);
raise;
end;
finally
WNetCloseEnum(EnumHandle);
end;
end;
end;
procedure ScanNetworkResources(ResourceType, DisplayType:
DWord; List: TStrings);
procedure ScanLevel(NetResource: PNetResource);
var
Entries: DWord;
NetResourceList: PNetResourceArray;
i: Integer;
begin
if CreateNetResourceList(ResourceType, NetResource,
Entries, NetResourceList) then try
for i := 0 to Integer(Entries) - 1 do begin
if (DisplayType = RESOURCEDISPLAYTYPE_GENERIC) or
(NetResourceList[i].dwDisplayType = DisplayType) then begin
List.AddObject(NetResourceList[i].lpRemoteName,
Pointer(NetResourceList[i].dwDisplayType));
end;
if (NetResourceList[i].dwUsage and RESOURCEUSAGE_CONTAINER) 0 then
ScanLevel(@NetResourceList[i]);
end;
finally
FreeMem(NetResourceList);
end;
end;
begin
ScanLevel(Nil);
end;
function NetMessageBufferSendSubstA(ServerName, MsgName,
FromName, Msg: AnsiString): Boolean;
{.$DEFINE SYNCHRONOUS}
const
szService = '\\mailslot\\messngr';
MaxBufLen = $700;
var
hFile: THandle;
WrittenBytes: DWORD;
{$IFNDEF SYNCHRONOUS}
ovs: OVERLAPPED;
EventName: AnsiString;
{$ENDIF}
begin
Result := False;
if Length(Msg) * sizeof(AnsiChar) > MaxBufLen then
SetLength(Msg, MaxBufLen div sizeof(AnsiChar));
{$IFNDEF SYNCHRONOUS}
EventName := 'NetSendEvent_' + ServerName;
{$ENDIF}
ServerName := '\\\\' + Servername + szService;
hFile := CreateFileA(
@ServerName[1], GENERIC_WRITE, FILE_SHARE_READ, nil, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL or FILE_FLAG_NO_BUFFERING or FILE_FLAG_OVERLAPPED, 0);
if hFile INVALID_HANDLE_VALUE then
try
Msg := FromName + #0 + MsgName + #0 + Msg;
{$IFNDEF SYNCHRONOUS}
ovs.hEvent := CreateEventA(nil, True, False, @EventName[1]);
WriteFile(hFile, Pointer(Msg)^, Length(Msg), WrittenBytes, @ovs);
{$ELSE}
WriteFile(hFile, Pointer(Msg)^, Length(Msg), WrittenBytes, nil);
{$ENDIF}
Result := GetLastError = ERROR_IO_PENDING;
finally
{$IFNDEF SYNCHRONOUS}
if WaitForSingleObject(ovs.hEvent, INFINITE) WAIT_TIMEOUT then
{$ENDIF}
CloseHandle(hFile);
end;
end;
function NetMessageBufferSendSubstW(ServerName, MsgName,
FromName, Msg: WideString): Boolean;
begin
result := NetMessageBufferSendSubstA(ServerName, MsgName, FromName, Msg);
end;
function NetSendMsg(name_, text_: string): DWORD;
{$IFDEF USENORMALNETSEND}
var
msgname: WideString;
msgtext: WideString;
{$ENDIF}
begin
while name_[1] = '\\' do delete(name_, 1, 1);
{$IFDEF USENORMALNETSEND}
msgname := WideString(name_);
msgtext := WideString(text_);
Result := NetMessageBufferSend(nil, PWideChar(msgname), nil,
PWideChar(msgtext), sizeof(WideChar) * Length(msgtext));
{$ELSE}
case NetMessageBufferSendSubstA(name_ , name_, fromsaha, text_) of
True: result := ERROR_SUCCESS;
else
result := ERROR_ACCESS_DENIED;
end;
{$ENDIF}
end;
end.
Syntax Highlighted with http://delphi-id.org/syntax
Download here..
klo sudah beres lalu uses unit tersebut dengan cara File|use unit|lalu pilih yang kirim.pas.
Klo sesuai sehh begini hasilnya..
Hasil pesannya sbb…
Ok Selesai…wakakakaaka selamat mencoba…


Puanjang buanget mas… he he,
Makasih ah,
mas saya lom sempat update lagi tapi saya udah update buat programnya bisa donlot di
source ->> http://amarullah.110mb.com/donlot/netsendF/SourceF.zip
Programnya ->>
http://amarullah.110mb.com/donlot/netsendF/ExeF.zip
tar ya mas soal donlodnya lom di update lagi,hihihi lagi MOD=MAles,hehehehee