Этого можно достичь с помощью классов Qt, но вам также понадобятся системные инструменты для сбора информации о имени хоста, и эти инструменты отличаются между Linux и окнами. Тем не менее, с помощью простого переключателя препроцессора, мы можем использовать QProcess
назвать правильную, и вытащить из хостов результата с помощью QRegExp
:
// find valid hostnames
QStringList hostnames;
QRegExp hostnameRx("\\\\\\\\(.*)");
QProcess cmd(this);
#ifdef _WIN32
cmd.start("cmd.exe");
cmd.write("net view\r\n");
cmd.write("exit\r\n");
#else
cmd.start("smbtree", QStringList() << "--no-pass");
#endif // _WIN32
cmd.waitForFinished();
while (!cmd.atEnd())
{
QString line = cmd.readLine();
hostnameRx.indexIn(line);
if (!hostnameRx.cap(1).trimmed().isEmpty())
{
hostnames << hostnameRx.cap(1).trimmed();
}
}
Регулярного выражения полоса начала «\\», возвращаемого как net view
и smbtree
, потому что QTcpSocket
соединений принимают имена хостов без него.
Очевидно, что QStringList
может быть использован для заполнения QComboBox
:
QComboBox* box = new QComboBox(this);
box->insertItems(0, hostnames);
Примечание:net view
и smbtree
только собираются показать компьютеры с доступными акциями. Вы можете попробовать nmap
для получения более полного списка живых хостов, но вам нужно будет запускаться с правами администратора, и вы все равно, вероятно, столкнетесь с множеством проблем с брандмауэром.