Как на Qt привязаться к параметрам компьютера например к сетевой или винчестеру... Желательно конечно кроссплатформенно, но для начала можно под Windows. Если использовать VC, то примеры есть и вроде бы понятно, но необходимо использовать специальные API функции... Возможно ли их использование в QT? Т.е например подключить "windows.h" и вызвать его функции?
#include "qt_windows.h"
В Qt нет подобных средств и из тем, которые я видел можно сделать заключение, что всё нужно делать своими руками через ОС зависимый API и готовых бесплатных кроссплатформенных библиотек, которые это могут делать не существует.
http://www.prog.org.ru/topic_10612_0.html
dimon1980ddd
а что в твоих словах означает "привязаться к машине"?
Действительно что такое привязаться ? Большинство, часто используемых функций связанные с ос. Есть в qt. Такие как узнать имя текушего пользователя, имя машины и т.д. !!! Что именно тебе надо?
Под привязаться я имел ввиду простейшую привязку к оборудованию на компьютере... Имя машины конечно хорошо, но слишком легко изменить :-)
С VirtualBox можно изменить даже серийные номера оборудования, виртуально конечно, но ты же не будешь писать драйвера нулевого кольца, а API ОС выдаст те номера, которые подсунет виртуалка. Я еще не видел ни одной игры, которую бы ни взломали. Никакие GameGuard'ы не спасают.
Попробовал qt_windows.h все нормально подключилось.... Также нормально подключился файл #include "NB30.h", скомпилировалось, но линкер выдает ошибку: undefined reference to 'Netbios@4'
Я так понимаю что нужно указать ссылку на netapi.lib или netbios.dll? Но как это сделать пока не догадался -lnetbios не помогло...
Вот кусок кода
....
NCB ncb;
memset( &ncb, 0, sizeof(ncb) );
ncb.ncb_command = NCBRESET;
ncb.ncb_lana_num = 0;
UCHAR uRetCode;
uRetCode = Netbios((NCB*) &ncb );
...
-lnetapi32 я думаю.
Спасибо, все заработало... Вот если вдруг кому понадобиться...
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "qt_windows.h"
#include "NB30.h"
//Подготовим структуру под информацию:
typedef struct _ASTAT_
{
ADAPTER_STATUS adapt;
NAME_BUFFER NameBuff [30];
}Adapter;
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
QString hash()
{
NCB ncb;
memset( &ncb, 0, sizeof(ncb) );
ncb.ncb_command = NCBRESET;
ncb.ncb_lana_num = 0;
UCHAR uRetCode;
uRetCode = Netbios((NCB*) &ncb );
//Код возврата должен быть 0 при нормальном выполнении команды. Его мы и проверим.
if ( uRetCode != 0 )
{
return QString("error NBRESET\r\n");
}
//Для получения адреса используется команда NCBASTAT с параметром - "*". Только перед заполнением блока лучше его обнулить.
ncb.ncb_command = NCBASTAT;
ncb.ncb_lana_num = 0;
memcpy( ncb.ncb_callname,(UCHAR*)"* ", 16);
//Скажем, что буфер это структура адаптера и укажем длину:
Adapter a1;
ncb.ncb_buffer = (unsigned char *) &a1;
ncb.ncb_length = sizeof(a1);
//Так как всё готово можно вызвать команду:
uRetCode = Netbios((NCB*) &ncb );
//И теперь, если все нормально, то есть код возврата и можно посмотреть адрес адаптера:
if ( uRetCode == 0 )
{
QString version;
version = QString("%1.%2").arg(a1.adapt.rev_major).arg(a1.adapt.rev_minor);
QString nettype;
nettype = QString("%1").arg(a1.adapt.adapter_type);
QString address;
address = QString("%1%2%3%4%5%6")\
.arg(a1.adapt.adapter_address[0], 0, 16)\
.arg(a1.adapt.adapter_address[1], 0, 16)\
.arg(a1.adapt.adapter_address[2], 0, 16)\
.arg(a1.adapt.adapter_address[3], 0, 16)\
.arg(a1.adapt.adapter_address[4], 0, 16)\
.arg(a1.adapt.adapter_address[5], 0, 16);
return QString("Address: ") + address.toUpper() +
QString(" Version: ") + version +
QString(" Type: ") + nettype;
}
return "Can't get address";
}
void MainWindow::on_pushButton_clicked()
{
ui->lineEdit->setText(hash());
}
Это ты так MAC адрес получил ?
Через Qt тоже можно: http://doc.trolltech.com/4.6/qnetworkinterface.html#hardwareAddress
в ассистенте смотреть
Declaring Other Libraries
это в qmake Manual
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)