VBScript+ActiveX. Параметры железа

Обсуждение вопросов клиентского программирования.

Модератор: Duncon

toxicll
Сообщения: 4
Зарегистрирован: 10 апр 2007, 17:55

Помогите, плз.
Такое задание:
Нужно каждый раз, когда юзер заходит на сайт, определять параметры его железа (модель винта, материнку, проц...) и передавать на сервер в базу данных.
есть такой скрипт, который выводит винты.. и то - не модель, а объём и метку тома. но это далеко не то:

<html>
<head>
<title>Вывод списка дисков на страницу</title>
<style>
body {font-size:12px; font-family:verdana; line-height:20px;}
</style>
<script>
function ShowDriveList()
{
var fso, s, n, e, x, ds;
fso = new ActiveXObject("Scripting.FileSystemObject");
e = new Enumerator(fso.Drives);
s = "";
for (; !e.atEnd(); e.moveNext())
{
x = e.item();
s = s + x.DriveLetter;
s += " - ";
if (x.DriveType == 3)
n = x.ShareName;
else if (x.IsReady)
{ n = x.VolumeName; if (n=="") n="[Нет метки тома]"
ds=x.TotalSize;
ds=String(ds/(1024*1024*1024));
ds=ds.substring(0,4) }
else
{ n = "[Диск отсутствует]";
ds=0}
s += n +" - " + ds + " Гб
";
}
document.write(s);
}
</script>
</head>
<body>
<div>
<script>
ShowDriveList()
</script>
</div>
</body>
</html>
Аватара пользователя
__Yuri__
Сообщения: 140
Зарегистрирован: 02 ноя 2006, 17:17
Контактная информация:

Если у вас получится это сделать - при заходе пользователя на web-site считывать параметры железа пользователя и сохранять их на сервере, то Биллу Гейтсу следует срочно встретиться с главными смотрящими за FireFox и ген.директором Opera и всем вместе бежать в аптеку за йадом или убить себя об стену.

Удаленно Вы можете считать только имя и версию браузера и операционки, а также IP-адрес юсера ну и еще парочку пустяков.
Приведенный Вами скрипт сработает на локальном компе, но не в страничке, загруженной с сервака.

Для реализации поставленной Вами задачи нужно что бы заходящие к Вам на сайт юсеры скопировали себе на компы программку, которая будет собирать сведения и передавать их в интернет и запустили ее. Не забудьте, что понадобится несколько вариантов таких программок для разных операционок.
toxicll
Сообщения: 4
Зарегистрирован: 10 апр 2007, 17:55

__Yuri__
Скрипт работает (если безопасность в браузере выставить на минимум).
Сайт внутренний, его юзают единицы внутри компании, которых можно предупредить - отключить безопасность в браузере.
вот например по этой ссылке (скрипт, который был выше) -
http://toxicll.narod.ru/drivelist.html
если смотреть через эксплорер, в котором безопасность на нуле, то будут выводиться ваши винты, их размер и метки тома.
и вот если задать в этом скрипте - сохранять эти данные в файл - вот вам и то, что нужно.
только нужно ещё куча параметров - модель винта, материнки, проца, оперативка...
по-моему, это реально. юзеров же можно предупредить...
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Вообще-то уже давно, эти реализации написанны, ActiveX хорошая штука, над виндами можно жестко поглумиться, но вот чтоб скрипт запустился требуется разрешение пользователя или действительно снятый флажок в настройках броузера..
alexx
Сообщения: 116
Зарегистрирован: 02 июл 2004, 22:29
Откуда: Hamburg

Тoгда бepитe WMI Classes:

http://msdn2.microsoft.com/en-us/library/aa394132.aspx

Тaм вce ecть. Пoжaлyй нe cтoит нaпpягaть browser. WMI кoннeктятcя и к remote:

Set objWMIService = GetObject("winmgmts:\\YourMachine\root\cimv2")
-------------
Лень - двигатель прогресса!
Аватара пользователя
__Yuri__
Сообщения: 140
Зарегистрирован: 02 ноя 2006, 17:17
Контактная информация:

Ясно, это ж другое дело - со своими пользователями можно что угодно творить, в том числе и развитыми средствами типа HP OpenView.
Я думал, что задача - собирать инфу по железу с зашедших на сайт под своими любимыми браузерами и ничего не подозревающими людей.
toxicll
Сообщения: 4
Зарегистрирован: 10 апр 2007, 17:55

написал такой скрипт на ЯваСкрипте:

<script id=clientEventHandlersJS language=javascript>
<!--

function opa() {
var locator = new ActiveXObject ("WbemScripting.SWbemLocator");
var service = locator.ConnectServer(".");
var properties = service.ExecQuery("SELECT * FROM Win32_BaseBoard");
var properties2 = service.ExecQuery("SELECT * FROM Win32_Processor");
var properties3 = service.ExecQuery("SELECT * FROM Win32_OnBoardDevice");
var e = new Enumerator (properties);
var e2 = new Enumerator (properties2);
var e3 = new Enumerator (properties3);
var fso, ts;
var ForWriting= 2;
fso = new ActiveXObject("Scripting.FileSystemObject");
ts = fso.OpenTextFile("d:\\test.txt", ForWriting, true);
ts.WriteLine("ЖЕЛЕЗО");
ts.WriteBlankLines(1) ;
for (;!e.atEnd();e.moveNext ())
{
var p = e.item ();
ts.WriteLine("МАТЬ") ;
ts.WriteLine(p.HostingBoard) ;
ts.WriteLine(p.Manufacturer) ;
ts.WriteLine(p.PoweredOn) ;
ts.WriteLine(p.Product) ;
ts.WriteLine(p.SerialNumber) ;
ts.WriteLine(p.Version) ;
ts.WriteLine(p.Product) ;
ts.WriteBlankLines(1) ;
};
for (;!e2.atEnd();e2.moveNext ())
{
var p = e2.item ();
ts.WriteBlankLines(1) ;
ts.WriteLine("ПРОЦ") ;
ts.WriteLine(p.Caption) ;
ts.WriteLine(p.DeviceID) ;
ts.WriteLine(p.Name) ;
ts.WriteLine(p.CpuStatus) ;
ts.WriteLine(p.Availability) ;
ts.WriteLine(p.Level) ;
ts.WriteLine(p.ProcessorID) ;
ts.WriteLine(p.SystemName) ;
ts.WriteLine(p.ProcessorType) ;
ts.WriteBlankLines(1) ;
};
ts.WriteBlankLines(1) ;
ts.WriteLine("Девайс") ;
for (;!e3.atEnd();e3.moveNext ())
{
var p = e3.item ();
ts.WriteLine(p.Description) ;
ts.WriteLine(p.DeviceType) ;
ts.WriteLine(p.Enabled) ;
ts.WriteLine(p.Tag) ;
ts.WriteBlankLines(1) ;
};
ts.Close();
}

//-->
</script>

Только он создаёт файл на клиенте, а не на сервере.
Как мне создать файл на сервере?
Аватара пользователя
__Yuri__
Сообщения: 140
Зарегистрирован: 02 ноя 2006, 17:17
Контактная информация:

Надо передать данные склиента на сервер, например через XMLHTTPRequest

function getXMLHTTPRequest()
{
var xRequest=null;
if (typeof ActiveXObject != "undefined")
xRequest=new ActiveXObject ("Microsoft.XMLHTTP");
return xRequest;
}

function sendRequest(url,params)
{
var HttpMethod="POST";
var req=getXMLHTTPRequest();

if (req)
{
req.open(HttpMethod,url,true);
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
req.send(params);
}


На сервере инсталлируется PHP - он бесплатный и реально супер.

Создаешь файл на сервере что-то типа blablabla.php:

<?
// Дописываем в файл данные о зашедших под IE пользователях
$fp = fopen("counter.txt","r+");

$c = // читаешь переменные POST
fputs($fp,$c);
fclose($fp);
?>
toxicll
Сообщения: 4
Зарегистрирован: 10 апр 2007, 17:55

__Yuri__

немножко недопонял - что делать с этими функциями (XMLHTTPRequest)...
куда их пихать? :) )
alexx
Сообщения: 116
Зарегистрирован: 02 июл 2004, 22:29
Откуда: Hamburg

Если внутри компании то так:

Запускайте скрипт на сервере

var service = locator.ConnectServer("ClientPcName");

и по очереди все РС


Или так:

ts = fso.OpenTextFile("\\\\MyServerName\\MyShare\\test.txt", ForWriting, true);
-------------
Лень - двигатель прогресса!
Ответить