用VS2008 C#开发的智能设备怎么 获取智能设备的mac地址,或者什么唯一标识都行,就是获取一个PDA的唯一标识,各位大虾 帮帮忙,还有就是PDA的系统是win ce 之前用的System.Management; 不好使,就不要说了,是能设备根本就掉不出来这个方法.
解决方案 »
- FileStream的Read中的offset为什么只能从0开始
- 问个幼稚的问题。C#能直接写网页吗?
- 对于泛型的一些疑问
- 关于“自定义控件”的问题 ----------
- 利用partial class将一个类写在两个文件里有什么好处
- 高手推荐几个软件建模的工具,谢谢!
- 修改hashtable的value值的问题
- 急~~~~DataTable修改问题,如何获取[行,列]中原来的值??
- C# WinForm在新线程中动态创建控件时,gif图动不动
- if (!this.IsPostBack)的怪问题
- strCmd = "****" 里面用变量。
- 如何对JPG图片进行有效性校验,判断是否是不是一副有效图片
foreach (INetworkInterface item in NetworkInterface.GetAllNetworkInterfaces())
{
netinfo += item.Name + "\r\n";
netinfo += item.CurrentIpAddress + "\r\n";
netinfo += item.GetPhysicalAddress() + "\r\n";
}
MessageBox.Show(netinfo);
[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();
}
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上找的。。
coredll.dll里好像没有GetDeviceUniqueID这个接口,调用不了啊~