crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Привязка к машине, Как на Qt привязаться к параметрам компьютера
dimon1980ddd
  опции профиля:
сообщение 13.12.2009, 18:30
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 35
Регистрация: 13.12.2009
Пользователь №: 1304

Спасибо сказали: 0 раз(а)




Репутация:   0  


Как на Qt привязаться к параметрам компьютера например к сетевой или винчестеру... Желательно конечно кроссплатформенно, но для начала можно под Windows. Если использовать VC, то примеры есть и вроде бы понятно, но необходимо использовать специальные API функции... Возможно ли их использование в QT? Т.е например подключить "windows.h" и вызвать его функции?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 13.12.2009, 18:48
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(dimon1980ddd @ 13.12.2009, 21:30) *
Т.е например подключить "windows.h" и вызвать его функции?
вроде в Qt, следует вместо прямого подключения этого заголовочника использовать:
#include "qt_windows.h"
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 13.12.2009, 19:34
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


В Qt нет подобных средств и из тем, которые я видел можно сделать заключение, что всё нужно делать своими руками через ОС зависимый API и готовых бесплатных кроссплатформенных библиотек, которые это могут делать не существует.

http://www.prog.org.ru/topic_10612_0.html
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DIMEDROLL
  опции профиля:
сообщение 13.12.2009, 21:52
Сообщение #4


Участник
**

Группа: Участник
Сообщений: 165
Регистрация: 28.9.2008
Из: Киев
Пользователь №: 304

Спасибо сказали: 23 раз(а)




Репутация:   0  


dimon1980ddd
а что в твоих словах означает "привязаться к машине"?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
maxvanceffer
  опции профиля:
сообщение 13.12.2009, 22:03
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 72
Регистрация: 30.5.2009
Из: Moldova
Пользователь №: 790

Спасибо сказали: 0 раз(а)




Репутация:   0  


Действительно что такое привязаться ? Большинство, часто используемых функций связанные с ос. Есть в qt. Такие как узнать имя текушего пользователя, имя машины и т.д. !!! Что именно тебе надо?

Сообщение отредактировал maxvanceffer - 13.12.2009, 22:03
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
dimon1980ddd
  опции профиля:
сообщение 13.12.2009, 23:31
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 35
Регистрация: 13.12.2009
Пользователь №: 1304

Спасибо сказали: 0 раз(а)




Репутация:   0  


Под привязаться я имел ввиду простейшую привязку к оборудованию на компьютере... Имя машины конечно хорошо, но слишком легко изменить :-)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 13.12.2009, 23:35
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


С VirtualBox можно изменить даже серийные номера оборудования, виртуально конечно, но ты же не будешь писать драйвера нулевого кольца, а API ОС выдаст те номера, которые подсунет виртуалка. Я еще не видел ни одной игры, которую бы ни взломали. Никакие GameGuard'ы не спасают.

Сообщение отредактировал SABROG - 13.12.2009, 23:36
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
dimon1980ddd
  опции профиля:
сообщение 14.12.2009, 0:05
Сообщение #8


Студент
*

Группа: Участник
Сообщений: 35
Регистрация: 13.12.2009
Пользователь №: 1304

Спасибо сказали: 0 раз(а)




Репутация:   0  


Попробовал 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 );
...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 14.12.2009, 0:39
Сообщение #9


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


-lnetapi32 я думаю.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
dimon1980ddd
  опции профиля:
сообщение 14.12.2009, 23:49
Сообщение #10


Студент
*

Группа: Участник
Сообщений: 35
Регистрация: 13.12.2009
Пользователь №: 1304

Спасибо сказали: 0 раз(а)




Репутация:   0  


Спасибо, все заработало... Вот если вдруг кому понадобиться...

#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());
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.3.2024, 14:42