Borland C++ Builder FAQ - Как послать сообщение компьютеру в локальной сети

ОГЛАВЛЕНИЕ


Как послать сообщение компьютеру в локальной сети

// Для того чтобы послать сообщение компьютеру в локальной сети
// напишите следующие функции:
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);
    }
}