2023年12月30日发(作者:)

基于WINCE 平台C#编程要点之一

一、文件的删除和复制

一般来说,C#在WinCE 平台上进行文件的删除和复制有两种方法,下面我们将对这两

种方法进行介绍。在介绍之前,对一种情况要特殊说明一下:关于文件的复制,大家都知道

最简便的方法是将源文件直接复制到目标文件,如果目标文件事先存在,则直接覆盖;但在

WinCE 的平台上,由于采用TFAT 文件系统,当进行文件覆盖时,要求系统剩余空间至少

大于所需更新的文件大小,否则文件拷贝时,系统将报错。所以我们建议,如果目标文件事

先存在,先删除目标文件,然后再将源文件复制过去。

两种方法的申明均是:

using ;

1) 方法一:静态File 方法(最简单的方法)

文件删除: (string path);

文件复制: (string sourceFileName, string destFileName);

2) 方法二:FileInfo 方法(最灵活的方法)

使用这种方法,每个具体的文件要定义一个FileInfo 类,然后通过操作具体的类来进行

文件删除、复制或其它操作。下面以一个具体范例来说明:

1. string sourceFileName, destFileName;

2. sourceFileName = @"USB "; //源文件名及路径

3. destFileName = @""; //目标文件名及路径

4. FileInfo sourceFile = new fo(sourceFileName);

5. FileInfo destFile = new fo(destFileName);

6. try

7. {

8. if () destFile. Delete(); //如果目标文件已经存在,则删除

9. (destFileName,true); //将源文件复制到目标文件

10.}

(Exception ex)

12.{

(e);

14.}

二、获取存储设备的大小信息

很多底层操作的函数,Visual Studio 的API 库中并没有提供,这个时候,我

们就要在C#开发中调用Win32 的函数来进行相应的操作。一大批Win32 底层操作的函数

都存在于 动态链接库中。

调用Win32 的申明:

using pServices;

在WinCE 下已经没有了驱动器名的概念,文件存储设备都是在WinCE 的根目录下中

以目录的形式出现,可以采用如下方法并调用相应函数来获取存储设备的总的大小和空闲空

间的信息:

[DllImport("")]

private static extern bool GetDiskFreeSpaceEx(string directoryName, ref

long

freeBytesAvailable, ref long totalBytes, ref long totalFreeBytes);

调用例子如下:

long freeBytes = 0, totalBytes = 0, totalFreeBytes = 0;

GetDiskFreeSpaceEx("Nor Flash", ref freeBytes, ref totalBytes, ref

totalFreeBytes);

string strtotalBytes = "Nor Flash 磁盘空间大小为:"+ng()+"Bytes";

三、重启系统函数

很多底层操作的函数,Visual Studio 的API 库中并没有提供,这个时候,我

们就要在C#开发中调用Win32 的函数来进行相应的操作。一大批Win32 底层操作的函数

都存在于 动态链接库中。

调用Win32 的申明:

using pServices;

调用“”里的Win32 函数SetCleanRebootFlag( „ )和KernelIoControl( „ )

可以实现WINCE 系统重新启动, 定义的代码如下:

[DllImport("")]

extern static int KernelIoControl(int dwIoControlCode, IntPtr lpInBuf,

int nInBufSize, IntPtr

lpOutBuf, int nOutBufSize, ref int lpBytesReturned);

[DllImport("")]

extern static void SetCleanRebootFlag();

可以写成一个系统重启的函数:

1. public void HardReset()

2. {

3. int IOCTL_HAL_REBOOT = 0x101003C;

4. int bytesReturned = 0;

5. SetCleanRebootFlag();

6. KernelIoControl(IOCTL_HAL_REBOOT,,0, , 0, ref bytesReturned);

7. }

然后在程序里需要重启的地方直接调用HardReset()这个函数即可。

四、隐藏/显示Windows 任务栏

很多底层操作的函数,Visual Studio 的API 库中并没有提供,这个时候,我

基于WinCE 平台C#编程要点之一 V1.00 by leeleen@

英创信息技术有限公司 +86-28-86180660

Emtronix® Copyright©2008 support@

们就要在C#开发中调用Win32 的函数来进行相应的操作。一大批Win32 底层操作的函数

都存在于 动态链接库中。

调用Win32 的申明:

using pServices;

很多客户的应用程序需要独占屏幕,而不需要下方的Windows 任务栏。因此显示/隐藏

Windows 任务栏是一个很实用的功能。这个时候就需要调用 里的

FindWindow( „ )和ShowWindow( „ )函数来实现任务栏的显示和隐藏(Windows

的任务

栏实际上也是一个特殊的Windows 窗口)。

[DllImport("", EntryPoint = "FindWindow")]

public static extern int FindWindow( string lpWindowName, string

lpClassName );

[DllImport("", EntryPoint = "ShowWindow")]

public static extern int ShowWindow( int hwnd, int nCmdShow );

public const int SW_SHOW = 5; //显示窗口常量

public const int SW_HIDE = 0; //隐藏窗口常量

下面是一个隐藏/显示Windows 任务栏的小例子:

1. public Form1()

2. {

3. InitializeComponent();

4. }

5. private void button1_Click(object sender, EventArgs e)

6. {

7. int Hwnd = FindWindow("HHTaskBar", null);

8. if (Hwnd != 0)

9. {

ndow(Hwnd, SW_HIDE); //隐藏任务栏

d = true;

d = false;

13.}

14.}

15.

e void button2_Click(object sender, EventArgs e)

17.{

Hwnd = FindWindow("HHTaskBar", null);

(Hwnd != 0)

20.{

ndow(Hwnd, SW_SHOW); //显示任务栏

d = true;

d = false;

24.}

25.}