Je dois obtenir l'ID du périphérique à partir d'une application de bureau, où Périphérique est un terminal portable Windows CE 5.0 et est connecté au PC.Comment utiliser RAPI.Invoke pour appeler la méthode winapi du périphérique à partir de l'application Bureau
Obtenir ces informations à partir d'une application au sein de l'appareil est facile, je peux utiliser l'une des GetDeviceUniqueID ou KernelIoControl méthodes de winapi par exemple:
[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;
}
Mais je dois obtenir ce à partir de l'application de bureau.
Il existe un exemple dans Windows Mobile 5.X SDK pour obtenir cet ID à partir de l'application Desktop. Depuis que j'utilise Windows CE cet exemple ne donne pas d'identifiant (c'est pour Windows Mobile).
je crois qu'il est possible utiliser ledit procédé d'application de bureau en utilisant la méthode RAPI.Invoke() (ou OpenNETCF RAPI). Mais je ne peux pas comprendre comment utiliser RAPI.Invoke avec la méthode WinApi multi-paramètres, par ex. GetDeviceUniqueID.
J'ai un exemple de code, inclus également la signature C# de la méthode winapi comme commentaire:
//[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
}
Il y a aussi une question similaire here mais ne fournit pas de solution.