成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

代碼實現VB.NET Smartphone進程啟動案例

開發 后端
這里實現了VB.NET Smartphone進程啟動的案例,使用 ShellExecuteEx函數必須使用微軟在VB.net中不直接提供的指針操作,所以我只好根據網上的資料改寫了一個VB.net對內存指針的封裝類。

學習VB.NET Smartphone時,你可能會遇到VB.net實現Smartphone中進程啟動問題,這里將介紹VB.NET Smartphone進程啟動問題的解決方法,在這里拿出來和大家分享一下。開始時聲明時老是將ShellExecuteEx 和CreateProcess這兩個熟悉得不能再熟悉的Win32在VB 6中的聲明直接粘到程序中,僅是將VB6的long改為NET的int32,結果老是報錯。在網上查了N天資料,才發現原來Win CE的核心API都是在一個coredll.dll文件中,使得我差點沒氣死!

#T#還有一點是SHELLEXECUTEINFO結構中的lpFile這種指向字符串常量的指針由于字符的編碼問題不能象在Win32編程中簡單聲明為String類型,所在必須聲明為Intptr,這樣問題就出現了,使用 ShellExecuteEx函數必須使用微軟在VB.net中不直接提供的指針操作,所以我只好根據網上的資料改寫了一個VB.net對內存指針的封裝類,詳細VB.NET Smartphone代碼及解釋如下(新建一個模塊,將以下代碼粘貼進去即可使用):

  1. Imports System.Runtime.InteropServices '引及Net框架中對底層操作支持的命名空間  
  2. Public Class clsDAMSMobileMarshal '我寫的內存管理類  
  3. #Region "與內存有關的API聲明"  
  4. REM 以下是與內存有關的移動設備API  
  5. Public Declare Function LocalAlloc Lib "coredll.dll" Alias "LocalAlloc" (ByVal wFlags As Int32, _  
  6. ByVal wBytes As Int32) As IntPtr  
  7. Public Declare Function LocalFree Lib "coredll.dll" Alias "LocalFree" (ByVal hMem As Int32) As Int32  
  8. Public Declare Function LocalLock Lib "coredll.dll" Alias "LocalLock" (ByVal hMem As Int32) As Int32  
  9. Public Declare Function LocalReAlloc Lib "coredll.dll" Alias "LocalReAlloc" (ByVal hMem As IntPtr, _  
  10. ByVal wBytes As Int32, ByVal wFlags As Int32) As IntPtr  
  11. #End Region  
  12. #Region "API常量聲明"  
  13. Public Const LMEM_FIXED = 0 
  14. Public Const LMEM_MOVEABLE = &H2  
  15. Public Const LMEM_ZEROINIT = &H40  
  16. Public Const LPTR = LMEM_FIXED Or LMEM_ZEROINIT  
  17. #End Region  
  18.  
  19. Public Shared Function fnAllocHLocal(ByVal ni_i32Size As Int32) As IntPtr  
  20. '申請本地內存,返回一個指向該內存塊的指針  
  21. Return LocalAlloc(LPTR, ni_i32Size)  
  22. End Function  
  23.  
  24. Public Shared Function fnFreeHLocal(ByRef ni_pLocal As IntPtr) As Int32  
  25. REM 釋放指定的內存塊柄  
  26. Dim ti32FunctionReturnValue As Int32  
  27. If ni_pLocal.Equals(IntPtr.Zero) = False Then  
  28. ti32FunctionReturnValue = (LocalFree(ni_pLocal.ToInt32))  
  29. If ti32FunctionReturnValue = 0 Then  
  30. ni_pLocal = IntPtr.Zero  
  31. End If  
  32. End If  
  33. Return (ti32FunctionReturnValue)  
  34. End Function  
  35.  
  36. Public Shared Function fnReAllocHLocal(ByVal ni_pIn As IntPtr, ByVal ni_i32Size As Int32) As IntPtr  
  37. '對指定的內存塊重新定義大小  
  38. Return LocalReAlloc(ni_pIn, ni_i32Size, LMEM_MOVEABLE)  
  39. End Function  
  40.  
  41. Public Shared Function fnStringToHLocalUni(ByVal ni_strIn As String) As IntPtr  
  42. '將指定的字符串復制到一個內存塊中,并返回該內存塊的指針,這個指針必須使用fnFreeHLocal函數釋放  
  43. Dim ti32StringBufLength As Int32  
  44. Dim tpTempA As IntPtr  
  45.  
  46. If Not (ni_strIn Is Nothing) Then  
  47. If ni_strIn.Length = 0 Then  
  48. Return IntPtr.Zero  
  49. Else  
  50. ti32StringBufLength = (ni_strIn.Length + 1) * 2 ' 包括***一個中止字符  
  51. tpTempA = fnAllocHLocal(ti32StringBufLength)  
  52. If tpTempA.Equals(IntPtr.Zero) = False Then '申請內存成功  
  53. Marshal.Copy(ni_strIn.ToCharArray, 0, tpTempA, ni_strIn.Length)  
  54. Return tpTempA  
  55. End If  
  56. End If  
  57. End If  
  58. End Function  
  59. End Class  
  60.  
  61. 有了這個輔助函數,以下的API調用就簡單了,只需正確聲明即可,以下是ShellExecuteEx及CreateProcess涵數及其結構的正確聲明(同樣是將代碼粘貼到一個新建模塊中即可調用):  
  62.  
  63. imports System.Runtime.InteropServices  
  64. REM API常數聲明-------------------------  
  65. Public Const SW_SHOWNORMAL = 1 
  66. Public Const gcNORMAL_PRIORITY_CLASS = &H20  
  67. Public Const gcINFINITE = &HFFFF  
  68. Public Const WAIT_TIMEOUT = &H102&  
  69.  
  70. #Region "Structure SHELLEXECUTEINFO"  
  71. <StructLayout(LayoutKind.Sequential)> _  
  72. Structure SHELLEXECUTEINFO  
  73. Public cbSize As Int32  
  74. Public fMask As Int32  
  75. Public hwnd As IntPtr  
  76. Public lpVerb As IntPtr 'LPCTSTR,這種類型不能聲明為string,只可以老老實實聲明為Intptr  
  77. Public lpFile As IntPtr 'LPCTSTR,這種類型不能聲明為string,只可以老老實實聲明為Intptr  
  78. Public lpParameters As IntPtr 'LPCTSTR,這種類型不能聲明為string,只可以老老實實聲明為Intptr  
  79. Public lpDirectory As IntPtr 'LPCTSTR,這種類型不能聲明為string,只可以老老實實聲明為Intptr  
  80. Public nShow As Int32  
  81. Public hInstApp As IntPtr  
  82.  
  83. 'Optional members  
  84. Public lpIDList As IntPtr 'LPVOID  
  85. Public lpClass As IntPtr 'LPCTSTR  
  86. Public hkeyClass As Int32  
  87. Public dwHotKey As Int32  
  88. Public hIcon As Int32  
  89. Public hProcess As IntPtr  
  90.  
  91. Public Sub Dispose()  
  92. '在調用后釋放結構中的內存塊  
  93. clsDAMSMobileMarshal.fnFreeHLocal(Me.lpVerb)  
  94. clsDAMSMobileMarshal.fnFreeHLocal(Me.lpFile)  
  95. clsDAMSMobileMarshal.fnFreeHLocal(Me.lpParameters)  
  96. clsDAMSMobileMarshal.fnFreeHLocal(Me.lpDirectory)  
  97. End Sub  
  98. End Structure  
  99. #End Region  
  100.  
  101. #Region "Structure STARTUPINFO"  
  102. <StructLayout(LayoutKind.Sequential)> _  
  103. Public Structure STARTUPINFO  
  104. Public cb As Int32  
  105. Public lpReserved As IntPtr  
  106. Public lpDesktop As IntPtr  
  107. Public lpTitle As IntPtr  
  108. Public dwX As Int32  
  109. Public dwY As Int32  
  110. Public dwXSize As Int32  
  111. Public dwYSize As Int32  
  112. Public dwXCountChars As Int32  
  113. Public dwYCountChars As Int32  
  114. Public dwFillAttribute As Int32  
  115. Public dwFlags As Int32  
  116. Public wShowWindow As Int16  
  117. Public cbReserved2 As Int16  
  118. Public lpReserved2 As Int32  
  119. Public hStdInput As Int32  
  120. Public hStdOutput As Int32  
  121. Public hStdError As Int32  
  122. End Structure  
  123. #End Region  
  124.  
  125. #Region "Structure PROCESS_INFORMATION"  
  126. <StructLayout(LayoutKind.Sequential)> _  
  127. Public Structure PROCESS_INFORMATION  
  128. Public hProcess As IntPtr  
  129. Public hThread As IntPtr  
  130. Public dwProcessId As Int32  
  131. Public dwThreadId As Int32  
  132. End Structure  
  133. #End Region  
  134.  
  135. REM api函數聲明  
  136. #Region "Function CreateProcess"  
  137. public Overloads Declare Function CreateProcess Lib "coredll.dll" (ByVal imageName As String, _  
  138. ByVal cmdLine As String, _  
  139. ByVal lpProcessAttributes As IntPtr, _  
  140. ByVal lpThreadAttributes As IntPtr, _  
  141. ByVal boolInheritHandles As Int32, _  
  142. ByVal dwCreationFlags As Int32, _  
  143. ByVal lpEnvironment As IntPtr, _  
  144. ByVal lpszCurrentDir As IntPtr, _  
  145. ByRef si As STARTUPINFO, _  
  146. ByRef pi As PROCESS_INFORMATION _  
  147. ) As Integer  
  148. #End Region  
  149.  
  150. #Region "Function CloseHandle"  
  151. Public Declare Function CloseHandle Lib "CoreDll.dll" (ByVal Handle As IntPtr) As Int32  
  152. #End Region  
  153.  
  154. #Region "Function WaitForSingleObjectEx"  
  155. Public Declare Function WaitForSingleObjectEx Lib "coredll.dll" (ByVal hHandle As IntPtr, _  
  156. ByVal dwMilliseconds As Int32, _  
  157. ByVal bAlertable As Int32 _  
  158. ) As Int32  
  159. #End Region  
  160.  
  161. #Region "Function ShellExecuteEx"  
  162. Public Declare Function ShellExecuteEx Lib "coredll 
責任編輯:田樹 來源: 博客
相關推薦

2009-10-27 09:31:32

VB.NET啟動Sma

2009-11-03 10:18:46

VB.NET繼承

2009-10-29 14:02:24

VB和VB.NET比較

2010-01-08 15:41:36

VB.NET窗口關閉

2009-10-29 09:57:16

VB.NET實現數據綁

2010-01-22 15:09:11

VB.NET下載程序

2010-01-20 13:42:10

VB.NET訪問INIGetPrivateP

2009-10-27 10:58:00

VB.NET文件名排序

2009-11-03 13:16:58

VB.NET讀取文件

2009-10-26 17:38:22

VB.NET實現縮略圖

2010-01-14 17:03:01

VB.NET獲取網卡地

2010-01-22 17:12:08

VB.NET訪問Ifr

2009-10-27 09:59:17

VB.NET動態代碼

2009-10-26 17:10:53

VB.NET word

2009-11-02 10:53:34

VB.NET INI文

2009-11-10 14:30:33

VB.NET多窗體

2009-10-23 13:22:25

VB.NET實現拖動圖

2009-10-12 14:32:40

VB.NET實現定時關

2010-01-13 09:31:39

VB.NET窗體打印

2009-10-26 11:04:36

VB.NET UDP協
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕在线视频一区二区三区 | 欧美激情视频一区二区三区在线播放 | 成人av一区二区三区 | 日韩中文字幕一区 | 欧美国产日韩在线观看 | 日韩在线免费播放 | 在线视频一区二区三区 | 欧美精品一区二区在线观看 | 青草视频在线 | 看一级黄色毛片 | 成人av网站在线观看 | 日韩精品视频一区二区三区 | 三级av免费 | 91中文视频 | 日韩在线免费看 | 欧美日韩在线观看一区二区三区 | 亚洲国产中文在线 | 亚洲欧美激情四射 | 亚洲高清一区二区三区 | 国产资源在线视频 | 国产激情小视频 | 国产一区二区三区 | 成年男女免费视频网站 | 成人做爰69片免费观看 | 先锋资源网站 | 在线亚洲一区二区 | 91精品国产欧美一区二区 | 色综合色综合色综合 | 妖精视频一区二区三区 | 亚洲国产一区二区三区在线观看 | 免费成人高清在线视频 | 九色在线视频 | 亚洲精品电影在线 | 精品久久久久一区二区国产 | 日本 欧美 国产 | 日韩 欧美 二区 | 久久精点视频 | 成年人在线观看视频 | 大象一区 | 亚洲男人天堂 | 婷婷久久网 |