Windows核心程式設計之多程序概述
阿新 • • 發佈:2019-02-19
三、與程序相關的API
4、獲取程序的可執行檔案或DLL對應的控制代碼
HMODULE GetModuleHandle(
PCTSTR pszModule); //模組名稱
注:當引數傳NULL時獲取的是程序的地址空間中可執行檔案的基地址。
5、獲取與指定視窗關聯在一起的一個程序和執行緒識別符號
HANDLE GetWindowThreadProcessId(
HWND hWnd, //視窗控制代碼
LPDWORD lpdwProcessId); //與該視窗相關的程序ID
6、獲取程序的執行時間
Bool GetProcessTimes(
HANDLE hProcess, //程序控制代碼
PFILETIME pftCreationTime, //建立時間
PFILETIME pftExitTime, //退出時間
PFILETIME pftKernelTime, //核心時間
PFILETIME pftUserTime); //使用者時間
注:返回的時間適用於某個程序中的所有執行緒(甚至已經終止執行的執行緒)。
7、獲取當前程序的一個偽控制代碼
HANDLE GetCurrentProcess();
注:該函式獲取當前程序的偽控制代碼,通常情況值為-1,只能標識當前程序核心物件,
可以複製,但不可繼承。不必呼叫CloseHandle()函式來關閉這個控制代碼。
8、將程序的偽控制代碼轉換為實控制代碼
HANDLE DuplicateHandle(
GetCurrentProcess(),
GetCurrentProcess(),
GetCurrentProcess(),
&hProcess,
0,
FALSE ,
DUPLICATE_SAME_ACCESS);
9、獲取當前程序ID
DWORD GetCurrentProcessId();
10、獲取程序優先順序
DWORD GetPriorityClass(
HANDLE hProcess);
11、修改程序的優先順序類
BOOL SetPriorityClass(
HANDLE hProcess, //程序控制代碼
DWORD fdwPriority); //相對程序優先順序
注1:相對執行緒優先順序
實時: REALTIME_PRIORITY_CLASS
高: HIGH_PRIORITY_CLASS
高於正常; ABOVE_NORMAL_PRIORITY_CLASS
正常: NORMAL_PRIORITY_CLASS
低於正常: BELOW_NORMAL_PRIORITY_CLASS
空閒: IDLE_PRIORITY_CLASS
注2:只要擁有程序的控制代碼和足夠的許可權,就能夠修改系統中執行的任何程序的優
先級類。
12、獲取程序控制代碼計數
BOOL GetProcessHandleCount(
HANDLE hProcess, //控制代碼
PDWORD pdwHandleCount); //控制代碼計數
13、獲取環境塊
DWORD GetEnvironmentVariable(
LPCTSTR lpName, //環境變數的名字
LPTSTR lpValue, //存放返回字串的緩衝區
DWORD cchValue); //緩衝區的大小
注:返回值為返回字串的長度,當快取不足時返回所需字串的長度
14、設定環境塊
BOOL SetEnvironmentVariable(
LPCTSTR lpName, //環境變數的名字
LPCTSTR lpValue); //存放變數值字串的緩衝區
4、獲取程序的可執行檔案或DLL對應的控制代碼
HMODULE GetModuleHandle(
PCTSTR pszModule); //模組名稱
注:當引數傳NULL時獲取的是程序的地址空間中可執行檔案的基地址。
5、獲取與指定視窗關聯在一起的一個程序和執行緒識別符號
HANDLE GetWindowThreadProcessId(
HWND hWnd, //視窗控制代碼
LPDWORD lpdwProcessId); //與該視窗相關的程序ID
6、獲取程序的執行時間
Bool GetProcessTimes(
HANDLE hProcess, //程序控制代碼
PFILETIME pftCreationTime, //建立時間
PFILETIME pftExitTime, //退出時間
PFILETIME pftKernelTime, //核心時間
PFILETIME pftUserTime); //使用者時間
注:返回的時間適用於某個程序中的所有執行緒(甚至已經終止執行的執行緒)。
7、獲取當前程序的一個偽控制代碼
HANDLE GetCurrentProcess();
注:該函式獲取當前程序的偽控制代碼,通常情況值為-1,只能標識當前程序核心物件,
可以複製,但不可繼承。不必呼叫CloseHandle()函式來關閉這個控制代碼。
8、將程序的偽控制代碼轉換為實控制代碼
HANDLE DuplicateHandle(
GetCurrentProcess(),
GetCurrentProcess(),
GetCurrentProcess(),
&hProcess,
0,
FALSE ,
DUPLICATE_SAME_ACCESS);
9、獲取當前程序ID
DWORD GetCurrentProcessId();
10、獲取程序優先順序
DWORD GetPriorityClass(
HANDLE hProcess);
11、修改程序的優先順序類
BOOL SetPriorityClass(
HANDLE hProcess, //程序控制代碼
DWORD fdwPriority); //相對程序優先順序
注1:相對執行緒優先順序
實時: REALTIME_PRIORITY_CLASS
高: HIGH_PRIORITY_CLASS
高於正常; ABOVE_NORMAL_PRIORITY_CLASS
正常: NORMAL_PRIORITY_CLASS
低於正常: BELOW_NORMAL_PRIORITY_CLASS
空閒: IDLE_PRIORITY_CLASS
注2:只要擁有程序的控制代碼和足夠的許可權,就能夠修改系統中執行的任何程序的優
先級類。
12、獲取程序控制代碼計數
BOOL GetProcessHandleCount(
HANDLE hProcess, //控制代碼
PDWORD pdwHandleCount); //控制代碼計數
13、獲取環境塊
DWORD GetEnvironmentVariable(
LPCTSTR lpName, //環境變數的名字
LPTSTR lpValue, //存放返回字串的緩衝區
DWORD cchValue); //緩衝區的大小
注:返回值為返回字串的長度,當快取不足時返回所需字串的長度
14、設定環境塊
BOOL SetEnvironmentVariable(
LPCTSTR lpName, //環境變數的名字
LPCTSTR lpValue); //存放變數值字串的緩衝區