WinAPI: GetCurrentThread、GetCurrentThreadId、GetCurrentProcess、GetCurrentProcessId
阿新 • • 發佈:2019-01-24
{返回當前執行緒的虛擬控制代碼} GetCurrentThread: THandle; {返回當前執行緒 ID} GetCurrentThreadId: DWORD; {返回當前程序的虛擬控制代碼} GetCurrentProcess: THandle; {返回當前程序 ID} GetCurrentProcessId: DWORD;提示:
ID 是系統唯一的標識.
所謂虛擬控制代碼, 就是該控制代碼只在呼叫程序的程序中有效, 也不能被繼承;
如果用於其他程序需要用 DuplicateHandle 複製控制代碼;
GetCurrentProcess 返回的虛擬控制代碼可以通過 OpenProcess 建立一個真實的控制代碼.
舉例:
unitUnit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids; type TForm1 = class(TForm) StringGrid1: TStringGrid; procedure FormCreate(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} procedureTForm1.FormCreate(Sender: TObject); begin StringGrid1.Cells[0,0] := '當前執行緒虛擬控制代碼: '; StringGrid1.Cells[0,1] := '當前執行緒 ID: '; StringGrid1.Cells[0,2] := '當前程序虛擬控制代碼: '; StringGrid1.Cells[0,3] := '當前程序 ID: '; StringGrid1.Cells[1,0] := IntToStr(GetCurrentThread); StringGrid1.Cells[1,1] := IntToStr(GetCurrentThreadID); StringGrid1.Cells[1,2] := IntToStr(GetCurrentProcess); StringGrid1.Cells[1,3] := IntToStr(GetCurrentProcessId); {下面是顯示格式的調整} StringGrid1.Align := alClient; StringGrid1.FixedRows := 0; StringGrid1.RowCount := 4; StringGrid1.ColCount := 2; StringGrid1.ColWidths[0] := StringGrid1.Canvas.TextWidth(StringGrid1.Cells[0,0]) + 4; StringGrid1.ColWidths[1] := StringGrid1.Canvas.TextWidth(StringGrid1.Cells[0,1]) + 4; end; end.