首页 > C# Windows CE使用小技巧实例

C# Windows CE使用小技巧实例

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

C# Windows CE使用1、

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

首先添加命名空间

  1. usingSystem.Runtime.InteropServices;,

然后调用API函数:

  1. [DllImport("coredll.Dll", 
  2. EntryPoint="CreateProcess",SetLastError=true)] 
  3.  
  4. externstaticintCreateProcess( 
  5. stringstrImageName,stringstrCmdLine, 
  6. IntPtrpProcessAttributes,IntPtrpThreadAttributes, 
  7. intbInheritsHandle,intdwCreationFlags, 
  8. IntPtrpEnvironment, IntPtrpCurrentDir, 
  9. IntPtrbArray,ProcessInfooProc); 
  10.  
  11. publicclassProcessInfo 
  12.  
  13.  
  14. publicInt32hProcess; 
  15.  
  16. publicInt32hThread; 
  17.  
  18. publicInt32ProcessID; 
  19.  
  20. publicInt32ThreadID; 
  21.  
  22. }

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

  1. privatevoidbutton_Click( 
  2. objectsender,System.EventArgse) 
  3.  
  4.  
  5. ProcessInfopi=newProcessInfo(); 
  6.  
  7. CreateProcess(" \windows\iesample.exe", 
  8. "\HardDisk\Readme.htm",IntPtr.Zero, 
  9. IntPtr.Zero,0,0,IntPtr.Zero, 
  10. IntPtr.Zero,IntPtr.Zero,pi); 
  11.  
  12. }

C# Windows CE使用2、

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

  1. [STAThread] 
  2.  
  3. staticvoidMain() 
  4.  
  5.  
  6. //如果跟本程式命名的行程只有一个才执行程式 
  7.  
  8. if(System.Diagnostics.Process. 
  9. GetProcessesByName( 
  10.  
  11. Application.ProductName).Length==1) 
  12.  
  13.  
  14. Application.Run(newForm1()); 
  15.  
  16.  
  17. }

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

  1. [DllImport("coredll.Dll")] 
  2.  
  3. privatestaticexternintGetLastError(); 
  4.  
  5. [DllImport("coredll.Dll")] 
  6.  
  7. privatestaticexternintReleaseMutex(IntPtrhMutex); 
  8.  
  9. [DllImport("coredll.Dll")] 
  10.  
  11. privatestaticexternIntPtrCreateMutex( 
  12. SECURITY_ATTRIBUTESlpMutexAttributes, 
  13. boolbInitialOwner,stringlpName); 
  14.  
  15. [StructLayout(youtKind.Sequential)] 
  16.  
  17. publicclassSECURITY_ATTRIBUTES 
  18.  
  19.  
  20. publicintnLength; 
  21.  
  22. publicintlpSecurityDescriptor; 
  23.  
  24. publicintbInheritHandle; 
  25.  
  26.  
  27. constintERROR_ALREADY_EXISTS=0183; 

然后编写代码

  1. staticvoidMain() 
  2.  
  3.  
  4. #regionApi_CallCreateMutex; 
  5.  
  6. IntPtrhMutex; 
  7.  
  8. hMutex=CreateMutex(null,false,"程序名"); 
  9.  
  10. if(GetLastError()!=ERROR_ALREADY_EXISTS) 
  11.  
  12.  
  13. Application.Run(newFrmmenu()); 
  14.  
  15.  
  16. else
  17.  
  18.  
  19. MessageBox.Show("本程序只允许同时运行一个"); 
  20.  
  21. ReleaseMutex(hMutex); 
  22.  
  23.  
  24. #endregion 
  25.  
  26. }

C# Windows CE使用3、

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

  1. usingSystem.Runtime.InteropServices; 
  2.  
  3. [DllImport("coredll.Dll")] 
  4.  
  5. publicstaticexternIntPtrFindWindow( 
  6. Stringclassname,Stringtitle); 
  7.  
  8. [DllImport("coredll.Dll")] 
  9.  
  10. publicstaticexternvoidSetForegroundWindow(IntPtrhwnd);

然后使用下列代码即可

  1. IntPtrhDlg; 
  2.  
  3. hDlg=FindWindow(null,"窗口标题"); 
  4.  
  5. SetForegroundWindow(hDlg);

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

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

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

转载于:https://www.cnblogs.com/cwfsoft/archive/2010/06/23/1763217.html

更多相关:

  • nan 是not a number ,inf是无穷大 numpy.nan_to_num(x): 使用0代替数组x中的nan元素,使用有限的数字代替inf元素...

  • 简介 Simple Reference  基础CUDA示例,适用于初学者, 反映了运用CUDA和CUDA runtime APIs的一些基本概念.Utilities Reference  演示如何查询设备能力和衡量GPU/CPU 带宽的实例程序。Graphics Reference  图形化示例展现的是 CUDA, OpenGL,...

  • 在做开发的过程中难免需要给内核及下载的一些源码打补丁,所以我们先学习下Linux下使用如如何使用diff制作补丁以及如何使用patch打补丁。...

  • 我在调研ATS 4.2.3挂载SSD的过程中,遇到很多坑,特此详细记录我摸索的主要过程,以便大家以后避免之。 基本思路可以完全照搬参考文献[2][3] 下面的安装假定是以root用户身份进行的,Linux服务器已经安装好系统,磁盘已经做好分区。 首先需要认识我们的Linux服务器的硬件配置和软件情况 硬件配置: DELL...

  • 该博文整理一些在使用stl编程过程中遇到的小经验: 1.在多线程环境下面打印调试,如何使用cout及时刷新到屏幕上? 在C中我们经常这样使用: printf("Hello World "); fflush(stdout); 如果使用stl,我们可以这样使用: cout << "Hello World" << endl <...

  • XnView Multi Platform是一个全平台(Windows, Linux, Mac)下的全能图片工具,类似Windows平台的美图看看,阿香婆图片浏览器等等,效果非常赞,是我在Ubuntu上的御用软件之一,对个人用户免费。...

  • 【WindowsBoot】启动必须文件 【WindowsHelp】帮助文件 【Windowsinf】安装硬件和软件时所需的inf文件 【WindowsSystem32】系统的主要组件 ActiveX文件(*.ocx)应用程序应用程序扩展(*.dll)控制面板项(*.cpl)设备驱动(*.drv)Boot所需文件驱动微软管理控制...

  • Microsoft .NET Framework 3.0, the managed programming model for Microsoft® Windows®, includes the .NET Framework 2.0, Windows Presentation Foundation, Windows Communica...

  •   Windows Vista正式发布之后相信很多喜欢尝鲜的朋友已经体验到了微软新一代操作系统的魅力,在体验的同时免不了就会和使用已久的Windows XP系统做些比较,Vista的味道究竟如何?让我们一起来看看Alex Zaharov-Reutt对Windows Vista和Windows XP在功能方面的做出的比较。    安全...

  • 首先安装rdesktop : apt-get install rdesktop.p 程序安装完后,在终端命令行中输入:$ rdesktop -g 1024x768 -d 24 ip,就进入了windows的登录窗口。这里:-g 1024*768指定了打开窗口大小;-d 24设置色彩位深为24;ip是windows虚拟机的IP地址。输入...