zoukankan      html  css  js  c++  java
  • 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使用有所帮助。

  • 相关阅读:
    【实验】利用系统自带脚本utlsampl.sql创建scott用户及样本数据
    有哪些优秀的沟通思路?
    srand()以及rand()函数用法
    微信公众号
    Sublime Text 3 全程详细图文原创教程(持续更新中。。。)
    Android应用的缓冲界面启动界面
    ListView技巧
    android线性布局参数
    CocoaPods的一波三则
    003.开发者账号异同
  • 原文地址:https://www.cnblogs.com/cwfsoft/p/1763217.html
Copyright © 2011-2022 走看看