導論:
在 Windows API 中, hProcess 與 ProcessId 是不一樣的,當然與 hInstance 亦是完全不同的,在使用上時不要搞混了
原則上, hProcess 不會超過 &H7FFFFFFF (2147483647),ProcessId 不會小於 &H80000000 (-1 ~ -2147483648) ,在本網頁中函數名若未特別註明, *Process* 為相關程序代號 (hProcess) 之函數, *ProcessId* 為相關程序編號 (ProcessId) 之函數
小秘訣:
特別函數之傳回值比較:
函數 特殊值 說明 GetCurrentProcess &H7FFFFFFF GetCurrentProcessId myGetWndThreadProcessId(Me.hWnd) 取得視窗代號程序編號 GetCurrentThreadId App.ThreadID
myGetCreateThreadProcessId(Me.hWnd)取得建立視窗代號執行緒編號
函數名:myEnumProcessId,傳回列舉程序陣列
引數 類型 說明 dwEnumItem 可省略 enum_ProcessID,傳回 ProcessID 陣列,預設值
enum_ExeFile,傳回程序檔名陣列
enum_UsageCount,傳回程序被執行份數陣列
enum_DefaultHeapID,傳回 DefaultHeapID 陣列
enum_ModuleID,傳回 ModuleID 陣列
enum_ThreadsCount,傳回程序內執行緒個數陣列
enum_ParentProcessID,傳回程序父 ProcessID 陣列
enum_pcPriClassBase,傳回 pcPriClassBase 陣列範例:
tp = myEnumProcessId(enum_ExeFile)
For i = LBound(tp) To UBound(tp) : Debug.Print i, tp(i) : Next i
' 傳回值為正在視窗內執行的完整長檔名的文字陣列 (不重複)說明:
本函數僅支援 Windows 95/98 及 Windows NT 2000 以上系統,若在 IDE 環境中, VB 為程序母體,則傳回 VB 程式
函數名:myGetProcessId,傳回指定程序編號內容
引數 類型 說明 dwProcessId 長整數 ProcessID dwGetItem 可省略 enum_ProcessID,傳回 ProcessID ,預設值
enum_ExeFile,傳回程序檔名
enum_UsageCount,傳回程序被執行份數
enum_DefaultHeapID,傳回 DefaultHeapID
enum_ModuleID,傳回 ModuleID
enum_ThreadsCount,傳回程序內執行緒個數
enum_ParentProcessID,傳回程序父 ProcessID
enum_pcPriClassBase,傳回 pcPriClassBase範例:
Debug.Print myGetProcessId(dwProcessId, enum_ExeFile)
' 傳回值為程序的完整長檔名說明:
本函數僅支援 Windows 95/98 及 Windows NT 2000 以上系統,若在 IDE 環境中, VB 為程序母體,則傳回 VB 程式
函數名:myGetProcessIdFileName,傳回指定視窗代號完整長檔名
引數 類型 說明 hWnd 長整數 視窗代號 範例:
Debug.Print myGetProcessIdFileName(Me.hWnd)
' 傳回 C:\PROGRAM FILES\DEVSTUDIO\VB\VB5.EXE說明:
本函數僅支援 Windows 95/98 及 Windows NT 2000 以上系統,若在 IDE 環境中, VB 為程序母體,則傳回 VB 程式
函數名:myGetWndThreadProcessId,傳回指定視窗代號的程序編號
引數 類型 說明 hWnd 長整數 視窗代號 範例:
Debug.Print myGetWndThreadProcessId(Me.hWnd)
' 傳回指定視窗代號的程序編號
函數名:myGetCreateThreadProcessId,傳回建立指定視窗代號的執行緒編號
引數 類型 說明 hWnd 長整數 視窗代號 範例:
Debug.Print myGetCreateThreadProcessId(Me.hWnd)
' 傳回建立指定視窗代號的執行緒編號
函數名:myEnumProcessIdModule,傳回列舉模組 (函式庫) 陣列
引數 類型 說明 dwProcessId 長整數 ProcessID dwEnumItem 可省略 enum_ProcessID,傳回 ProcessID 陣列
enum_ExeFile,傳回模組完整路徑檔名陣列
enum_UsageCount,傳回模組全域被執行份數陣列
enum_ProcessCount,傳回模組在 dwProcessId 被執行份數陣列
enum_ModuleID,傳回 ModuleID 陣列,預設值
enum_ModuleBaseAddr,傳回模組在記憶體基本位置陣列
enum_ModuleBaseSize,傳回模組在記憶體基本大小陣列
enum_hModule,傳回模組代號陣列
enum_ModuleName,傳回模組檔名陣列 (無路徑)範例:
ProcId = myGetWndThreadProcessId(Me.hWnd)
tp = myEnumProcessIdModule(ProcId, enum_ExeFile)
For i = LBound(tp) To UBound(tp) : Debug.Print i, tp(i) : Next i
' 傳回值為正在視窗內執行的完整長檔名的文字陣列 (不重複)說明:
本函數僅支援 Windows 95/98 及 Windows NT 2000 以上系統,若在 IDE 環境中, VB 為程序母體,則傳回 VB 程式的函式庫群
函數名:myFindProcessId,傳回指定程序內容
引數 類型 說明 ProcessName 字串 完整長檔名 dwGetItem 可省略 enum_ProcessID,傳回 ProcessID ,預設值
enum_ExeFile,傳回程序檔名
enum_UsageCount,傳回程序被執行份數
enum_DefaultHeapID,傳回 DefaultHeapID
enum_ModuleID,傳回 ModuleID
enum_ThreadsCount,傳回程序內執行緒個數
enum_ParentProcessID,傳回程序父 ProcessID
enum_pcPriClassBase,傳回 pcPriClassBase範例:
Debug.Print myFindProcessId("c:\program files\internet explorer\iexplore.exe")
' 傳回值為 ProcessId說明:
本函數僅支援 Windows 95/98 及 Windows NT 2000 以上系統,若在 IDE 環境中, VB 為程序母體,則傳回 VB 程式
函數名:myGetHandleProcess,由指定程序編號取得程序代號,傳回 hProcess
引數 類型 說明 ProcessId 長整數 程序編號 範例:
Debug.Print myGetHandleProcess(ProcessId)
' 傳回指定編號的程序代號 (hProcess)
函數名:myTerminateProcessId,終結指定的程序編號
引數 類型 說明 ProcessId 長整數 程序編號 範例:
myTerminateProcessId hProcessId
' 終結指定的程序編號
優先順序又稱優先權,在 Windows 中,優先順序由 1 ~ 31 , 1 為最慢, 31 為最高,系統執行時依執行緒為基於程序之優先順序之混合運算後,得到系統中之優先順序,詳細混合運算量級表如下:
系統優先順序 | 程序優先順序類別 | 執行緒優先順序等級 |
1 | IDLE_PRIORITY_CLASS | THREAD_PRIORITY_IDLE |
1 | BELOW_NORMAL_PRIORITY_CLASS | THREAD_PRIORITY_IDLE |
1 | NORMAL_PRIORITY_CLASS | THREAD_PRIORITY_IDLE |
1 | ABOVE_NORMAL_PRIORITY_CLASS | THREAD_PRIORITY_IDLE |
1 | HIGH_PRIORITY_CLASS | THREAD_PRIORITY_IDLE |
2 | IDLE_PRIORITY_CLASS | THREAD_PRIORITY_LOWEST |
3 | IDLE_PRIORITY_CLASS | THREAD_PRIORITY_BELOW_NORMAL |
4 | IDLE_PRIORITY_CLASS | THREAD_PRIORITY_NORMAL |
4 | BELOW_NORMAL_PRIORITY_CLASS | THREAD_PRIORITY_LOWEST |
5 | IDLE_PRIORITY_CLASS | THREAD_PRIORITY_ABOVE_NORMAL |
5 | BELOW_NORMAL_PRIORITY_CLASS | THREAD_PRIORITY_BELOW_NORMAL |
5 | Background NORMAL_PRIORITY_CLASS | THREAD_PRIORITY_LOWEST |
6 | IDLE_PRIORITY_CLASS | THREAD_PRIORITY_HIGHEST |
6 | BELOW_NORMAL_PRIORITY_CLASS | THREAD_PRIORITY_NORMAL |
6 | Background NORMAL_PRIORITY_CLASS | THREAD_PRIORITY_BELOW_NORMAL |
7 | BELOW_NORMAL_PRIORITY_CLASS | THREAD_PRIORITY_ABOVE_NORMAL |
7 | Background NORMAL_PRIORITY_CLASS | THREAD_PRIORITY_NORMAL |
7 | Foreground NORMAL_PRIORITY_CLASS | THREAD_PRIORITY_LOWEST |
8 | BELOW_NORMAL_PRIORITY_CLASS | THREAD_PRIORITY_HIGHEST |
8 | NORMAL_PRIORITY_CLASS | THREAD_PRIORITY_ABOVE_NORMAL |
8 | Foreground NORMAL_PRIORITY_CLASS | THREAD_PRIORITY_BELOW_NORMAL |
8 | ABOVE_NORMAL_PRIORITY_CLASS | THREAD_PRIORITY_LOWEST |
9 | NORMAL_PRIORITY_CLASS | THREAD_PRIORITY_HIGHEST |
9 | Foreground NORMAL_PRIORITY_CLASS | THREAD_PRIORITY_NORMAL |
9 | ABOVE_NORMAL_PRIORITY_CLASS | THREAD_PRIORITY_BELOW_NORMAL |
10 | Foreground NORMAL_PRIORITY_CLASS | THREAD_PRIORITY_ABOVE_NORMAL |
10 | ABOVE_NORMAL_PRIORITY_CLASS | THREAD_PRIORITY_NORMAL |
11 | Foreground NORMAL_PRIORITY_CLASS | THREAD_PRIORITY_HIGHEST |
11 | ABOVE_NORMAL_PRIORITY_CLASS | THREAD_PRIORITY_ABOVE_NORMAL |
11 | HIGH_PRIORITY_CLASS | THREAD_PRIORITY_LOWEST |
12 | ABOVE_NORMAL_PRIORITY_CLASS | THREAD_PRIORITY_HIGHEST |
12 | HIGH_PRIORITY_CLASS | THREAD_PRIORITY_BELOW_NORMAL |
13 | HIGH_PRIORITY_CLASS | THREAD_PRIORITY_NORMAL |
14 | HIGH_PRIORITY_CLASS | THREAD_PRIORITY_ABOVE_NORMAL |
15 | HIGH_PRIORITY_CLASS | THREAD_PRIORITY_HIGHEST |
15 | HIGH_PRIORITY_CLASS | THREAD_PRIORITY_TIME_CRITICAL |
15 | IDLE_PRIORITY_CLASS | THREAD_PRIORITY_TIME_CRITICAL |
15 | BELOW_NORMAL_PRIORITY_CLASS | THREAD_PRIORITY_TIME_CRITICAL |
15 | NORMAL_PRIORITY_CLASS | THREAD_PRIORITY_TIME_CRITICAL |
15 | ABOVE_NORMAL_PRIORITY_CLASS | THREAD_PRIORITY_TIME_CRITICAL |
16 | REALTIME_PRIORITY_CLASS | THREAD_PRIORITY_IDLE |
17 | REALTIME_PRIORITY_CLASS | -7 |
18 | REALTIME_PRIORITY_CLASS | -6 |
19 | REALTIME_PRIORITY_CLASS | -5 |
20 | REALTIME_PRIORITY_CLASS | -4 |
21 | REALTIME_PRIORITY_CLASS | -3 |
22 | REALTIME_PRIORITY_CLASS | THREAD_PRIORITY_LOWEST |
23 | REALTIME_PRIORITY_CLASS | THREAD_PRIORITY_BELOW_NORMAL |
24 | REALTIME_PRIORITY_CLASS | THREAD_PRIORITY_NORMAL |
25 | REALTIME_PRIORITY_CLASS | THREAD_PRIORITY_ABOVE_NORMAL |
26 | REALTIME_PRIORITY_CLASS | THREAD_PRIORITY_HIGHEST |
27 | REALTIME_PRIORITY_CLASS | 3 |
28 | REALTIME_PRIORITY_CLASS | 4 |
29 | REALTIME_PRIORITY_CLASS | 5 |
30 | REALTIME_PRIORITY_CLASS | 6 |
31 | REALTIME_PRIORITY_CLASS | THREAD_PRIORITY_TIME_CRITICAL |
註:部分代號僅 Windows 2000 才可設定
函數名:myGetProcessIdPriority,取得指定的程序編號系統執行程序優先順序類別
引數 類型 說明 ProcessId 長整數 程序編號 範例:
Debug.Print myGetProcessIdPriority(ProcessId)
' 傳回指定的程序編號系統執行優先順序
函數名:mySetProcessIdPriority,設定指定的程序編號系統執行程序優先順序類別
引數 類型 說明 ProcessId 長整數 程序編號 nPriority 長整數 程序優先順序類別 範例:
Debug.Print mySetProcessIdPriority(ProcessId, HIGH_PRIORITY_CLASS)
' 傳回設定前的程序編號系統執行優先順序
函數名:myGetAppProcessPriority,取得程式本身程序在系統執行程序優先順序類別
引數 類型 說明 無 - - 範例:
Debug.Print myGetAppProcessPriority
' 傳回程式本身程序在系統執行優先順序
函數名:mySetAppProcessPriority,設定程式本身程序在系統執行程序優先順序類別
引數 類型 說明 nPriority 長整數 程序優先順序類別 範例:
Debug.Print mySetAppProcessPriority(HIGH_PRIORITY_CLASS)
' 傳回設定前的程式本身程序在執行優先順序
函數名:myGetAppThreadPriority,取得程式本身執行緒在程式本身程序執行執行緒優先順序等級
引數 類型 說明 無 - - 範例:
Debug.Print myGetAppThreadPriority
' 傳回程式本身執行緒在程式本身程序執行優先順序
函數名:mySetAppThreadPriority,設定程式本身執行緒在程式本身程序執行執行緒優先順序等級
引數 類型 說明 nPriority 長整數 執行緒優先順序等級 範例:
Debug.Print mySetAppThreadPriority(THREAD_PRIORITY_HIGHEST)
' 傳回設定前的程式本身執行緒在程式本身程序執行優先順序
常數 值 說明 REALTIME_PRIORITY_CLASS &H100 即時執行優先順序類別 HIGH_PRIORITY_CLASS &H80 較高執行優先順序類別 NORMAL_PRIORITY_CLASS &H20 正常執行優先順序類別 IDLE_PRIORITY_CLASS &H40 較低執行優先順序類別
常數 值 說明 THREAD_PRIORITY_TIME_CRITICAL 15 重要時間執行優先順序等級 THREAD_PRIORITY_HIGHEST 2 較高執行優先順序等級 THREAD_PRIORITY_ABOVE_NORMAL 1 稍高執行優先順序等級 THREAD_PRIORITY_NORMAL 0 正常執行優先順序等級 THREAD_PRIORITY_BELOW_NORMAL -1 稍低執行優先順序等級 THREAD_PRIORITY_LOWEST -2 較低執行優先順序等級 THREAD_PRIORITY_IDLE -15 當機執行優先順序等級