zoukankan      html  css  js  c++  java
  • 获取当前程序可执行文件所在路径

    GetModuleFileName() 函数返回当前进程已加载可执行或DLL文件的完整路径名(以''终止),该模块必须由当前进程地址空间加载。如果想要获取另一个已加载模块的文件路径,可以使用GetModuleFileNameEx()函数。

      DWORD WINAPI GetModuleFileName(    //失败返回0;

        _In_opt_  HMODULE hModule,   //应用程序或DLL实例句柄,NULL则为获取当前程序可执行文件路径名

        _Out_      LPTSTR lpFilename,   //接收路径的字符串缓冲区

        _In_         DWORD nSize   //接收路径的字符缓冲区的大小

      );

    CString strExePath;  
    CString strPath;  
    GetModuleFileName(NULL,strPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH+1);  
    AfxMessageBox(strPath);//"c:Programe FilesGoogleabc.exe"  
    int nPos = strPath.ReverseFind(_T('\'));  
    strExePath = strPath.Left(nPos+1);  
    AfxMessageBox(strExePath);//"c:Program FilesGoogle" 

      DWORD GetModuleFileNameEx(    //失败返回0;要包含Psapi.h头文件,并链接到Psapi.lib;

        HANDLE   hProcess,  //目标进程的句柄,进程的句柄须有PROCESS_QUERY_INFORMATION和PROCESS_VM_READ权限

        HMODULE  hModule,  //目标模块的句柄,为NULL时函数返回的是进程可执行文件的路径

        LPTSTR  lpFilename,  //接收路径的字符串缓冲区

        DWORD  nSize  //缓冲区的大小

      );

    #include <Psapi.h>
    #pragma comment (lib,"Psapi.lib")
    
    ...
    
    HANDLE h_Process=OpenProcess(PROCESS_QUERY_INFORMATION |PROCESS_VM_READ,FALSE,ProcessID);
    
    CString strPath;
    if(!GetModuleFileNameEx(h_Process,NULL,strPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH+1))
    
       return false;
    
    ...

    如果想要获取指定文件所在的目录可以使用MFC中CFile类的成员函数:CFile::GetFilePath();

    HMODULE GetModuleHandle(LPCTSTR lpModuleName); 返回加载到当前进程地址空间的可执行文件或DLL文件的句柄,若参数为NULL,则返回当前进程的句柄(当前应用程序实例句柄)。

  • 相关阅读:
    数据库概念相关
    JavaWeb基础知识总结
    MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作
    MyBatis学习总结(一)——MyBatis快速入门
    [源码解析]HashMap和HashTable的区别(源码分析解读)
    MyBatis学习总结(三)——优化MyBatis配置文件中的配置
    MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突
    MyBatis学习总结(五)——实现关联表查询
    MyBatis学习总结(六)——调用存储过程
    MyBatis学习总结(七)——Mybatis缓存
  • 原文地址:https://www.cnblogs.com/zhouwanqiu/p/8513080.html
Copyright © 2011-2022 走看看