我有一个项目,我需要复制在PDA中找到的文件(在我的情况下,如果有任何不同,它是MC3000)。我安装了ActiveSync,它为我创建了syncronisation文件夹就好了。但是,我希望能够不仅在其MyDocument文件夹中阅读PDA的内容,所以我不能使用它(另外它必须与20+可能的相同型号的PDA一起工作,从而制作20+目录)
有没有办法在PDA内部做一些IO,同时它停靠并与ActiveSync同步。
我可以在资源管理器中看到“移动设备”。
由于
答案 0 :(得分:3)
使用RAPI。它是一个codeplex项目,为Rapi.dll和ActiveSync提供托管包装类。它允许桌面.NET应用程序与系留移动设备进行通信。包装器起源于OpenNetCF project,但现在单独管理。
您可以使用从该项目发布的整个RAPI项目DLL,或者只使用您需要的代码子集。我需要在连接时在设备上创建文件,因此我不需要性能统计信息或Rapi中包含的设备注册表内容。所以我抓住了我需要的3个源文件......
它对我有用的方式是:
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;
}