如何使用 RAPI.Invoke 从桌面应用程序调用设备 winapi 方法
How to use RAPI.Invoke to call device winapi method from Desktop app
我需要从桌面应用程序获取设备 ID,其中设备是一个 Windows 基于 CE 5.0 的手持终端,并且它连接到 PC。
从设备内的应用程序获取此信息很容易,我可以使用任何 GetDeviceUniqueID or 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;
}
但我需要从桌面应用程序中获取它。
Windows 移动 5.X SDK 中有一个示例可以从桌面应用程序获取此 ID。由于我使用的是 Windows CE,该样本没有提供 ID(它适用于 windows 移动设备)。
我相信 可能 从桌面应用程序使用 RAPI.Invoke() 方法(或 Opennetcf RAPI)使用上述方法。但是我不知道如何将 RAPI.Invoke 与多参数 WinApi 方法一起使用,例如GetDeviceUniqueID .
我有一个示例代码,还包括 WinApi 方法的 C# 签名作为注释:
//[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
}
也有类似的问题here但是没有提供任何解决方案
我找到了答案here。简而言之;没有直接的方法,我需要用 C 创建一个 Win32 dll,在其中调用 WINAPI 并将其部署到 \Windows 文件夹。之后我可以将它与 RAPI.Invoke()
.
一起使用
此外 this 是包含实现的文章 link。
我需要从桌面应用程序获取设备 ID,其中设备是一个 Windows 基于 CE 5.0 的手持终端,并且它连接到 PC。
从设备内的应用程序获取此信息很容易,我可以使用任何 GetDeviceUniqueID or 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;
}
但我需要从桌面应用程序中获取它。
Windows 移动 5.X SDK 中有一个示例可以从桌面应用程序获取此 ID。由于我使用的是 Windows CE,该样本没有提供 ID(它适用于 windows 移动设备)。
我相信 可能 从桌面应用程序使用 RAPI.Invoke() 方法(或 Opennetcf RAPI)使用上述方法。但是我不知道如何将 RAPI.Invoke 与多参数 WinApi 方法一起使用,例如GetDeviceUniqueID .
我有一个示例代码,还包括 WinApi 方法的 C# 签名作为注释:
//[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
}
也有类似的问题here但是没有提供任何解决方案
我找到了答案here。简而言之;没有直接的方法,我需要用 C 创建一个 Win32 dll,在其中调用 WINAPI 并将其部署到 \Windows 文件夹。之后我可以将它与 RAPI.Invoke()
.
此外 this 是包含实现的文章 link。