Pregunta

Tengo un proyecto en el que iba a necesitar para copiar archivos encontrados dentro de un PDA (en mi caso, se trata de un MC3000 si hay alguna diferencia). Tengo instalado ActiveSync y crear la carpeta para sincronización para mí muy bien. Sin embargo, me gustaría ser capaz de leer el contenido de la PDA no sólo en su carpeta Mi Documento así que no puedo usar esto (Además de que tienen que trabajar con más de 20 posibles PDA del mismo modelo, lo que hace 20+ directorio)

¿Hay una manera de hacer algo de IO dentro del PDA, mientras está acoplado y sincronizar con ActiveSync que es.

Me puede ver el 'Mobile Device' en el Explorador.

Gracias

¿Fue útil?

Solución

RAPI . Es un proyecto de CodePlex que proporciona logró envoltorio clases para Rapi.dll ActiveSync. Permite aplicaciones .NET de escritorio se comunican con los dispositivos móviles atados. La envoltura se originó dentro de la OpenNETCF proyecto , pero ahora es administrado por separado.

Se puede utilizar todo el proyecto DLL RAPI ya que las naves de ese proyecto, o simplemente utilizar el subconjunto de código que necesita. Necesitaba crear archivos en el dispositivo cuando se conecta, por lo que no necesitaba la materia estadísticas de rendimiento, o el material de registro del dispositivo que se incluye en Rapi. Así que sólo agarró los archivos de origen que necesitaba 3 ...

La forma en que funciona para mí, es la siguiente:

  • Uso de ActiveSync (DccManSink) para detectar la conexión de dispositivos móviles / el estado de desconexión
  • Uso de la envoltura RAPI para copiar archivos en el dispositivo, crear archivos en el dispositivo, copiar archivos desde el dispositivo, y así sucesivamente.

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;

}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top