我需要从桌面应用程序获得设备Id,其中设备是一个基于WindowsCE5.0的手持终端,并连接到PC。
从设备中的应用程序获取这些信息很容易,我可以使用任何GetDeviceUniqueID或KernelIoControl WinApi方法,例如:
[DllImport("coredll.dll")]
private extern static int GetDeviceUniqueID([In, Out] byte[] appdata,
int cbApplictionData,
int dwDeviceIDVersion,
[In, Out] byte[] deviceIDOuput,
out uint pcbDeviceIDOutput);
public byte[] GetDeviceID(string AppString)
{
// Call the GetDeviceUniqueID
byte[] AppData = Encoding.Unicode.GetBytes(AppString);
int appDataSize = AppData.Length;
byte[] DeviceOutput = new byte[20];
uint SizeOut = 20;
GetDeviceUniqueID(AppData, appDataSize, 1, DeviceOutput, out SizeOut);
return DeviceOutput;
}但是我需要从桌面应用程序中得到这个。
WindowsMobile5.XSDK中有一个示例可以从桌面应用程序获取这个ID。由于我使用的是Windows,所以该示例不提供ID (用于windows )。

我相信使用RAPI.Invoke()方法(或Opennetcf )从桌面应用程序中使用上述方法是可能的。但我想不出如何将RAPI.Invoke与多参数WinApi方法相结合,例如GetDeviceUniqueID。
我有一个示例代码,其中还包括C#签名的WinApi方法作为注释:
//[DllImport("coredll.dll")]
//private extern static int GetDeviceUniqueID([In, Out] byte[] appdata,
// int cbApplictionData,
// int dwDeviceIDVersion,
// [In, Out] byte[] deviceIDOuput,
// out uint pcbDeviceIDOutput);
private void buttonGetDeviceID_Click(object sender, RoutedEventArgs e)
{
// RAPI
RAPI rapi = new RAPI();
rapi.Connect(true);
// How do I pass several parameters inside a byte[] ?
rapi.Invoke(@"\Windows\coredll.dll", "GetDeviceUniqueID", inputData, out outputData);
//Process outputData
}还有一个类似的问题,这里,但没有提供任何解决方案。
发布于 2015-08-06 06:28:26
我找到了答案,这里。简单地说,没有直接的方法,我需要用C创建一个Win32 dll,其中将调用WINAPI并将其部署到\Windows文件夹。之后,我可以将它与RAPI.Invoke()一起使用。
另外,这是指向包含实现的文章的链接。
https://stackoverflow.com/questions/31831691
复制相似问题