C# Windows CE使用小技巧实例

C# Windows CE使用小技巧实例主要向你介绍了WinCE下使用C#来打开一个外部文件、单步执行程序等等,希望对你学习了解C# Windows CE使用有所帮助。
首页 新闻资讯 行业资讯 C# Windows CE使用小技巧实例

C# Windows CE使用的一些感受:使用Windows的开发机上用C#启动一个外部程序的方法有很多,但这些方法用在使用WinCE的目标工控机上都无能为力。

C# Windows CE使用1、

现在以打开一个IE为例,介绍如何在WinCE下使用C#来打开一个外部文件:

首先添加命名空间

复制

usingSystem.Runtime.InteropServices;,
  • 1.

然后调用API函数:

复制

[DllImport("coredll.Dll",  EntryPoint="CreateProcess",SetLastError=true)]   externstaticintCreateProcess(  stringstrImageName,stringstrCmdLine,  IntPtrpProcessAttributes,IntPtrpThreadAttributes,  intbInheritsHandle,intdwCreationFlags,  IntPtrpEnvironment, IntPtrpCurrentDir,  IntPtrbArray,ProcessInfooProc);   publicclassProcessInfo   {   publicInt32hProcess;   publicInt32hThread;   publicInt32ProcessID;   publicInt32ThreadID;   }
  • 1.

  • 2.

  • 3.

  • 4.

  • 5.

  • 6.

  • 7.

  • 8.

  • 9.

  • 10.

  • 11.

  • 12.

  • 13.

  • 14.

  • 15.

  • 16.

  • 17.

  • 18.

  • 19.

  • 20.

  • 21.

  • 22.

  • 23.

最后就可以编写需要打开IE的代码了(点击一个按钮打开IE浏览器中相应内容,此例程要求打开目标工控机硬盘上的Readme文件):

复制

privatevoidbutton_Click(  objectsender,System.EventArgse)   {   ProcessInfopi=newProcessInfo();   CreateProcess(" \\windows\\iesample.exe",  "\\HardDisk\\Readme.htm",IntPtr.Zero,  IntPtr.Zero,0,0,IntPtr.Zero,  IntPtr.Zero,IntPtr.Zero,pi);   }
  • 1.

  • 2.

  • 3.

  • 4.

  • 5.

  • 6.

  • 7.

  • 8.

  • 9.

  • 10.

  • 11.

  • 12.

  • 13.

C# Windows CE使用2、

有时候我们会希望我们的程式只被执行一次,VB的时代我们会用App.PrevInstance,而.net的时代我们可以用下列方式实现

复制

[STAThread]   staticvoidMain()   {   //如果跟本程式命名的行程只有一个才执行程式   if(System.Diagnostics.Process.  GetProcessesByName(   Application.ProductName).Length==1)   {   Application.Run(newForm1());   }   }
  • 1.

  • 2.

  • 3.

  • 4.

  • 5.

  • 6.

  • 7.

  • 8.

  • 9.

  • 10.

  • 11.

  • 12.

  • 13.

  • 14.

  • 15.

  • 16.

  • 17.

  • 18.

  • 19.

  • 20.

但此方法在WinCE下无法实现,所以我们还是要先调用动态链接库,

复制

[DllImport("coredll.Dll")]   privatestaticexternintGetLastError();   [DllImport("coredll.Dll")]   privatestaticexternintReleaseMutex(IntPtrhMutex);   [DllImport("coredll.Dll")]   privatestaticexternIntPtrCreateMutex(  SECURITY_ATTRIBUTESlpMutexAttributes,  boolbInitialOwner,stringlpName);   [StructLayout(youtKind.Sequential)]   publicclassSECURITY_ATTRIBUTES   {   publicintnLength;   publicintlpSecurityDescriptor;   publicintbInheritHandle;   }   constintERROR_ALREADY_EXISTS=0183;
  • 1.

  • 2.

  • 3.

  • 4.

  • 5.

  • 6.

  • 7.

  • 8.

  • 9.

  • 10.

  • 11.

  • 12.

  • 13.

  • 14.

  • 15.

  • 16.

  • 17.

  • 18.

  • 19.

  • 20.

  • 21.

  • 22.

  • 23.

  • 24.

  • 25.

  • 26.

  • 27.

  • 28.

  • 29.

然后编写代码

复制

staticvoidMain()   {   #regionApi_CallCreateMutex;   IntPtrhMutex;   hMutex=CreateMutex(null,false,"程序名");   if(GetLastError()!=ERROR_ALREADY_EXISTS)   {   Application.Run(newFrmmenu());   }   else  {   MessageBox.Show("本程序只允许同时运行一个");   ReleaseMutex(hMutex);   }   #endregion   }
  • 1.

  • 2.

  • 3.

  • 4.

  • 5.

  • 6.

  • 7.

  • 8.

  • 9.

  • 10.

  • 11.

  • 12.

  • 13.

  • 14.

  • 15.

  • 16.

  • 17.

  • 18.

  • 19.

  • 20.

  • 21.

  • 22.

  • 23.

  • 24.

  • 25.

  • 26.

  • 27.

  • 28.

  • 29.

  • 30.

  • 31.

C# Windows CE使用3、

在.NETFramework中没有函数可以激活属于另外一个进程或程序的窗体,所以我们要通过调用API函数来实现:

复制

usingSystem.Runtime.InteropServices;   [DllImport("coredll.Dll")]   publicstaticexternIntPtrFindWindow(  Stringclassname,Stringtitle);   [DllImport("coredll.Dll")]   publicstaticexternvoidSetForegroundWindow(IntPtrhwnd);
  • 1.

  • 2.

  • 3.

  • 4.

  • 5.

  • 6.

  • 7.

  • 8.

  • 9.

  • 10.

然后使用下列代码即可

复制

IntPtrhDlg;   hDlg=FindWindow(null,"窗口标题");   SetForegroundWindow(hDlg);
  • 1.

  • 2.

  • 3.

  • 4.

  • 5.

最后,WinCE下的C#里不支持GroupBox控件,建议使用Panel控件代替;不支持Frame控件,如果非要达到那样的效果,可以用Label和TextBox组和起来应付一下。

其实,任何时候,只要.NETFramework无法满足编程者需要的时候,通常都可以使用托管(interop)机制直接与Windows交互。大家也许看出调用原有的[DllImport("user32.Dll")]动态链接库时无法满足WinCE下程序要求,所以我们调用了[DllImport("coredll.Dll")]。希望这篇文章能给初学者提供一些捷径。

C# Windows CE使用的一些感受和实例的介绍就向你介绍到这里,希望对你了解C# Windows CE使用有所帮助。

【编辑推荐】

  1. C#Windows应用程序开发之窗体控件

  2. C#Windows应用程序开发之添加菜单

  3. C#Windows应用程序开发之添加状态条

  4. C#Windows应用程序开发之事件处理器

  5. c# Windows CE读取电池电量的实现

9    2009-08-17 09:39:40    C# Windows CE使用