Чтение содержимого каталога PDA во время синхронизации с ActiveSync - PullRequest
2 голосов
/ 24 февраля 2010

У меня есть проект, в котором мне нужно будет копировать файлы, найденные в КПК (в моем случае это MC3000, если это имеет какое-то значение). У меня установлен ActiveSync, и он прекрасно создает папку синхронизации. Тем не менее, я хотел бы иметь возможность читать содержимое КПК не только в его папке MyDocument, поэтому я не могу использовать это (плюс он должен работать с 20+ возможными КПК той же модели, таким образом создавая каталог 20+)

Есть ли способ сделать какой-нибудь ввод-вывод внутри КПК, пока он подключен и синхронизируется с ActiveSync, который есть.

Я вижу «Мобильное устройство» в Проводнике.

Спасибо

1 Ответ

3 голосов
/ 04 марта 2010

Используйте RAPI . Это проект codeplex, который предоставляет управляемые классы-оболочки для Rapi.dll и ActiveSync. Это позволяет настольным приложениям .NET связываться с привязанными мобильными устройствами. Оболочка возникла в рамках проекта OpenNetCF , но теперь управляется отдельно.

Вы можете использовать всю библиотеку DLL проекта RAPI, когда она поставляется из этого проекта, или просто использовать подмножество кода, который вам нужен. Мне нужно было создавать файлы на устройстве, когда оно подключалось, поэтому мне не нужны были данные статистики производительности или данные реестра устройства, которые включены в Rapi. Поэтому я просто взял 3 необходимых мне исходных файла ...

То, как это работает для меня, это:

  • Использование ActiveSync (DccManSink) для определения состояния подключения / отключения мобильного устройства
  • Используйте оболочку RAPI для копирования файлов на устройство, создания файлов на устройстве, копирования файлов с устройства и т. Д.

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;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...