Чтение содержимого каталога КПК при синхронизации с ActiveSync

StackOverflow https://stackoverflow.com/questions/2327794

  •  22-09-2019
  •  | 
  •  

Вопрос

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

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

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

Спасибо

Это было полезно?

Решение

Использовать РАПИ.Это проект codeplex, который предоставляет управляемые классы-оболочки для Rapi.dll и Активсинк.Он позволяет настольным приложениям .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;

}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top