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,则返回当前进程的句柄(当前应用程序实例句柄)。

  • 相关阅读:
    IE下CSS属性float:right下换行问题解决方法
    php 中简单输出 csv和excel
    VMware 链接网络的三种模式及自己的安装方法
    ajax的应用
    php中ADODB的用法
    关于web 标准的常见问题 总结
    javascript 闭包
    php strrev 中文字符串翻转乱码的问题
    注册表 一览
    SVN Commit报错 svn: E155037: Previous operation has not finished; run 'cleanup' if it was interrupted
  • 原文地址:https://www.cnblogs.com/zhouwanqiu/p/8513080.html
Copyright © 2011-2022 走看看