获取当前句柄的4种方法
来源:互联网 发布:澳门网络博客有限公司 编辑:程序博客网 时间:2024/05/18 16:54
我们经常会获取当前进程的进程句柄,那么获取进程句柄的方法都有哪些呢?下面是总结的三种方法。
注意:句柄其实就是应用程序的其实地址。
方法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函数的第一个参数。
注意:句柄其实就是应用程序的其实地址。
方法1.
使用win32 API函数实现该功能。如下代码所示:
#include <Windows.h>
#include <wchar.h>
int main()
{
me);
}
输出结果为:
250000
这样就会获取当前进程的句柄,API函数GetModuleHandle如果参数为NULL就是当前程序的起始地址,如果传入其他文件,比如kernel32.dll那么他的地址就会变成该动态库的起始地址。
方法2:
声明全局变量的句柄类型。如下代码所示:
#include <Windows.h>
#include <wchar.h>
extern "C" HANDLE __ImageBase;
int main()
{
}
输出结果:
250000
这个结果与方法1的结果一样说明此方法的可行性,是完全可以使用的。
方法3:
方法三针对的是一个函数如何获取他的句柄,比如以下:
void fun(HMODULE *hModule)
{
}
方法4
如果我们创建窗口句柄的话就可以直接使用该WinMain函数的第一个参数。
还是之前的程序我们通过属性-》配置属性-》连接器-》系统-》子系统设置为“未设置”即可。通过设置断点,和VS自带的变量查看工具查看信息。因为如果这样设置后就不会出现控制台,也不会出现win32界面。
#include <Windows.h>
#include <wchar.h>
extern "C" HANDLE __ImageBase;
int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPreInstanc,TCHAR*, int)
{
}
阅读全文
0 0
- 获取当前句柄的4种方法
- 获取当前模块的句柄
- MFC获取当前应用程序句柄的三种方式
- 获取设备句柄的两种方法
- 获取线程句柄的三种方法
- MFC 获取当前活动窗口的句柄
- 通过VirtualQuery获取当前模块的句柄
- MFC 获取当前活动窗口的句柄
- GetCurrentThread()获取当前线程句柄的陷阱
- 随笔6 - 获取当前程序的句柄
- MFC 获取当前活动窗口的句柄
- 获取当前线程句柄
- 获取窗口句柄的方法
- Window上获取DC句柄的三种方法
- Delphi获取其它进程窗口句柄的3种方法
- 获取窗口句柄(VC)的几种方法
- VC 获取窗口句柄的几种方法
- Delphi获取其它进程窗口句柄的3种方法
- Android通知SD卡(内置/外置)扫描新数据
- 深入理解NaN
- [JZOJ5187]【NOIP2017提高组模拟6.30】tty's maze
- 如何在Ubuntu上安装最新版本的Node.js
- 解决了java+matlab混编+web(jsp)调用Matlab,网页中显示Figure,详细实例
- 获取当前句柄的4种方法
- java 线程间的状态转换
- Python格式化输出
- [python]俄罗斯方块(二)
- OpenVPN成功连接了但不能访问任何网站
- 编写一个Python脚本——Windows下Python压缩文件
- bzoj 4627: [BeiJing2016]回转寿司 线段树
- JavaScript中8个常见的陷阱
- 第一次博客