文档章节

WinAPI: GetCurrentThread、GetCurrentThreadId、GetCurrentProcess、GetCurrentProcessId

涂孟超
 涂孟超
发布于 2014/09/26 15:35
字数 270
阅读 6
收藏 0
点赞 0
评论 0
{返回当前线程的虚拟句柄}
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.

 
 
 
 
 

 

 

  
//效果图:

本文转载自:http://www.cnblogs.com/del/archive/2008/03/10/1098311.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
WinAPI: GetCurrentThread、GetCurrentThreadId、Get...

{返回当前线程的虚拟句柄} GetCurrentThread: THandle; {返回当前线程 ID} GetCurrentThreadId: DWORD; {返回当前进程的虚拟句柄} GetCurrentProcess: THandle; {返回当前进程 ID} GetCurre...

barsoom
2012/12/17
0
0
使用MiniDumpWriteDump API 来生成程序的Dump

MiniDumpWriteDump是MS DbgHelp.dll 中一个API, 用于导出当前运行的程序的Dump. 这个dll程序系统中就有, 但是很多软件, 都在自己的安装目录下保存了这个.dll的最新的版本. 目的是当有异常发生...

berryz2007
2010/12/12
0
0
Windows API 线程同步 生产者消费者

/第一次使用windows API线程函数,还望给位大虾指教啊/ #include <windows.h> #include <stdio.h> #define BUFFER_SIZE 10 HANDLE hSemaphoreFull; HANDLE hSemaphoreEmpty; HANDLE hMutex; ......

519734425
2012/03/12
0
0
这段代码为什么会崩啊

CCriticalSection atrtest; list list2; void deleteList(); //线程1的入口函数 DWORD WINAPI Fun1Proc(LPVOID lpParameter)//thread data { while(TRUE) { deleteList(); } return 0; } //线......

智勇
2014/05/22
214
3
_beginThreadex创建多线程解读

_beginThreadex创建多线程解读 _beginThreadex创建多线程解读 一、需要的头文件支持 #include <process.h> // for _beginthread() 需要的设置:ProjectàSetting-->C/C++-->User run-time lib......

IMGTN
2012/11/25
0
0
delphi实时监视应用程序内存使用量

当你的产品已经完成了客户的需求功能,你是否已经认为你的产品已经完成了呢?如果你的客户在使用你 的产品一段时间后跑来向你诉苦:“产品用的时间越久,速度就越慢”,那么你就需要注意你的...

KavenSu
2014/01/21
0
0
win32程序中监测父进程是否退出的实现

1、在main函数中开辟一个监测线程: HANDLE exit_thread; exit_thread = CreateThread(NULL, 0, run, NULL, 0, NULL); 2、在线程处理函数run中进行处理,如果父进程退出,则本程序也退出: ...

U_C
2015/11/20
0
0
简单的两个线程同步======

list listtest; CCriticalSection lock; CEvent g_event(FALSE,TRUE, NULL, NULL); BOOL bEnd = TRUE; void DeleteList() { lock.Lock(); TRACE(_T("%dn"), GetCurrentThreadId()); if (list......

智勇
2014/05/22
110
1
利用debug钩子拦截全局钩子,经典反黑客技术

// 键盘钩子消息处理过程 LRESULT CALLBACK DebugProc ( int nCode, WPARAM wParam, LPARAM lParam ) { if ( nCode == HCACTION ) { PDEBUGHOOKINFO pDebugHookInfo = (PDEBUGHOOKINFO)lPar......

junwong
2012/03/09
0
0
vc++实现Ring3全局HOOK

// / 实现全局hook模块基本完工,测试通过,没有发现异常。 计划1:在hook前首先检验该程序是否已被hook 计划2:添加枚举进程并hook功能 计划3:在备份api时,只备份目标api函数,避免备份整...

junwong
2012/03/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

about git flow

  昨天元芳做了git分支管理规范的分享,为了拓展大家关于git分支的认知,这里我特意再分享这两个关于git flow的链接,大家可以看一下。 Git 工作流程 Git分支管理策略   git flow本质上是...

qwfys
今天
2
0
Linux系统日志文件

/var/log/messages linux系统总日志 /etc/logrotate.conf 日志切割配置文件 参考https://my.oschina.net/u/2000675/blog/908189 dmesg命令 dmesg’命令显示linux内核的环形缓冲区信息,我们可...

chencheng-linux
今天
1
0
MacOS下给树莓派安装Raspbian系统

下载镜像 前往 树莓派官网 下载镜像。 点击 最新版Raspbian 下载最新版镜像。 下载后请,通过 访达 双击解压,或通过 unzip 命令解压。 检查下载的文件 ls -lh -rw-r--r-- 1 dingdayu s...

dingdayu
今天
1
0
spring boot使用通用mapper(tk.mapper) ,id自增和回显等问题

最近项目使用到tk.mapper设置id自增,数据库是mysql。在使用通用mapper主键生成过程中有一些问题,在总结一下。 1、UUID生成方式-字符串主键 在主键上增加注解 @Id @GeneratedValue...

北岩
今天
2
0
告警系统邮件引擎、运行告警系统

告警系统邮件引擎 cd mail vim mail.py #!/usr/bin/env python#-*- coding: UTF-8 -*-import os,sysreload(sys)sys.setdefaultencoding('utf8')import getoptimport smtplibfr......

Zhouliang6
今天
1
0
Java工具类—随机数

Java中常用的生成随机数有Math.random()方法及java.util.Random类.但他们生成的随机数都是伪随机的. Math.radom()方法 在jdk1.8的Math类中可以看到,Math.random()方法实际上就是调用Random类...

PrivateO2
今天
2
0
关于java内存模型、并发编程的好文

Java并发编程:volatile关键字解析    volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在...

DannyCoder
昨天
1
0
dubbo @Reference retries 重试次数 一个坑

在代码一中设置 成retries=0,也就是调用超时不用重试,结果DEBUG的时候总是重试,不是0吗,0就不用重试啊。为什么还是调用了多次呢? 结果在网上看到 这篇文章才明白 https://www.cnblogs....

奋斗的小牛
昨天
2
0
数据结构与算法3

要抓紧喽~~~~~~~放羊的孩纸回来喽 LowArray类和LowArrayApp类 程序将一个普通的Java数组封装在LowArray类中。类中的数组隐藏了起来,它是私有的,所以只有类自己的方法才能访问他。 LowArray...

沉迷于编程的小菜菜
昨天
1
0
spring boot应用测试框架介绍

一、spring boot应用测试存在的问题 官方提供的测试框架spring-boot-test-starter,虽然提供了很多功能(junit、spring test、assertj、hamcrest、mockito、jsonassert、jsonpath),但是在数...

yangjianzhou
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部