获取当前句柄的4种方法

本文介绍了在Windows环境下获取当前进程句柄的四种实用方法,包括使用win32API函数、声明全局变量句柄类型、获取函数句柄以及利用WinMain函数参数等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们经常会获取当前进程的进程句柄,那么获取进程句柄的方法都有哪些呢?下面是总结的三种方法。
注意:句柄其实就是应用程序的其实地址

方法1.
使用win32 API函数实现该功能。如下代码所示:
#include <Windows.h>
#include <wchar.h>
int main()
{
 
   HMODULEhCurrent_Module =GetModuleHandle(NULL);//这个句柄参数为NULL就是当前程序的起始地址
   _tprintf(L"%0x\n", hCurrent_Module);
me);

   _gettchar();
    return0;
}
输出结果为:
250000

这样就会获取当前进程的句柄,API函数GetModuleHandle如果参数为NULL就是当前程序的起始地址,如果传入其他文件,比如kernel32.dll那么他的地址就会变成该动态库的起始地址。

方法2:
声明全局变量的句柄类型。如下代码所示:
#include <Windows.h>
#include <wchar.h>

extern "C" HANDLE __ImageBase;
int main()
{
   _tprintf(L"%0x\n", &__ImageBase);

   _gettchar();
    return0;
}
输出结果:
250000

这个结果与方法1的结果一样说明此方法的可行性,是完全可以使用的。

方法3:
方法三针对的是一个函数如何获取他的句柄,比如以下:
void fun(HMODULE *hModule)
{
   GetModuleHandleEx(
       GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS,  //标志
       (PCTSTR)fun,  //该函数名
       &hModule);   //该函数参数
}

方法4
如果我们创建窗口句柄的话就可以直接使用该WinMain函数的第一个参数。
还是之前的程序我们通过属性-》配置属性-》连接器-》系统-》子系统设置为“未设置”即可。通过设置断点,和VS自带的变量查看工具查看信息。因为如果这样设置后就不会出现控制台,也不会出现win32界面。
#include <Windows.h>
#include <wchar.h>

extern "C" HANDLE __ImageBase;
int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPreInstanc,TCHAR*, int)
{
   
    HMODULEhModule = GetModuleHandle(L"Kernel32.dll");
   _tprintf(L"%0x\n", hModule);

    HMODULEhCurrent_Module = GetModuleHandle(NULL);//这个句柄就是当前程序的起始地址
   _tprintf(L"%0x\n", hCurrent_Module);
   
    TCHARfilename[MAX_PATH];
   GetModuleFileName(hCurrent_Module, filename, MAX_PATH);
   _tprintf(L"%s\n", filename);

   GetModuleFileName(hModule, filename, MAX_PATH);
   _tprintf(L"%s\n", filename);

   _tprintf(L"%0x\n", &__ImageBase);

   _gettchar();
    return0;
}
  这个程序他的句柄就是WinMain函数的第一个参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值