C# 开发智能设备 怎么获取本机(PDA) 的mac地址

mishixiaosenlin 2011-04-26 11:24:29
用VS2008 C#开发的智能设备怎么 获取智能设备的mac地址,或者什么唯一标识都行,就是获取一个PDA的唯一标识,各位大虾 帮帮忙,还有就是PDA的系统是win ce 之前用的System.Management; 不好使,就不要说了,是能设备根本就掉不出来这个方法.
...全文
334 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
mishixiaosenlin 2011-05-09
  • 打赏
  • 举报
回复
有米有人能给一个明确的方法?
mishixiaosenlin 2011-05-05
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 going1981 的回复:]

C# code

public static class DeviceInfo
{
[DllImport("coredll.dll")]
private extern static int GetDeviceUniqueID([In, Out] byte[] appdata,
……
[/Quote]

coredll.dll里好像没有GetDeviceUniqueID这个接口,调用不了啊~
mishixiaosenlin 2011-05-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xiaoyuzi 的回复:]

你可以用windows api来取得设备id

C# code

[DllImport("coredll.dll", EntryPoint = "KernelIoControl", SetLastError = true)]
private extern static bool KernelIoControl(Int32 IoControlCode, Int……
[/Quote]

这个是调用的设备的ID是吧,是唯一标识不能改变的是不是?
一只熊猫 2011-05-04
  • 打赏
  • 举报
回复

public static class DeviceInfo
{
[DllImport("coredll.dll")]
private extern static int GetDeviceUniqueID([In, Out] byte[] appdata,
int cbApplictionData,
int dwDeviceIDVersion,
[In, Out] byte[] deviceIDOuput,
out uint pcbDeviceIDOutput);
/// <summary>
/// 获取设备ID
/// </summary>
/// <returns></returns>
public static string GetDeviceId()
{
byte[] buffer = GetDeviceID("MyAppString");
StringBuilder sb = new StringBuilder();
for (int x = 0; x < buffer.Length; x++)
{
sb.Append(string.Format("{0:x2}", buffer[x]));
}
return sb.ToString().ToUpper();
}


private static byte[] GetDeviceID(string AppString)
{
byte[] AppData = new byte[AppString.Length];
for (int count = 0; count < AppString.Length; count++)
AppData[count] = (byte)AppString[count];
int appDataSize = AppData.Length;
byte[] DeviceOutput = new byte[20];
uint SizeOut = 20;
GetDeviceUniqueID(AppData, appDataSize, 1, DeviceOutput, out SizeOut);
return DeviceOutput;
}
}


我有个项目用的是段,也是在csdn.net上找的。。。。。
xiaoyuzi 2011-05-04
  • 打赏
  • 举报
回复
你可以用windows api来取得设备id


[DllImport("coredll.dll", EntryPoint = "KernelIoControl", SetLastError = true)]
private extern static bool KernelIoControl(Int32 IoControlCode, IntPtr InputBuffer, Int32 InputBufferSize, byte[] OutputBuffer, Int32 OutputBufferSize, ref Int32 BytesReturned);

private static Int32 FILE_DEVICE_HAL = 0x00000101;
private static Int32 IOCTL_HAL_GET_DEVICEID =
((FILE_DEVICE_HAL) << 16) | ((0x0) << 14)
| ((21) << 2) | (0x0);


public string GetPDASerialNumber()
{
byte[] outputBuffer = new byte[256];
Int32 outputBufferSize = outputBuffer.Length;
Int32 bytesReturned = 0;

bool retVal = KernelIoControl(IOCTL_HAL_GET_DEVICEID, IntPtr.Zero, 0, outputBuffer, outputBufferSize, ref bytesReturned);

// If the request failed, exit the method now
if (retVal == false)
{
return String.Empty;
}

Int32 presetIdOffset = BitConverter.ToInt32(outputBuffer, 4);
Int32 platformIdOffset = BitConverter.ToInt32(outputBuffer, 0xc);
Int32 platformIdSize = BitConverter.ToInt32(outputBuffer, 0x10);

StringBuilder sb = new StringBuilder();
sb.Append(String.Format(CultureInfo.InvariantCulture, "{0:X8}-{1:X4}-{2:X4}-{3:X4}-",
BitConverter.ToInt32(outputBuffer, presetIdOffset),
BitConverter.ToInt16(outputBuffer, presetIdOffset + 4),
BitConverter.ToInt16(outputBuffer, presetIdOffset + 6),
BitConverter.ToInt16(outputBuffer, presetIdOffset + 8)));

for (int i = platformIdOffset; i < platformIdOffset + platformIdSize; i++)
{
sb.Append(String.Format(CultureInfo.InvariantCulture, "{0:X2}", outputBuffer[i]));
}

// return the device id string
return sb.ToString();
}

mishixiaosenlin 2011-05-04
  • 打赏
  • 举报
回复
几天没有关注这个帖子了,自己顶一顶
mishixiaosenlin 2011-05-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 going1981 的回复:]

手头没得测试环境,你自己试试行不行吧。

先添加引用 OpenNetCF.Net

C# code
string netinfo = "";
foreach (INetworkInterface item in NetworkInterface.GetAllNetworkInterfaces())
{
……
[/Quote]


现在调出的都是网络的东西,我想调用一个pda中唯一标识,那个属性能实现?
一只熊猫 2011-04-26
  • 打赏
  • 举报
回复
手头没得测试环境,你自己试试行不行吧。

先添加引用 OpenNetCF.Net

            string netinfo = "";
foreach (INetworkInterface item in NetworkInterface.GetAllNetworkInterfaces())
{
netinfo += item.Name + "\r\n";
netinfo += item.CurrentIpAddress + "\r\n";
netinfo += item.GetPhysicalAddress() + "\r\n";
}
MessageBox.Show(netinfo);
 .NET Framework 是支持生成和运行下一代应用程序和 XML Web services 的内部 Windows 组件。.NET Framework 旨在实现下列目标:   提供一个一致的面向对象的编程环境,而无论对象代码是在本地存储和执行,还是在本地执行但在 Internet 上分布,或者是在远程执行的。   提供一个将软件部署和版本控制冲突最小化的代码执行环境。   提供一个可提高代码(包括由未知的或不完全受信任的第三方创建的代码)执行安全性的代码执行环境。   提供一个可消除脚本环境或解释环境的性能问题的代码执行环境。   使开发人员的经验在面对类型大不相同的应用程序(如基于 Windows 的应用程序和基于 Web 的应用程序)时保持一致。   按照工业标准生成所有通信,以确保基于 .NET Framework 的代码可与任何其他代码集成。   .NET Framework 具有两个主要组件:公共语言运行库和 .NET Framework 类库。公共语言运行库是 .NET Framework 的基础。您可以将运行库看作一个在执行时管理代码的代理,它提供内存管理、线程管理和远程处理等核心服务,并且还强制实施严格的类型安全以及可提高安全性和可靠性的其他形式的代码准确性。事实上,代码管理的概念是运行库的基本原则。以运行库为目标的代码称为托管代码,而不以运行库为目标的代码称为非托管代码。.NET Framework 的另一个主要组件是类库,它是一个综合性的面向对象的可重用类型集合,您可以使用它开发多种应用程序,这些应用程序包括传统的命令行或图形用户界面 (GUI) 应用程序,也包括基于 ASP.NET 所提供的最新创新的应用程序(如 Web 窗体和 XML Web services)。   .NET Framework 可由非托管组件承载,这些组件将公共语言运行库加载到它们的进程中并启动托管代码的执行,从而创建一个可以同时利用托管和非托管功能的软件环境。.NET Framework 不但提供若干个运行库宿主,而且还支持第三方运行库宿主的开发。   .NET Framework是Microsoft为开发应用程序而创建的一个富有革命性的新平台。   这句话最有趣的地方是它的含糊不清,但这是有原因的。首先,注意这句话没有说“在Windows操作系统上开发应用程序”。尽管.NET Framework的Microsoft版本运行在Windows操作系统上,但以后将推出运行在其他操作系统上的版本,例如Mono,它是.NET Framework的开发源代码版本(包含一个C#编译器),该版本可以运行在几个操作系统上,包括各种Linux版本和Mac OS。许多这类项目正在开发,在读者阅读本书时可能就已发布了。另外,还可以在个人数字助手(PDA)类设备和一些智能电话上使用Microsoft .NET Compact Framework(基本上是完整 .NET Framework的一个子集)。使用.NET Framework的一个主要原因是它可以作为集成各种操作系统的方式。   另外,上面给出的.NET Framework定义并没有限制应用程序的类型。这是因为本来就没有限制。.NET Framework可以创建Windows应用程序、Web应用程序、Web服务和其他各种类型的应用程序。   .NET Framework的设计方式保证它可以用于各种语言,包括本书要介绍的C#语言,以及C++、Visual Basic、JScript,甚至一些旧的语言,如COBOL。为此,还推出了这些语言的.NET版本,目前还在不断推出更多的.NET版本的语言。所有这些语言都可以访问.NET Framework,它们还可以彼此交互。C#开发人员可以使用Visual Basic程序员编写的代码,反之亦然。   所有这些提供了意想不到的多样性,这也是.NET Framework具有诱人前景的部分原因。.NET Framework的内容   .NET Framework主要包含一个非常大的代码库,可以在客户语言(如C#)中通过面向对象编程技术(OOP)来使用这些代码。这个库分为不同的模块,这样就可以根据希望得到的结果来选择使用其中的各个部分。例如,一个模块包含Windows应用程序的构件,另一个模块包含联网的代码块,还有一个模块包含Web开发的代码块。一些模块还分为更具体的子模块,例如在Web开发模块中,有用于建立Web服务的子模块。   其目的是,不同的操作系统可以根据自己的特性,支持其中的部分或全部模块。例如,PDA支持所有的核心.NET功能,但不需要某些更深奥的模块。   部分.NET Framework库定义了一些基本类型。类型是数据的一种表达方式,指定其中最基础的部分(例如32位带符号的整数),以便使用.NET Framework在各种语言之间进行交互操作。这称为通用类型系统(Common Type System,CTS)。   除了支持这个库以外,.NET Framework还包含.NET公共语言运行库(Common Language Runtime,CLR),它负责管理用.NET库开发的所有应用程序的执行。

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧