VB無所不能之六:對程式啟動並執行監控

來源:互聯網
上載者:User
VB無所不能之六:對程式啟動並執行監控  ——作者:鐘聲 部落格地址:http://blog.csdn.net/useway  轉眼間,本系列文章已經寫到了第六個,今天寫點什麼呢?還是得寫,看似VB做不到的事情,那麼今天起就寫寫VB對作業系統的控制吧。 首先,說一說,VB對於被調用後的程式的監控方法。  原型函數簡介:     WaitForSingleObject
位置: Kernel32.dll VB聲明:Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
說明:
參數hHandle是一個事件的控制代碼,第二個參數dwMilliseconds是時間間隔。如果事件是有訊號狀態返回WAIT_OBJECT_0,如果時間超過dwMilliseconds值但時間事件還是無訊號狀態則返回WAIT_TIMEOUT。
  hHandle可以是下列對象的控制代碼:
  Change notification
  Console input
  Event
  Job
  Memory resource notification
  Mutex
  Process
  Semaphore
  Thread
  Waitable timer
  WaitForSingleObject函數用來檢測hHandle事件的訊號狀態,當函數的執行時間超過dwMilliseconds就返回,但如果參數dwMilliseconds為INFINITE時函數將直到相應時間事件變成有訊號狀態才返回,否則就一直等待下去,直到WaitForSingleObject有傳回值才執行後面的代碼。此外,當dwMilliseconds設定為特殊值0時,測試hHandle核心對象是否被激發,函數立即返回。
  傳回值:
   WAIT_ABANDONED 0x00000080:當hHandle為mutex時,如果擁有mutex的線程在結束時沒有釋放核心對象會引發此傳回值。
  WAIT_OBJECT_0 0x00000000 :核心對象已被啟用
  WAIT_TIMEOUT 0x00000102:等待逾時
  WAIT_FAILED 0xFFFFFFFF :出現錯誤,可通過GetLastError得到錯誤碼。

CloseHandle
位置:
Kernel32.dllVB聲明:Declare Function CloseHandle Lib "kernel32" Alias "CloseHandle" (ByVal hObject As Long) As Long
說明 :
關閉一個核心對象。其中包括檔案、檔案對應、進程、線程、安全和同步對象等。涉及檔案處理時,這個函數通常與vb的close命令相似。應儘可能的使用close,因為它支援vb的差錯控制。注意這個函數使用的檔案控制代碼與vb的檔案編號是完全不同的
傳回值:Long,非零表示成功,零表示失敗。會設定GetLastError
參數表
參數 類型及說明
hObject Long,欲關閉的一個對象的控制代碼
註解
除非對核心對象的所有引用都已關閉,否則該對象不會實際刪除 OpenProcess

位置: Kernel32.dll VB聲明:Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
說明:OpenProcess 函數用來開啟一個已存在的進程對象,並返回進程的控制代碼。
傳回值:
如成功,傳回值為指定進程的控制代碼。
如失敗,傳回值為空白,可調用GetLastError獲得錯誤碼。 好,我們來做一下實驗:  步驟1:建立一個項目;  步驟2:在視窗上建立一個按鈕;  步驟3:在預設表單中加入如下代碼:  Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long Const INFINITE = -1&
Const SYNCHRONIZE = &H100000  Private Sub Command1_Click()
    Dim i As Long
    Dim r As Long
    Dim p As Long
    i = Shell("NOTEPAD.EXE", vbNormalFocus)
    p = OpenProcess(SYNCHRONIZE, False, i)
    r = WaitForSingleObject(p, INFINITE)
    r = CloseHandle(p)
    MsgBox "記事本已經關閉"
End Sub
運行該程式得到如下畫面:  當點擊“Command1”的時候,記事本被開啟,當關閉記事本的時候,彈出提示框“記事本已經關閉”。 本程式示範了,如何用API控制VB開啟的程式,的簡單應用。'''  鐘聲寫的關於Java方面的書:  《Java程式員,上班那點事兒》:
前言目錄
卓越網銷售連結 
China-pub銷售連結
噹噹網銷售連結 《Java程式員,上班那點事》紀念帖

關於下載《Java程式員,上班那點事兒》的電子版

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.