C# V3.5 OpenNETCF实现PC与CE设备的文件拷贝
来源:互联网 发布:淘宝cpu散片 编辑:程序博客网 时间:2024/05/21 07:09
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using OpenNETCF.Desktop.Communication;
using System.Runtime.InteropServices;
using System.Threading;
using System.Net;
using System.Net.Sockets;
namespace PAMS2CEUpdateToolCS
{
public partial class PAMS2CEUpdateTool : Form
{
private RAPI myrapi = new RAPI();
private Thread threadActiveSync = null;
private Thread threadConnectDev = null;
private Thread threadCopyFile = null;
private Boolean IsConnected = false;
private Boolean IsCopyingFile = false;
private string SrcFileName = "";
private string DestFileName = "";
private Socket m_Socket = null;
private delegate void CheckConnectDelegate();
private CheckConnectDelegate DelegateConnect = null;
private delegate void EnableControlDelegate();
private EnableControlDelegate DelegateEnableControl = null;
private EnableControlDelegate DelegateDisableControl = null;
private const string DirPathBase = "\\Flash\\PAMS2CE\\Base"; //存放原始的base软件,该目录为只读属性
private const string DirPathUpdate = "\\Flash\\PAMS2CE\\Update"; //存放用于更新的软件
private const string FilePathSoftWare = "\\Flash\\PAMS2CE\\Update\\PAMS2CE.exe";//更新的应用程序
private const string FilePathCFGdb = "\\Flash\\PAMS2CE\\Update\\cfg.db";//用于更新的路线数据库
private const string FilePathDATdb = "\\Flash\\PAMS2CE\\Update\\dat.db";//用于更新的测试数据的数据库
private const string FilePathSysFile = "\\Storage Card\\NK.bin"; //用于更新的系统kernel
private const string FilePathLog = "\\Storage Card\\log.txt"; //应用运行的log信息
const int SW_HIDE = 0;
const int SW_SHOWNORMAL = 1;
const int SW_SHOWMINIMIZED = 2;
const int SW_SHOWMAXIMIZED = 3;
[DllImport("User32.dll")]
public static extern bool ShowWindow(IntPtr HWND, int MSG);
[DllImport("User32.dll")]
public static extern IntPtr FindWindow(string ClassN, string WindN);
public PAMS2CEUpdateTool()
{
InitializeComponent();
}
private void PAMS2CEUpdateTool_Load(object sender, EventArgs e)
{
DelegateEnableControl = new EnableControlDelegate(EnableControl);
DelegateDisableControl = new EnableControlDelegate(DisableControl);
DelegateConnect = new CheckConnectDelegate(ShowConnectStatus);
myrapi.RAPIConnected += new RAPIConnectedHandler(myrapiConnected);
myrapi.RAPIDisconnected += new RAPIConnectedHandler(myrapiDisconnected);
myrapi.Connect(false, -1);
threadConnectDev = new Thread(this.ThreadConnectToDevice);
threadConnectDev.Start();
threadActiveSync = new Thread(this.ThreadHideActiveSyncForm);
threadActiveSync.Start();
DisableControl();
}
//RAPI 相关代码
#region
private void myrapiConnected()
{
PanelStatus.BackColor = Color.Green;
IsConnected = true;
InitDevDirectory();
this.Invoke(DelegateEnableControl);
}
private void myrapiDisconnected()
{
PanelStatus.BackColor = Color.Red;
IsConnected = false;
myrapi.Connect(false,-1);
this.Invoke(DelegateDisableControl);
}
private void ShowConnectStatus()
{
if (!IsConnected)
{
OutputText("正在与设备建立连接...", false);
}
}
private void EnableControl()
{
tabControlUpdate.Enabled = true;
OutputText("已与设备建立连接!", false);
}
private void DisableControl()
{
tabControlUpdate.Enabled = false ;
OutputText("已与设备断开连接!", false);
}
//线程显示连接状态
private void ThreadConnectToDevice()
{
while (true)
{
Thread.Sleep(1000);
while (!IsConnected)
{
Thread.Sleep(1000);
this.Invoke(DelegateConnect);
}
}
}
//线程隐藏ActiveSync的窗体界面
private void ThreadHideActiveSyncForm()
{
while (true)
{
ShowWindow(FindWindow(null, "Microsoft ActiveSync"), SW_HIDE);//隐藏
}
}
//线程用于Copy文件
private void ThreadCopyFile()
{
try
{
myrapi.CopyFileToDevice(SrcFileName, DestFileName);
IsCopyingFile = false;
}
catch (Exception ex)
{
MessageBox.Show("复制文件失败:" + FilePathSysFile+ex.Message,"失败提示");
}
}
//初始化/Flash/Base 与 /Flash/Update目录
private void InitDevDirectory()
{
try
{
if (IsConnected)
{
if (false == myrapi.DeviceFileExists(DirPathUpdate))
{
myrapi.CreateDeviceDirectory(DirPathUpdate);
}
if (false == myrapi.DeviceFileExists(DirPathBase))
{
myrapi.CreateDeviceDirectory(DirPathBase);
}
}
}
catch (Exception ex)
{
MessageBox.Show("目录初始化失败:" + ex.Message, "目录初始化错误");
}
}
#endregion
//Button处理相关代码
#region
//文件浏览
private void btn_FileDir_Click(object sender, EventArgs e)
{
if (DialogResult.OK == openFileDialog1.ShowDialog())
{
TextBox_FileDir.Text = openFileDialog1.FileName;
SrcFileName = TextBox_FileDir.Text;
OutputText("选择的文件为:"+TextBox_FileDir.Text,false);
}
}
//检查文件名是否正确
private Boolean CheckFileName(int index)
{
string softWareName = TextBox_FileDir.Text;
string [] names = softWareName.Split('.');
string suffix = names[names.Length-1];
/*Step 1:判断所选文件是否为空*/
if (softWareName == "")
{
OutputText("未选择文件进行升级!", false);
return false;
}
/*Step 2:判断所选类型是否与升级文件一致*/
if (1 == index)//升级软件
{
if (suffix != "exe")
{
OutputText("所选类型与升级文件不符!", false);
return false;
}
}
else if (2 == index)//更新系统
{
if (suffix != "bin")
{
OutputText("所选类型与升级文件不符!", false);
return false;
}
}
else if (3 == index)//更新cfg数据
{
if (suffix != "db")
{
OutputText("所选类型与升级文件不符!", false);
return false;
}
}
else if (4 == index)//更新dat数据
{
if (suffix != "db")
{
OutputText("所选类型与升级文件不符!", false);
return false;
}
}
//OutputText("开始复制文件!", false);
return true;
}
//启动线程copy文件
private void CopyFileFromPCToDevice()
{
try
{
if (true == myrapi.DeviceFileExists(DestFileName))
{
myrapi.DeleteDeviceFile(DestFileName);
}
threadCopyFile = new Thread(ThreadCopyFile);
IsCopyingFile = true;
threadCopyFile.Start();
timerCopyFile.Enabled = true;
OutputText("开始复制文件", false);
}
catch (Exception ex)
{
OutputText("删除旧文件失败:" + ex.Message, false);
}
}
#region 软件更新
//更新软件
private void BTN_UpdateSoftware_Click(object sender, EventArgs e)
{
if (false == CheckFileName(1))
return;
DestFileName = FilePathSoftWare;
CopyFileFromPCToDevice();
}
//更细系统
private void BTN_UpdateSys_Click(object sender, EventArgs e)
{
if (false == CheckFileName(2))
return;
DestFileName = FilePathSysFile;
CopyFileFromPCToDevice();
}
#endregion
#region 上传下载
//更新CFG数据库
private void BTN_UpdateCFG_Click(object sender, EventArgs e)
{
if (false == CheckFileName(3))
return;
DestFileName = FilePathCFGdb;
CopyFileFromPCToDevice();
}
//更新Dat数据库
private void BTN_UpdateDAT_Click(object sender, EventArgs e)
{
if (false == CheckFileName(4))
return;
DestFileName = FilePathDATdb;
CopyFileFromPCToDevice();
}
#endregion
#region 其他功能
//同步时间
private void BTN_SyncTime_Click(object sender, EventArgs e)
{
//string hostName = Dns.GetHostName();
//string houtIP = Dns.GetHostEntry(hostName).AddressList[0].ToString();
IPEndPoint iep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 10000);
m_Socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
m_Socket.Bind(iep);
}
//设备log
private void BTN_DeviceLog_Click(object sender, EventArgs e)
{
try
{
if (myrapi.DeviceFileExists(FilePathLog))
{
myrapi.CopyFileFromDevice("./log.txt", FilePathLog, true);
OutputText("log.txt获取成功,已放至该程序所在的目录!",false);
}
else
{
OutputText("设备暂无log信息!", false);
}
}
catch (Exception ex)
{
OutputText("获取log文件失败" + ex.Message, false);
}
}
//系统信息
private void BTN_SysInfo_Click(object sender, EventArgs e)
{
try
{
MEMORYSTATUS ms = new MEMORYSTATUS();
myrapi.GetDeviceMemoryStatus(out ms);
STORE_INFORMATION StoreInfo = new STORE_INFORMATION();
myrapi.GetDeviceStoreInformation(out StoreInfo);
SYSTEM_INFO pSI = new SYSTEM_INFO();
myrapi.GetDeviceSystemInfo(out pSI);
OSVERSIONINFO VersionInfo = new OSVERSIONINFO();
myrapi.GetDeviceVersion(out VersionInfo);
OutputText("可用程序内存:" + ms.dwAvailPhys / 1024 + "k", false);
OutputText("总共程序内存:" + ms.dwTotalPhys / 1024 + "k", false);
OutputText("可用存储内存:" + StoreInfo.dwFreeSize / 1024 + "k", false);
OutputText("总共存储内存:" + StoreInfo.dwStoreSize / 1024 + "k", false);
OutputText("处理器类型:" + pSI.dwProcessorType, false);
OutputText("平台类型:" + VersionInfo.dwPlatformId, false);
}
catch (Exception ex)
{
OutputText("获取设备信息出错:"+ex.Message,false);
}
}
//版本信息
private void BTN_VersionInfo_Click(object sender, EventArgs e)
{
OutputText("软件版本号:*******",false);
OutputText("硬件版本号:*******", false);
OutputText("设备识别码:*******", false);
}
//清除屏幕
private void BTN_ClearScreen_Click(object sender, EventArgs e)
{
OutputText("开始:", true);
}
//退出系统
private void BTN_Exit_Click(object sender, EventArgs e)
{
myrapi.Disconnect();
myrapi.Dispose();
if (threadActiveSync != null)
{
threadActiveSync.Abort();
threadActiveSync = null;
}
if (threadConnectDev != null)
{
threadConnectDev.Abort();
threadConnectDev = null;
}
if (threadCopyFile != null)
{
threadCopyFile.Abort();
threadCopyFile = null;
}
this.Close();
}
#endregion
/*在文本框中输入信息*/
private void OutputText(string content, Boolean isClearScreen)
{
if (isClearScreen)
{
TextBox_Output.Text = "";
TextBox_Output.Text = content;
}
else
{
TextBox_Output.Text += "\r\n";
TextBox_Output.Text += content;
}
TextBox_Output.Focus();
TextBox_Output.Select(TextBox_Output.TextLength,0);
TextBox_Output.ScrollToCaret();
}
#endregion
//显示文件拷贝的过程信息
private void timerCopyFile_Tick(object sender, EventArgs e)
{
if (IsCopyingFile)
{
TextBox_Output.Text += "*";
}
else
{
timerCopyFile.Enabled = false;
if (null != threadCopyFile)
{
threadCopyFile.Abort();
threadCopyFile = null;
}
try
{
long size = myrapi.GetDeviceFileSize(DestFileName);
size /= 1024;
OutputText("文件复制成功,大小:"+size.ToString()+"k",false);
}
catch(Exception ex)
{
OutputText("得到文件大小失败:"+ex.Message,false);
}
}
}
}
}
- C# V3.5 OpenNETCF实现PC与CE设备的文件拷贝
- PC操作移动设备windows CE 包括互相拷贝文件
- C#使用OpenNETCF.Desktop.Communication,实现对ActiveSync状态的判断,及对移动设备文件的操作!
- OpenNETCF.Desktop.Communication.DLL实现终端设备与PC同步
- WPD 从便携设备拷贝文件到PC文件不完整的解决办法
- WPD 从便携设备拷贝文件到PC文件不完整的解决办法
- 主机与设备之间文件拷贝的几种方式
- 利用C# 实现文件拷贝
- C#实现大文件拷贝
- C#实现大文件拷贝
- html中判断phone与pc的ce
- 文件拷贝的实现
- [转]在Window Embedded CE(Wince)下使用OpenNETCF进行路由表的开发
- 在Window Embedded CE(Wince)下使用OpenNETCF进行路由表的开发
- pc 与移动设备的判断
- 程序文件直接拷贝到pda设备 (USB连接pc pda wince6.0 C#)
- pc到U盘的文件拷贝小工具源代码
- 深拷贝与潜拷贝(C#中Prototype模式的实现)
- Webkit–DOM分析
- 二叉搜索树 -【动态规划】最优C++实现
- 页面flash对象的使用
- 利用jetty在服务器上面显示“hello world”
- 3个超级有用的jQuery内容滚动插件和教程
- C# V3.5 OpenNETCF实现PC与CE设备的文件拷贝
- 《学习opencv》第五章课后习题1
- 文件mime类型
- 分布式系统漫谈一 —— Google三驾马车: GFS,mapreduce,Bigtable
- 依赖注入及AOP简述(六)——字符串请求模式
- js中this的总结
- js获取光标位置
- 第三讲:Android模拟器的使用
- 使用CSplitterWnd实现拆分窗口(多视图显示)