wince C#开发 小技巧
来源:互联网 发布:唐嫣直播软件 编辑:程序博客网 时间:2024/06/17 23:23
1、我们知道,在使用Windows的开发机上用C#启动一个外部程序的方法有很多,但这些方法用在使用WinCE的目标工控机上都无能为力,现在小嫚儿以打开一个IE为例,介绍如何在WinCE下使用C#来打开一个外部文件:首先添加命名空间
using System.Runtime.InteropServices;,然后调用API函数:
[DllImport("coredll.Dll", EntryPoint="CreateProcess", SetLastError=true)]
extern static int CreateProcess(string strImageName, string strCmdLine, IntPtr pProcessAttributes, IntPtr pThreadAttributes , int bInheritsHandle, int dwCreationFlags, IntPtr pEnvironment, IntPtr pCurrentDir, IntPtr bArray, ProcessInfo oProc);
public class ProcessInfo
{
public Int32 hProcess;
public Int32 hThread;
public Int32 ProcessID;
public Int32 ThreadID;
}
最后就可以编写你需要打开IE的代码了(点击一个按钮打开IE浏览器中相应内容,此例程要求打开目标工控机硬盘上的Readme文件):
private void button_Click(object sender, System.EventArgs e)
{
ProcessInfo pi = new ProcessInfo();
CreateProcess("//windows//iesample.exe" , "//HardDisk//Readme.htm", IntPtr.Zero, IntPtr.Zero, 0, 0, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, pi);
}
2、有时候我们会希望我们的程式只被执行一次,VB的时代我们会用App.PrevInstance,而.net的时代我们可以用下列方式实现
[STAThread]
static void Main()
{
//如果跟本程式命名的行程只有一个才执行程式
if (System.Diagnostics.Process.GetProcessesByName(
Application.ProductName).Length == 1)
{
Application.Run(new Form1());
}
}
但此方法在WinCE下无法实现,所以我们还是要先调用动态链接库,
[DllImport("coredll.Dll")]
private static extern int GetLastError();
[DllImport("coredll.Dll")]
private static extern int ReleaseMutex(IntPtr hMutex);
[DllImport("coredll.Dll")]
private static extern IntPtr CreateMutex(SECURITY_ATTRIBUTES lpMutexAttributes,bool bInitialOwner,string lpName);
[StructLayout( LayoutKind.Sequential)]
public class SECURITY_ATTRIBUTES
{
public int nLength;
public int lpSecurityDescriptor;
public int bInheritHandle;
}
const int ERROR_ALREADY_EXISTS = 0183;
然后编写代码
static void Main()
{
#region Api_Call CreateMutex;
IntPtr hMutex;
hMutex=CreateMutex(null,false,"程序名");
if (GetLastError()!=ERROR_ALREADY_EXISTS)
{
Application.Run(new Frmmenu());
}
else
{
MessageBox.Show("本程序只允许同时运行一个");
ReleaseMutex(hMutex);
}
#endregion
}
3、有时我们希望自己的程序能做到激活一个窗体,但在 .NET Framework 中没有函数可以激活属于另外一个进程或程序的窗体。所以,我们还是要调用API函数来实现:
using System.Runtime.InteropServices;
[DllImport("coredll.Dll")]
public static extern IntPtr FindWindow(String classname, String title);
[DllImport("coredll.Dll")]
public static extern void SetForegroundWindow(IntPtr hwnd);
然后使用下列代码即可
IntPtr hDlg;
hDlg=FindWindow(null, "窗口标题");
SetForegroundWindow( hDlg );
最后,WinCE下的C#里不支持GroupBox控件,建议使用Panel控件代替;不支持Frame控件,如果非要达到那样的效果,可以用Label和TextBox组和起来应付一下。
其实,任何时候,只要.NET Framework无法满足编程者的需要,通常都可以使用托管(interop)机制直接与Windows 交互。大家也许看出调用原有的[DllImport("user32 .Dll")]动态链接库时无法满足WinCE下程序要求,所以我们调用了[DllImport("coredll.Dll")],并不是小嫚儿自己想到去调用它的,而是在网上看到了一篇“bitsbird”写的例程,很多人将自己的经验无私的与别人分享,所以小嫚儿写了此篇文章,虽然让行家看起来文章很浅显,但希望能给象小嫚儿这样的初学者提供一些捷径。
- wince C#开发 小技巧
- C# 开发小技巧总结
- WinCE下使用C#的几个小技巧
- wince小技巧
- c# WINCE 使用技巧
- c#开发windows应用程序几个小技巧
- c#开发WinForm的几个小技巧
- C# 开发和使用的小技巧
- 四个WinCE常用小技巧
- 隐藏任务栏---WinCE小技巧
- C#开发wince应用程序
- 去掉桌面快捷方式-----WinCE小技巧&心得
- 隐藏状态栏-----WinCE小技巧&心得
- wince小技巧(不断添加)
- C# wince DirectShow 开发接口
- Asp.net &C#开发中的一些注意事项及小技巧
- Asp.net &C#开发中的一些注意事项及小技巧
- c# winform项目开发中常用到得一些小技巧
- 我安装完apache、mysql、php后在浏览器上输入http://127.0.0.1:10080/时出现Index of /。。。。。
- 能兼职女优的程序员 成新一代码农女神
- Eclipse快捷键大全(转载)
- Quartus II 11.0 套件安装指南(带破解)
- 通过wifi调试android程序
- wince C#开发 小技巧
- java的线程调度
- Sql Server 汉字转拼音(无数据表版)
- [最短路]POJ 3594 Escort of Dr. Who How#最短路+枚举
- oracle 定时执行存储过程
- Sql Server取汉字拼音首字母和汉字首笔划
- 单链表判环判交问题
- proxool 连接池 配置笔记
- Ogre学习笔记(三)OgreMFC 单文档分割窗口