转:http://developer.51cto.com/art/200908/144299.htm

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. extern static int CreateProcess(
  4. string strImageName,string strCmdLine,
  5. IntPtrpProcessAttributes,IntPtrpThreadAttributes,
  6. intbInheritsHandle,intdwCreationFlags,
  7. IntPtrpEnvironment, IntPtrpCurrentDir,
  8. IntPtrbArray,ProcessInfooProc);
  9. publicclassProcessInfo
  10. {
  11. publicInt32hProcess;
  12. publicInt32hThread;
  13. publicInt32ProcessID;
  14. publicInt32ThreadID;
  15. }

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

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

C# Windows CE使用2、

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

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

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

  1. [DllImport("coredll.Dll")]
  2. privatestaticexternintGetLastError();
  3. [DllImport("coredll.Dll")]
  4. privatestaticexternintReleaseMutex(IntPtrhMutex);
  5. [DllImport("coredll.Dll")]
  6. privatestaticexternIntPtrCreateMutex(
  7. SECURITY_ATTRIBUTESlpMutexAttributes,
  8. boolbInitialOwner,stringlpName);
  9. [StructLayout(youtKind.Sequential)]
  10. publicclassSECURITY_ATTRIBUTES
  11. {
  12. publicintnLength;
  13. publicintlpSecurityDescriptor;
  14. publicintbInheritHandle;
  15. }
  16. constintERROR_ALREADY_EXISTS=0183;

然后编写代码

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

C# Windows CE使用3、

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

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

然后使用下列代码即可

  1. IntPtrhDlg;
  2. hDlg=FindWindow(null,"窗口标题");
  3. 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/loveCloud/archive/2012/01/10/2317874.html

c# wince 小技巧相关推荐

  1. latex 公式不居中_LaTex小技巧,祝你论文一臂之力!

    LaTex作为常用的排版系统,已深入到大家的工作和学业中.但是很多小伙伴反馈说:LaTex公式编辑复杂.表格处理麻烦等.为此,我们特别收集了一些LaTex的小技巧,希望大家都可以get到! 公式篇 首 ...

  2. 中文 查询_查询商标,商标注册通过分析的几个小技巧

    前面我们说到了商标注册前,通常情况下一定要进行商标查询,要进行注册通过可行性分析.只有这样才能保证基本的商标注册通过率,不至于无畏的浪费我们的时间和金钱. 1.我们在进行商标查询,输入要查询的商标时, ...

  3. 日常安排php,PHP日常开发小技巧

    PHP日常开发小技巧 导语:PHP语言中,如果你懂得一些开发技巧,那么对你学PHP,会有很大的帮助.下面的是百分网小编为大家整理的PHP日常开发小技巧,希望对你能有所帮助. PHP批量取得checkb ...

  4. 敲代码括号技巧_阅码神奇Souceinsight使用小技巧总结

    /****与SI的初遇****/ 对于大部分人第一次使用SI来说应该是对原IDE集成开发环境有很大的抱怨吧,确实我也一样,对于做嵌入式开发使用各种集成开发工具,比如说Keil,IAR等等,可能还有更加 ...

  5. eplan文本怎么换行_EPLAN几个使用的小技巧,非常有用

    Eplan P8 的一些小技巧 1. 页名后缀由字母变数字 ? 选项 - 设置 - 项目 - 管理 - 页 - 页名 - 子页标识 2. 修改自动连接电缆颜色 ? 选项 - 层管理 - 符号图形 3. ...

  6. rust熔炉怎么带走_Rust游戏中12个实用小技巧,包含无伤下坠、直梯爬楼

    Rust是一款第一人称生存网络游戏,有点像野外求生,但这款游戏内容则更加丰富.刺激.血腥. 在这款游戏中玩家的第一任务就是活下来,而想要活下来你将要接受饥饿.干渴.寒冷等.游戏中玩家需要建造自己的庇护 ...

  7. ASP.NET2.0 GridView小技巧汇粹

    1)GridView绑定数据源控件,需要有编辑和删除选项按钮时,数据源控件必须提供SQL操作语句或存储过程调用,一般,我的推荐做法是,使用无意义的SQL语句或存储过程来使GridView的编辑和删除按 ...

  8. ps背景不变换字_分享五个超级实用的PS小技巧

    今天西瓜给大家分享五个PS的小技巧,特别容易上手操作而且很实用! 1.利用剪切蒙版给衣服加图案 首先第一步我们打开素材,使用快速选择工具,把裙子选出来,然后Ctrl+J复制出来 打开花纹背景素材,Ct ...

  9. window.open的小技巧分享(转)

    今天再次谈起window.open是因为发现了一个比较好玩的小技巧,详细内容我们稍后详细说明. 聊到window.open,不得不说明一下他的使用方法,主要有两种形式: window.open()没有 ...

  10. 提高PHP运行速度的小技巧

    使用PHP的最大1个优势就是速度快.一般情况下,PHP总是具有足够的速度支持Web内容动态生成,许多时候甚至无法找出比它更快的方法.然而,当面对庞大的访问量.高负荷的应用.有限的带宽,以及其他各种带来 ...

最新文章

  1. 今天,进程告诉我线程它它它它不想活了
  2. 逃离伪PHP程序员应该做的事
  3. 一种利用ADO连接池操作MySQL的解决方案(VC++)
  4. 动态规划之KMP字符匹配算法
  5. php开发入门,PHP开发入门教程之面向对象
  6. hadoop安装笔记-cdh4
  7. 10天确定Python,运行环境(超详细步骤)
  8. linux dns resolver,如何解决Linux in-kernel dns_resolver问题
  9. 【优化算法】差分松鼠搜索优化算法(DSSA)【含Matlab源码 1330期】
  10. 5.19 学习日记 活干得差不多了
  11. 【工具】ubuntu16安装sendip发包工具,模拟发送tcp/udp/icmp报文
  12. 台式计算机用电视机做显示器,用电视机当显示器会不会亮瞎眼?答案在此
  13. 创建个人博客只需五步骤——小白都能看会的详细过程,教你如何白嫖阿里云服务器
  14. NuGet是什么?为什么.NET项目中会有NuGet?如何使用NuGet程序包?
  15. html复习第六天 京东首页布局(导航栏/左侧)
  16. 开源魔兽世界私服搭建
  17. 软件测试基础 - 单元测试理论部分
  18. 解决TypeError:Cannot read properties of undefined并深入解读TypeError错误类型
  19. Ext3文件系统介绍
  20. 从一个实例中学习DTW算法

热门文章

  1. Spring MVC 切面 ResponseBodyAdvice 对返回值增强
  2. 2019最新 Java商城秒杀系统的设计与实战视频教程(SpringBoot版)_1-2核心技术列表...
  3. 阶段3 2.Spring_08.面向切面编程 AOP_3 spring基于XML的AOP-编写必要的代码
  4. Vue—实例成员computed和watch
  5. springboot中的controller注解没有生效
  6. 开发者必备的6款源码搜索引擎
  7. WPF捕获事件即使这个事件被标记为Handled
  8. Silverlight的依赖属性与附加属性(六)
  9. 使用canvas上传图片+上传进度
  10. spring mvc 的上传图片是怎么实现的?