2

我正在尝试获取有关运行我的应用程序的计算机/平板电脑的信息。这是出于分析目的。具体来说,我想知道制造商和型号。

理想情况下,我会得到如下信息:

Manufacturer: Toshiba
Model: Satellite S850-BT3N22 

但我会拿走我能得到的任何东西。我花了一些时间尝试自己的解决方案以及在 SO 上找到它,但我无法找到解决方案。

我花了一些时间试图得到这个:

var hardwareToken = Windows.System.Profile.HardwareIdentification.getPackageSpecificToken(null);
var idReader = Windows.Storage.Streams.DataReader.fromBuffer(hardwareToken.id);        
var idArray = new Array(hardwareToken.id.length);
idReader.readBytes(idArray);

所以现在 idArray 是一个整数数组。我试过将此字节数组转换为字符串,但它会将其转换为一堆看起来像汉字的东西。我不认为这就是这个 hardwareToken.id 的目的。以下是 idReader 数组的 javascript 控制台的示例输出:

idArray.toString();
"3,0,26,139,5,0,90,224,6,0,1,0,4,0,246,50,1,0,248,181,2,0,80,124,9,0,250,137"

我尝试的下一件事是在此处从 msdn 模拟“设备枚举示例”:http: //code.msdn.microsoft.com/windowsapps/Device-Enumeration-Sample-a6e45169

从这里我可以看到我的网络上的几个不同的设备,我可以得到 System.ItemNameDisplay 和 System.Devices.ModelName,但是我看不到区分哪个设备是计算机的方法。它提供了所有的 Pnp 设备。

如果有人可以帮助我获得这些信息,我将不胜感激。

4

3 回答 3

0

您可以尝试使用BrowserSpy 之类的工具来获取此信息。他们几乎处于该领域的前沿。

据我所知,没有纯粹的 Javascript 方法可以做到这一点。

您可以在此处找到更多信息。

就您指定的呼叫而言,您可以找到以下信息:

CPU ID of the processor
Size of the memory
Serial number of the disk device
Network adapter (such as NIC MAC address)
Audio adapter
Docking station
Bluetooth address
Mobile broadband device ID
BIOS
于 2013-02-12T01:39:18.927 回答
0

我得到了一个答案:

使用 Windows.Security.ExchangeActiveSyncProvisioning.EasClientDeviceInformation,如下所示:

var deviceInfo = new Windows.Security.ExchangeActiveSyncProvisioning.EasClientDeviceInformation();
var manufacturer = deviceInfo.systemManufacturer;
var productName = deviceInfo.systemProductName;

这是样本数据:

manufacturer: SAMSUNG ELECTRONICS CO., LTD.
productName: 700Z3A/700Z4A/700Z5A/700Z5B
于 2013-02-14T00:05:33.263 回答
0

我今天不得不处理这个。关键是查看 DeviceContainer 上的 System.Devices.LocalMachine 属性,如果设备代表本地系统,则该属性为真(请参阅设备容器属性)。

下面是一个基于 MS 设备枚举示例的简单粗暴的 C# 示例;希望获取该示例的 JS 版本并以相同的方式对其进行调整应该很容易:

string[] properties = { "System.Devices.LocalMachine", "System.ItemNameDisplay", "System.Devices.ModelName", "System.Devices.ModelNumber", "System.Devices.Manufacturer" };
var containers = await PnpObject.FindAllAsync(PnpObjectType.DeviceContainer, properties);

foreach (PnpObject container in containers)
{
    bool localMachine = (bool)container.Properties["System.Devices.LocalMachine"];
    if (localMachine)
    {
        string name = (string)container.Properties["System.ItemNameDisplay"];
        string modelName = (string)container.Properties["System.Devices.ModelName"];
        string modelNumber = (string)container.Properties["System.Devices.ModelNumber"];
        string manufacturer = (string)container.Properties["System.Devices.Manufacturer"];
        // do as you like now...
        break;
    }
}
于 2013-03-06T20:58:46.237 回答