c# wince 小技巧
转:http://developer.51cto.com/art/200908/144299.htm
C# Windows CE使用的一些感受:使用Windows的开发机上用C#启动一个外部程序的方法有很多,但这些方法用在使用WinCE的目标工控机上都无能为力。
C# Windows CE使用1、
现在以打开一个IE为例,介绍如何在WinCE下使用C#来打开一个外部文件:
首先添加命名空间
- usingSystem.Runtime.InteropServices;,
然后调用API函数:
- [DllImport("coredll.Dll",
- EntryPoint="CreateProcess",SetLastError=true)]
- extern static int CreateProcess(
- string strImageName,string strCmdLine,
- IntPtrpProcessAttributes,IntPtrpThreadAttributes,
- intbInheritsHandle,intdwCreationFlags,
- IntPtrpEnvironment, IntPtrpCurrentDir,
- IntPtrbArray,ProcessInfooProc);
- publicclassProcessInfo
- {
- publicInt32hProcess;
- publicInt32hThread;
- publicInt32ProcessID;
- publicInt32ThreadID;
- }
最后就可以编写需要打开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);
- }
C# Windows CE使用2、
有时候我们会希望我们的程式只被执行一次,VB的时代我们会用App.PrevInstance,而.net的时代我们可以用下列方式实现
- [STAThread]
- staticvoidMain()
- {
- //如果跟本程式命名的行程只有一个才执行程式
- if(System.Diagnostics.Process.
- GetProcessesByName(
- Application.ProductName).Length==1)
- {
- Application.Run(newForm1());
- }
- }
但此方法在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;
然后编写代码
- staticvoidMain()
- {
- #regionApi_CallCreateMutex;
- IntPtrhMutex;
- hMutex=CreateMutex(null,false,"程序名");
- if(GetLastError()!=ERROR_ALREADY_EXISTS)
- {
- Application.Run(newFrmmenu());
- }
- else
- {
- MessageBox.Show("本程序只允许同时运行一个");
- ReleaseMutex(hMutex);
- }
- #endregion
- }
C# Windows CE使用3、
在.NETFramework中没有函数可以激活属于另外一个进程或程序的窗体,所以我们要通过调用API函数来实现:
- usingSystem.Runtime.InteropServices;
- [DllImport("coredll.Dll")]
- publicstaticexternIntPtrFindWindow(
- Stringclassname,Stringtitle);
- [DllImport("coredll.Dll")]
- publicstaticexternvoidSetForegroundWindow(IntPtrhwnd);
然后使用下列代码即可
- IntPtrhDlg;
- hDlg=FindWindow(null,"窗口标题");
- 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 小技巧相关推荐
- latex 公式不居中_LaTex小技巧,祝你论文一臂之力!
LaTex作为常用的排版系统,已深入到大家的工作和学业中.但是很多小伙伴反馈说:LaTex公式编辑复杂.表格处理麻烦等.为此,我们特别收集了一些LaTex的小技巧,希望大家都可以get到! 公式篇 首 ...
- 中文 查询_查询商标,商标注册通过分析的几个小技巧
前面我们说到了商标注册前,通常情况下一定要进行商标查询,要进行注册通过可行性分析.只有这样才能保证基本的商标注册通过率,不至于无畏的浪费我们的时间和金钱. 1.我们在进行商标查询,输入要查询的商标时, ...
- 日常安排php,PHP日常开发小技巧
PHP日常开发小技巧 导语:PHP语言中,如果你懂得一些开发技巧,那么对你学PHP,会有很大的帮助.下面的是百分网小编为大家整理的PHP日常开发小技巧,希望对你能有所帮助. PHP批量取得checkb ...
- 敲代码括号技巧_阅码神奇Souceinsight使用小技巧总结
/****与SI的初遇****/ 对于大部分人第一次使用SI来说应该是对原IDE集成开发环境有很大的抱怨吧,确实我也一样,对于做嵌入式开发使用各种集成开发工具,比如说Keil,IAR等等,可能还有更加 ...
- eplan文本怎么换行_EPLAN几个使用的小技巧,非常有用
Eplan P8 的一些小技巧 1. 页名后缀由字母变数字 ? 选项 - 设置 - 项目 - 管理 - 页 - 页名 - 子页标识 2. 修改自动连接电缆颜色 ? 选项 - 层管理 - 符号图形 3. ...
- rust熔炉怎么带走_Rust游戏中12个实用小技巧,包含无伤下坠、直梯爬楼
Rust是一款第一人称生存网络游戏,有点像野外求生,但这款游戏内容则更加丰富.刺激.血腥. 在这款游戏中玩家的第一任务就是活下来,而想要活下来你将要接受饥饿.干渴.寒冷等.游戏中玩家需要建造自己的庇护 ...
- ASP.NET2.0 GridView小技巧汇粹
1)GridView绑定数据源控件,需要有编辑和删除选项按钮时,数据源控件必须提供SQL操作语句或存储过程调用,一般,我的推荐做法是,使用无意义的SQL语句或存储过程来使GridView的编辑和删除按 ...
- ps背景不变换字_分享五个超级实用的PS小技巧
今天西瓜给大家分享五个PS的小技巧,特别容易上手操作而且很实用! 1.利用剪切蒙版给衣服加图案 首先第一步我们打开素材,使用快速选择工具,把裙子选出来,然后Ctrl+J复制出来 打开花纹背景素材,Ct ...
- window.open的小技巧分享(转)
今天再次谈起window.open是因为发现了一个比较好玩的小技巧,详细内容我们稍后详细说明. 聊到window.open,不得不说明一下他的使用方法,主要有两种形式: window.open()没有 ...
- 提高PHP运行速度的小技巧
使用PHP的最大1个优势就是速度快.一般情况下,PHP总是具有足够的速度支持Web内容动态生成,许多时候甚至无法找出比它更快的方法.然而,当面对庞大的访问量.高负荷的应用.有限的带宽,以及其他各种带来 ...
最新文章
- 今天,进程告诉我线程它它它它不想活了
- 逃离伪PHP程序员应该做的事
- 一种利用ADO连接池操作MySQL的解决方案(VC++)
- 动态规划之KMP字符匹配算法
- php开发入门,PHP开发入门教程之面向对象
- hadoop安装笔记-cdh4
- 10天确定Python,运行环境(超详细步骤)
- linux dns resolver,如何解决Linux in-kernel dns_resolver问题
- 【优化算法】差分松鼠搜索优化算法(DSSA)【含Matlab源码 1330期】
- 5.19 学习日记 活干得差不多了
- 【工具】ubuntu16安装sendip发包工具,模拟发送tcp/udp/icmp报文
- 台式计算机用电视机做显示器,用电视机当显示器会不会亮瞎眼?答案在此
- 创建个人博客只需五步骤——小白都能看会的详细过程,教你如何白嫖阿里云服务器
- NuGet是什么?为什么.NET项目中会有NuGet?如何使用NuGet程序包?
- html复习第六天 京东首页布局(导航栏/左侧)
- 开源魔兽世界私服搭建
- 软件测试基础 - 单元测试理论部分
- 解决TypeError:Cannot read properties of undefined并深入解读TypeError错误类型
- Ext3文件系统介绍
- 从一个实例中学习DTW算法
热门文章
- Spring MVC 切面 ResponseBodyAdvice 对返回值增强
- 2019最新 Java商城秒杀系统的设计与实战视频教程(SpringBoot版)_1-2核心技术列表...
- 阶段3 2.Spring_08.面向切面编程 AOP_3 spring基于XML的AOP-编写必要的代码
- Vue—实例成员computed和watch
- springboot中的controller注解没有生效
- 开发者必备的6款源码搜索引擎
- WPF捕获事件即使这个事件被标记为Handled
- Silverlight的依赖属性与附加属性(六)
- 使用canvas上传图片+上传进度
- spring mvc 的上传图片是怎么实现的?