Borland C++ Builder FAQ - Как послать сообщение компьютеру в локальной сети
ОГЛАВЛЕНИЕ
Страница 68 из 127
Как послать сообщение компьютеру в локальной сети
// Для того чтобы послать сообщение компьютеру в локальной сети
// напишите следующие функции:
bool SendNetMessage(AnsiString Komp, AnsiString Mes)
{
AnsiString From;
char CompName[10];
DWORD size=10;
//Откуда
if(!GetComputerName(CompName,&size)) return false;
From=CompName;
if(Mes.Length()==0) return false;
HANDLE hSlot = CreateFile(("\\\\"+Komp+"\\mailslot\\messngr").c_str(),
GENERIC_WRITE, FILE_SHARE_READ, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hSlot == INVALID_HANDLE_VALUE) return false;
DWORD cb=0;
BOOL ret;
char *buf=new char[From.Length()+1+Komp.Length()+1+Mes.Length()+1];
//1. From
memcpy(&buf[cb],From.c_str(),From.Length()+1);
cb +=From.Length()+1; //+1 на конце должен быть 0
//2. To
memcpy(&buf[cb],Komp.c_str(),Komp.Length()+1);
cb +=Komp.Length()+1;
//3. Само сообщение
memcpy(&buf[cb],Mes.c_str(),Mes.Length()+1);
cb +=Mes.Length()+1;
//ConvertToDos
CharToOemBuff(buf,buf,cb);
ret=WriteFile(hSlot, buf,cb, &cb, NULL);
CloseHandle(hSlot);
delete[] buf;
if(!ret) return false;
return true;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString Komp,Mes;
//Кому
Komp=Edit1->Text; //Имя компьютера
//Сообщение
Mes=Edit2->Text; //Message
bool ret;
int Kol=UpDown1->Position;
for(int i=1;i<=Kol;i++)
{
ret=SendNetMessage(Komp,Mes);
}
}