自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C# Windows CE使用小技巧實例

開發(fā) 后端
C# Windows CE使用小技巧實例主要向你介紹了WinCE下使用C#來打開一個外部文件、單步執(zhí)行程序等等,希望對你學習了解C# Windows CE使用有所幫助。

C# Windows CE使用的一些感受:使用Windows的開發(fā)機上用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.  
  15. publicInt32hProcess;  
  16.  
  17. publicInt32hThread;  
  18.  
  19. publicInt32ProcessID;  
  20.  
  21. publicInt32ThreadID;  
  22.  

最后就可以編寫需要打開IE的代碼了(點擊一個按鈕打開IE瀏覽器中相應內容,此例程要求打開目標工控機硬盤上的Readme文件):

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

C# Windows CE使用2、

有時候我們會希望我們的程式只被執(zhí)行一次,VB的時代我們會用App.PrevInstance,而.net的時代我們可以用下列方式實現

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

但此方法在WinCE下無法實現,所以我們還是要先調用動態(tài)鏈接庫,

  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.  
  21. publicintnLength;  
  22.  
  23. publicintlpSecurityDescriptor;  
  24.  
  25. publicintbInheritHandle;  
  26.  
  27. }  
  28.  
  29. constintERROR_ALREADY_EXISTS=0183;  

然后編寫代碼

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

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")]動態(tài)鏈接庫時無法滿足WinCE下程序要求,所以我們調用了[DllImport("coredll.Dll")]。希望這篇文章能給初學者提供一些捷徑。

C# Windows CE使用的一些感受和實例的介紹就向你介紹到這里,希望對你了解C# Windows CE使用有所幫助。

【編輯推薦】

  1. C#Windows應用程序開發(fā)之窗體控件
  2. C#Windows應用程序開發(fā)之添加菜單
  3. C#Windows應用程序開發(fā)之添加狀態(tài)條
  4. C#Windows應用程序開發(fā)之事件處理器
  5. c# Windows CE讀取電池電量的實現
責任編輯:仲衡 來源: wmisv.com.cn
相關推薦

2009-08-17 09:57:00

C# Windows

2009-08-17 10:29:58

C# Windows

2009-08-17 10:26:34

C# Windows

2009-08-17 10:11:12

C# Windows

2009-08-17 10:17:01

C# Windows

2009-08-17 10:02:58

C# Windows

2009-08-17 10:22:19

C# Windows

2009-08-17 09:27:12

c# Windows

2009-08-27 15:17:18

C# interfacinterface使用

2009-09-09 22:31:21

c# textbox失

2009-09-14 14:25:53

C# Lambda EC# Lambda

2009-08-14 16:32:50

C#啟動Windows

2009-09-02 18:44:19

C#遞歸

2009-08-13 14:56:46

C#的結構體使用

2009-09-04 15:53:42

C#內存流

2009-08-26 13:36:33

C#打印控件

2009-12-31 10:49:36

VPN配置實例

2009-08-14 17:04:19

Windows后臺服務

2009-08-27 16:54:59

C#開發(fā)技巧

2009-08-11 15:44:05

C#基本技巧
點贊
收藏

51CTO技術棧公眾號