1. 程式人生 > >WinAPI: GetCurrentThread、GetCurrentThreadId、GetCurrentProcess、GetCurrentProcessId

WinAPI: GetCurrentThread、GetCurrentThreadId、GetCurrentProcess、GetCurrentProcessId

{返回當前執行緒的虛擬控制代碼}
GetCurrentThread: THandle;

{返回當前執行緒 ID}
GetCurrentThreadId: DWORD;

{返回當前程序的虛擬控制代碼}
GetCurrentProcess: THandle;

{返回當前程序 ID}
GetCurrentProcessId: DWORD;
提示:
ID 是系統唯一的標識.
所謂虛擬控制代碼, 就是該控制代碼只在呼叫程序的程序中有效, 也不能被繼承;
如果用於其他程序需要用 DuplicateHandle 複製控制代碼;
GetCurrentProcess 返回的虛擬控制代碼可以通過 OpenProcess 建立一個真實的控制代碼.

舉例:
unit
Unit1; 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} procedure
TForm1.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.