Utilisez RAPI. C'est un projet codeplex qui fournit des classes wrapper managées pour Rapi.dll et ActiveSync. Il permet aux applications .NET de bureau de communiquer avec des appareils mobiles connectés. L'emballage provient du OpenNetCF project, mais est maintenant géré séparément.
Vous pouvez utiliser la DLL du projet RAPI entière à partir de ce projet ou simplement utiliser le sous-ensemble de code dont vous avez besoin. J'avais besoin de créer des fichiers sur l'appareil quand il se connectait, donc je n'avais pas besoin des trucs de statistiques de performance, ni des éléments de registre de périphériques inclus dans Rapi. Je viens donc de 3 fichiers a saisi les sources dont je avais besoin ...
La façon dont cela fonctionne pour moi, est la suivante:
- Utilisez ActiveSync (DccManSink) pour détecter la connexion appareil mobile/déconnecter l'état
- Utilisation l'encapsuleur RAPI pour copier des fichiers sur l'appareil, créer des fichiers sur l'appareil, copier des fichiers à partir de l'appareil, etc.
private DccMan DeviceConnectionMgr;
private int AdviceCode;
private int ConnectionStatus = 1;
private System.Threading.AutoResetEvent DeviceConnectionNotification = new System.Threading.AutoResetEvent(false);
public void OnConnectionError()
{
ConnectionStatus = -1;
DeviceConnectionNotification.Set();
}
public void OnIpAssigned(int address)
{
ConnectionStatus = 0;
DeviceConnectionNotification.Set();
}
private void btnCopyToDevice_Click(object sender, EventArgs e)
{
// copy the database (in the form of an XML file) to the connected device
Cursor.Current = Cursors.WaitCursor;
// register for events and wait.
this.DeviceConnectionMgr = new DccMan();
DccManSink deviceEvents = new DccManSink();
deviceEvents.IPChange += new IPAddrHandler(this.OnIpAssigned);
deviceEvents.Error += new ErrorHandler(this.OnConnectionError);
((IDccMan)DeviceConnectionMgr).Advise(deviceEvents, out this.AdviceCode);
// should do this asynchronously, with a timeout; too lazy.
this.statusLabel.Text = "Waiting for a Windows Mobile device to connect....";
this.Update();
Application.DoEvents(); // allow the form to update
bool exitSynchContextBeforeWait = false;
DeviceConnectionNotification.WaitOne(SECONDS_TO_WAIT_FOR_DEVICE * 1000, exitSynchContextBeforeWait);
if (ConnectionStatus == 0)
{
this.statusLabel.Text = "The Device is now connected.";
this.Update();
Application.DoEvents(); // allow the form to update
RAPI deviceConnection = new RAPI();
deviceConnection.Connect(true, 120); // wait up to 2 minutes until connected
if (deviceConnection.Connected)
{
this.statusLabel.Text = "Copying the database file to the connected Windows Mobile device.";
this.Update();
Application.DoEvents(); // allow the form to update
string destPath = "\\Storage Card\\Application Data\\MyApp\\db.xml";
deviceConnection.CopyFileToDevice(sourceFile,
destPath,
true);
this.statusLabel.Text = "Successfully copied the file to the Windows Mobile device....";
}
else
{
this.statusLabel.Text = "Oh, wait, it seems the Windows Mobile device isn't really connected? Sorry.";
}
}
else
{
this.statusLabel.Text = "Could not copy the file because the Device does not seem to be connected.";
}
Cursor.Current = Cursors.Default;
}
Ressemble exactement ce que j'ai besoin! Cependant, je ne peux pas le tester pour le moment. Comme j'ai seulement besoin d'obtenir des fichiers du PDA, qui se trouvent dans un répertoire spécifique et constant, cela semble fonctionner. –
J'ai des problèmes à faire ce travail. Quel genre de projet utilisez-vous? Tout ce qui n'est pas dans le code que je devrais savoir ...? Je ne peux surtout rien faire de type DCCMan ou AdviceCode. Merci. –
Whadaya veut dire? "faites n'importe quoi de type ...". Vous aurez besoin du code du projet RAPI sur codeplex.com. Vous avez ça, non? Les classes comme DccManSink et RAPI sont définies dans ce code. AdviceCode est juste un int. (oui, je l'ai omis par erreur lors de l'extraction de ce code d'un projet en cours) – Cheeso