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

代碼實(shí)現(xiàn)VB.NET Smartphone進(jìn)程啟動(dòng)案例

開發(fā) 后端
這里實(shí)現(xiàn)了VB.NET Smartphone進(jìn)程啟動(dòng)的案例,使用 ShellExecuteEx函數(shù)必須使用微軟在VB.net中不直接提供的指針操作,所以我只好根據(jù)網(wǎng)上的資料改寫了一個(gè)VB.net對(duì)內(nèi)存指針的封裝類。

學(xué)習(xí)VB.NET Smartphone時(shí),你可能會(huì)遇到VB.net實(shí)現(xiàn)Smartphone中進(jìn)程啟動(dòng)問題,這里將介紹VB.NET Smartphone進(jìn)程啟動(dòng)問題的解決方法,在這里拿出來和大家分享一下。開始時(shí)聲明時(shí)老是將ShellExecuteEx 和CreateProcess這兩個(gè)熟悉得不能再熟悉的Win32在VB 6中的聲明直接粘到程序中,僅是將VB6的long改為NET的int32,結(jié)果老是報(bào)錯(cuò)。在網(wǎng)上查了N天資料,才發(fā)現(xiàn)原來Win CE的核心API都是在一個(gè)coredll.dll文件中,使得我差點(diǎn)沒氣死!

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

  1. Imports System.Runtime.InteropServices '引及Net框架中對(duì)底層操作支持的命名空間  
  2. Public Class clsDAMSMobileMarshal '我寫的內(nèi)存管理類  
  3. #Region "與內(nèi)存有關(guān)的API聲明"  
  4. REM 以下是與內(nèi)存有關(guān)的移動(dòng)設(shè)備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. '申請(qǐng)本地內(nèi)存,返回一個(gè)指向該內(nèi)存塊的指針  
  21. Return LocalAlloc(LPTR, ni_i32Size)  
  22. End Function  
  23.  
  24. Public Shared Function fnFreeHLocal(ByRef ni_pLocal As IntPtr) As Int32  
  25. REM 釋放指定的內(nèi)存塊柄  
  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. '對(duì)指定的內(nèi)存塊重新定義大小  
  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. '將指定的字符串復(fù)制到一個(gè)內(nèi)存塊中,并返回該內(nèi)存塊的指針,這個(gè)指針必須使用fnFreeHLocal函數(shù)釋放  
  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 ' 包括***一個(gè)中止字符  
  51. tpTempA = fnAllocHLocal(ti32StringBufLength)  
  52. If tpTempA.Equals(IntPtr.Zero) = False Then '申請(qǐng)內(nèi)存成功  
  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. 有了這個(gè)輔助函數(shù),以下的API調(diào)用就簡單了,只需正確聲明即可,以下是ShellExecuteEx及CreateProcess涵數(shù)及其結(jié)構(gòu)的正確聲明(同樣是將代碼粘貼到一個(gè)新建模塊中即可調(diào)用):  
  62.  
  63. imports System.Runtime.InteropServices  
  64. REM API常數(shù)聲明-------------------------  
  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,只可以老老實(shí)實(shí)聲明為Intptr  
  77. Public lpFile As IntPtr 'LPCTSTR,這種類型不能聲明為string,只可以老老實(shí)實(shí)聲明為Intptr  
  78. Public lpParameters As IntPtr 'LPCTSTR,這種類型不能聲明為string,只可以老老實(shí)實(shí)聲明為Intptr  
  79. Public lpDirectory As IntPtr 'LPCTSTR,這種類型不能聲明為string,只可以老老實(shí)實(shí)聲明為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. '在調(diào)用后釋放結(jié)構(gòu)中的內(nèi)存塊  
  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函數(shù)聲明  
  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 
責(zé)任編輯:田樹 來源: 博客
相關(guān)推薦

2009-10-27 09:31:32

VB.NET啟動(dòng)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窗口關(guān)閉

2010-01-20 13:42:10

VB.NET訪問INIGetPrivateP

2009-10-29 09:57:16

VB.NET實(shí)現(xiàn)數(shù)據(jù)綁

2010-01-22 15:09:11

VB.NET下載程序

2009-10-27 10:58:00

VB.NET文件名排序

2010-01-22 17:12:08

VB.NET訪問Ifr

2009-11-03 13:16:58

VB.NET讀取文件

2009-10-26 17:38:22

VB.NET實(shí)現(xiàn)縮略圖

2010-01-14 17:03:01

VB.NET獲取網(wǎng)卡地

2009-10-27 09:59:17

VB.NET動(dòng)態(tài)代碼

2010-01-13 09:31:39

VB.NET窗體打印

2010-01-15 11:31:02

VB.NET接口實(shí)現(xiàn)多

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-26 17:24:42

VB.NET終端服務(wù)啟

2010-01-12 10:48:54

VB.NET LIST
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)