Pergunta

Eu tenho um projeto no qual eu precisaria copiar arquivos encontrados em um PDA (no meu caso, é um MC3000 se isso faz alguma diferença). Eu tenho o ActiveSync instalado e ele cria a pasta de sincronização para mim muito bem. No entanto, eu gostaria de poder ler o conteúdo do PDA não apenas em sua pasta MyDocument, para que eu não possa usar isso (além de ter que trabalhar com mais de 20 PDA possível do mesmo modelo, fazendo com que mais de 20 anos)

Existe uma maneira de fazer um pouco de IO dentro do PDA, enquanto está ancorado e sincronizado com o ActiveSync.

Eu posso ver o 'dispositivo móvel' no Explorer.

Obrigado

Foi útil?

Solução

Usar Rapi. É um projeto CodePlex que oferece aulas de wrapper gerenciadas para Rapi.dll e ActiveSync. Ele permite que os aplicativos do Desktop .NET se comuniquem com dispositivos móveis amarrados. O invólucro se originou no Projeto OpenNetCF, mas agora é gerenciado separadamente.

Você pode usar toda a DLL do Rapi Project à medida que ela é enviada desse projeto ou apenas usar o subconjunto de código necessário. Eu precisava criar arquivos no dispositivo quando ele foi conectado, para não precisar das coisas das estatísticas de desempenho ou do material do registro do dispositivo incluído no Rapi. Então eu acabei de pegar os 3 arquivos de origem que eu precisava ...

A maneira como funciona para mim é esta:

  • Use ActiveSync (DCCMansink) para detectar a conexão/desconexão do dispositivo móvel Status
  • Use o wrapper Rapi para copiar arquivos para o dispositivo, criar arquivos no dispositivo, copiar arquivos do dispositivo e assim por diante.

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top