精华内容
下载资源
问答
  • 2021-08-25 15:12:21

    当EXE和EXE调用的dll不在 一个目录时,想在dll处获取自身的路径的方法:

    string GetCurrentModule()
    {  
    	HMODULE hModule = NULL;
    	char DLLPATH[MAX_PATH + 1] = { 0 };
    	GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS,(LPCTSTR)GetCurrentModule,&hModule);
    
    	//----
    	::GetModuleFileName(hModule, DLLPATH, MAX_PATH); 
    	string DllPath = DLLPATH; 
    	return DllPath;
    }

    更多相关内容
  • 查看句柄,获取HANDLE,用于windows编程获取某窗口句柄
  • if (GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, (LPCWSTR) &DllMain, &hm) == 0) { int ret = GetLastError(); // Return or however you want ...

    目录

    一.通过GetModuleHandleEx && GetModuleFileName

    二.通过__ImageBase


    一.通过GetModuleHandleEx && GetModuleFileName

    TCHAR path[MAX_PATH];
    HMODULE hm = NULL;
    
    if (GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | 
        GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,
         (LPCWSTR) &DllMain, &hm) == 0)
    {
        int ret = GetLastError();
        // Return or however you want to handle an error.
    }
    if (GetModuleFileName(hm, path, sizeof(path)) == 0)
    {
       int ret = GetLastError();
       // Return or however you want to handle an error.
    }

    二.通过__ImageBase

    TCHAR   DllPath[MAX_PATH] = {0};
    GetModuleFileName((HINSTANCE)&__ImageBase, DllPath, _countof(DllPath));

    展开全文
  • // #include #include #include "tlhelp32.h" #include #include #include HMODULE GetProcessModuleHandle(DWORD pid, CONST TCHAR* moduleName) { // 根据 PID 、模块名(需要写后缀,如:".dll"),获取模块入口...
    
    // ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
    //
    
    #include <iostream>
    #include <Windows.h>
    #include "tlhelp32.h"
    #include <tchar.h>
    #include <string>
    #include <stdio.h>
    
    
    
    HMODULE GetProcessModuleHandle(DWORD pid, CONST TCHAR* moduleName) {	// 根据 PID 、模块名(需要写后缀,如:".dll"),获取模块入口地址。
        MODULEENTRY32 moduleEntry;
        HANDLE handle = NULL;
        handle = ::CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pid); //  获取进程快照中包含在th32ProcessID中指定的进程的所有的模块。
        if (!handle) {
            CloseHandle(handle);
            return NULL;
        }
        ZeroMemory(&moduleEntry, sizeof(MODULEENTRY32));
        moduleEntry.dwSize = sizeof(MODULEENTRY32);
        if (!Module32First(handle, &moduleEntry)) {
            CloseHandle(handle);
            return NULL;
        }
        do {
            if (_tcscmp(moduleEntry.szModule, moduleName) == 0) { return moduleEntry.hModule; }
        } while (Module32Next(handle, &moduleEntry));
        CloseHandle(handle);
        return 0;
    }
    
    int main() {
        HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);  // 进程快照句柄
        PROCESSENTRY32 process = { sizeof(PROCESSENTRY32) };	// 存放进程快照的结构体
    
        //  遍历进程
        while (Process32Next(hProcessSnap, &process)) {
            // 找到 QQMusic.exe 进程
            std::string s_szExeFile = process.szExeFile; // char* 转 string
            if (s_szExeFile == "s.exe") {
                HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, process.th32ProcessID); // 进程句柄
                if (hProcess)
                {
                    HMODULE hMod = GetProcessModuleHandle(process.th32ProcessID, "Role.dll");
                    if (hMod)
                    {
                        auto fnAddress = GetProcAddress(hMod, "GetKongfuAmount");
                        
                        std::cout << fnAddress <<"        "<< GetLastError();
                    }
                }
            }
        }
    }
    
    
    
    展开全文
  • 自定义一个DLL类 class Dll { public: Dll(std::wstring name, std::wstring path); ~Dll(); std::wstring getDllName(void) const; std::wstring getDllPath(void...获取DLL信息的函数 bool GetDllFromProcess(std

    自定义一个DLL类

    class Dll
    {
    public:
    	Dll(std::wstring name, std::wstring path);
    	~Dll();
    	std::wstring getDllName(void) const;
    	std::wstring getDllPath(void) const;
    
    private:
    	std::wstring dllName;
    	std::wstring dllPath;
    };
    

    获取DLL信息的函数

    bool GetDllFromProcess(std::vector<Dll>& dllVec, const DWORD& processId)
    {
    	//创建系统快照,并返回进程句柄
    	HANDLE handle = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, processId);
    	if (handle == INVALID_HANDLE_VALUE)
    		return false;
    
    	//枚举进程模块
    	MODULEENTRY32 info;
    	info.dwSize = sizeof(MODULEENTRY32);
    	Module32First(handle, &info);
    
    	while (Module32Next(handle, &info) != FALSE)
    	{
    		dllVec.emplace_back(Dll(std::wstring(info.szModule), std::wstring(info.szExePath)));
    	}
    
    	CloseHandle(handle);
    	return true;
    }
    

    参考文档

    MSDN - CreateToolhelp32Snapshot
    在这里插入图片描述
    MSDN - Module32First
    在这里插入图片描述

    我是江鸟,即将迈向社会的程序猿,欢迎交流~
    在这里插入图片描述

    展开全文
  • 一、获取可执行程序.exe的地址 GetModuleFileName()函数返回当前进程已加载可执行文件或DLL文件的完整路径名(以'\0'终止)... _In_opt_HMODULE hModule, //应用程序或DLL实例句柄,NULL则为获取当前程序可执行文件路...
  • DLL获取当前文件目录和DLL调试方法

    千次阅读 2017-09-21 15:11:01
    DLL获取当前文件目录和DLL调试方法 原创 2016年03月12日 22:27:53 2359 0
  • dll获取自身路径的几种方法

    千次阅读 2017-05-25 16:52:20
    今天老大突然问到了这个问题,同事们说了一些常用的方法,但都因项目的特殊需求而不能采用,所以本人在...2:通过GetModuleHandle传入dll的名称获取其HMODULE 然后通过GetModuleFileName函数来获取其路径 3:这种方法我
  • 调用api获取版本号 上代码: #include <tchar.h> #include <windows.h> #include <winver.h> #define DLL_VERSION_LENGTH 32 // Load version lib #ifdef WIN10 #pragma comment(lib, "Mincore....
  • [DllImport(KERNEL_DLL, CallingConvention = CALLING_CONVENTION, EntryPoint = "LoadLibrary"), SuppressUnmanagedCodeSecurity] public static extern uint LoadLibrary(string lpFileName); [DllImport...
  • 现在想在abc.dll库内部获取这个文件的名称。该dll库被一个叫做myapp.exe的程序调用。 一般会想到通过GetModuleFileName来获取库名称,但是其第一个参数HMODULE hModule无法知道。如果给hModule赋值为NULL,那么只能...
  • DLL中如何获取自身的句柄

    万次阅读 2015-04-27 16:57:02
    我想在DLL中动态的获取DLL本身的实例句柄.有没有什么方法? 我不想使用DllMain中保存全局句柄的方法。 说明: (1) MFC扩展DLL中 int DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) 第一个...
  • DLL中如何获取自身的路径

    千次阅读 2017-06-11 22:51:43
    1.DLL获取文件目录 GetModuleFileName可以获得指定模块的路径,如果传入NULL,则输出所在进程exe的路径,因此在DLL中要想获得当前DLL的路径,必须获得DLL的实例。这样我们才能得到当前DLL的路径,总结可分为如下...
  • GetModuleFileNameA(dllhandle, szPath, MAX_PATH);//BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) //dll入口函数 (2)无需dll入口函数的句柄,dll内任意函数都...
  • 常见的获取方法是通过 GetModuleHandle(NULL),获取当前EXE句柄,然后通过GetModuleFileName获取EXE路径。Dll在该路径下加上 “xxx.dll”,即可。 但是有时候 dll 与 exe 不一定在一个位置,甚至 dll 并没有按照指定...
  • 获取进程加载的dll

    2018-08-02 14:39:00
    获取进程加载的dll 1 编译为64位程序 2 字符集(使用多字节字符集) 3 管理员运行 1 #include <WINDOWS.H> 2 #include <TLHELP32.H> 3 #include <ctype.h> 4 5 #include <...
  • QT 调用 DLL 方法(三种方法)

    千次阅读 2020-12-24 13:48:56
    调用 LoadLibrary(或相似的函 数)以加载 DLL获取模块句柄。? 调用 GetProcAddress,以获 取指向应用程序要调用的每个导出函数的函数指针。由于应用程序是通过指针调用 DLL 的函数,编译器不生成外部引 用,故...
  • delphi获取dll的函数列表

    千次阅读 2012-06-15 15:46:01
    找了几个,终于找到一个好用的 function GetDLLFileExports(  szFileName: PChar;... if(hFile = INVALID_HANDLE_... GetDLLFileExports('F:\光盘刻录\Reclib\librtmp.dll', Memo1.Lines); end;
  • 怎样获取未知DLL的接口参数

    千次阅读 2017-10-21 16:30:28
    首先需要知道该函数有几个参数,...先打开需要分析的DLL,然后通过菜单功能-》出口来找到需要分析的函数,双击就可以了。它可以直接定位到该函数。2。看准该函数的入口,一般函数是以以下代码作为入口点的。push ebpmo
  • 一般情况下,我们很少在case标签下使用{},但是当你遇到这个问题的时候就应该考虑使用{},因为这个问题是因为你在...下面这个问题是在写一个调试器时遇到的,我想将加载的DLL文件名称打印出来,在LOAD_DLL_DEBUG_
  • 获取DLL或者EXE版本号

    千次阅读 2012-12-28 11:49:27
    * @param hmodule Handle to the module whose executable file contains the resource. * @return If successful, returns a VS_FIXEDFILEINFO pointer, otherwise returns NULL. */ PVOID GetModuleFileVersionPtr...
  • 定义: GetModuleHandle(  lpModuleName: PChar {模块名; 只能是映射到当前进程的模块} ...//获取当前模块的句柄 var  s: string;  h: Cardinal; begin  {先取得模块名}  s := Application.ExeN
  • 获取加载的dll文件路径

    千次阅读 2014-03-30 15:29:55
    // Here's a trick that will get you the handle of the module // you're running in without any a-priori knowledge: MEMORY_BASIC_INFORMATION mbi; static int dummy; VirtualQuery( &dummy, &mbi, ...
  • 传统调用DLL窗体,为了达到DLL窗体与主程序融为一体的效果,通常会把主程序的Application传递到DLL工程中,类似如下方法: procedure SynAPP(App: THandle); stdcall; begin //传递Application Application.Handle...
  • DLL导出函数时,使用GetProcAddress获取函数地址,传参不需要带入namespace: int HixxxInterface::Init(const std::string& cfgpath, const std::string& lang) { std::string configPath = cfgpath....
  • c++实现获取主机的的内存大小,系统用户名,mac地址和硬盘序列号,然后封装成dll给go调用,并提供go调用的接口。github传送门 GIT 地址 https://github.com/easyAation/go-mac 运行截图: c++部分
  • 第一步、保证所调用的dll与Delphi程序在同一目录;...BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { return TRUE; } int fnTest(void) { r
  • pOutBuffer 需要的是GET_LENGTH_INFORMATION结构体的地址(点击查看详情),在易语言中使用“长整数”即可,同时将该参数的DLL声明选中“传址”以完成传递地址。 使用“取数据类型尺寸 (#长整数型)”获取长整数在...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,724
精华内容 11,089
关键字:

获取dll的handle