Question

J'ai un projet dans lequel je besoin de copier des fichiers trouvés dans un PDA (dans mon cas, il est un MC3000 si cela fait une différence). J'ai ActiveSync installé et il crée le dossier syncronisation pour moi très bien. Cependant, je voudrais être en mesure de lire le contenu du PDA non seulement dans son dossier MyDocument je ne peux pas utiliser (De plus, il faut travailler avec 20+ PDA possible du même modèle, rendant ainsi 20+ répertoire)

Est-il possible de faire des IO à l'intérieur du PDA, alors qu'il est connecté et la synchronisation avec ActiveSync qui est.

Je peux voir le 'Mobile Device' dans l'Explorateur.

Merci

Était-ce utile?

La solution

RAPI . Il est un projet CodePlex qui fournit des classes gérées wrapper pour rapi.dll ActiveSync. Il permet des applications .NET de bureau communiquer avec les périphériques mobiles entravés. L'enveloppe est née dans le projet OpenNETCF , mais est maintenant géré séparément.

Vous pouvez utiliser la DLL ensemble du projet RAPI comme il est livré à partir de ce projet, ou tout simplement utiliser le sous-ensemble de code que vous avez besoin. Je avais besoin de créer des fichiers sur l'appareil quand il connecté, donc je ne l'ai pas besoin l'étoffe des statistiques de performance, ou la substance de registre de l'appareil qui est 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:

  • Utiliser ActiveSync (DccManSink) pour détecter la connexion du dispositif mobile / état de déconnexion
  • Utilisez l'emballage RAPI pour copier des fichiers sur le périphérique, créer des fichiers sur le périphérique, copier des fichiers de l'appareil, et ainsi de suite.

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;

}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top