SDK获取程序所在的目录,程序模块路径,获取和设置当前目录

来源:互联网 发布:.net 微商城源码 编辑:程序博客网 时间:2024/06/04 19:04

//获取程序所在的目录,程序模块路径,获取和设置当前目录

#include<windows.h>
#include<stdio.h>

/***************************
// int main(void)
// 功能: 演示使用设置获取当前路径
//        演示获取模块路径
********************************/
 int main(void)
 {
  CHAR szCurrentDirectory [MAX_PATH];  //用于存储当前路径
  CHAR szModulePath[MAX_PATH];       //用于存储模块路径

  LPSTR szKernel32 = "kernel32.dll";  //Kernel32文件句柄
  HMODULE hKernel32;
    
  DWORD dwCurDirPathLen;              //当前路径长度,也用于判断获取是否成功

  //获取当前路径  GetCurrentDirctory 返回值为 DWORD 值,0表示失败
  dwCurDirPathLen = GetCurrentDirectory( MAX_PATH,             //路径字符串缓冲区大小
                                     szCurrentDirectory);   //输出参数,指向获取路径的字符串
  if(dwCurDirPathLen == 0)
  {
   printf("获取当前目录错误。\n");
   return 0;
  }
  printf("进程当前目录为%s \n",szCurrentDirectory);

  //将当前目录设置为:"C:\"
  lstrcpy(szCurrentDirectory, "C:\\");
     //SetCurrentDirctory 返回值为 DWORD 值,0表示失败
  if( !SetCurrentDirectory( szCurrentDirectory ) )
  {
   printf("设置当前目录错误。\n");
   return 0;
  }
     printf("进程当前目录为%s \n",szCurrentDirectory);

  //在当前目录下创建子目录“current_dir”
  //运行完成后C:盘下将出现文件夹“current_dir”
  CreateDirectory("current_dir", NULL);

  //再次获取系统当前目录
  dwCurDirPathLen = GetCurrentDirectory( MAX_PATH, szCurrentDirectory);
  if(dwCurDirPathLen == 0)
  {
   printf("获取当前目录错误。\n");
   return 0;
  }
  printf("GetCurrentDirectory获取当前目录为%s \n",szCurrentDirectory);

  //使用NULL参数,获取本模块的路径
  if(!GetModuleFileName(NULL,         //NULL则是获取当前模块路径
       szModulePath, //输出参数,模块的全路径
       MAX_PATH))    //输入参数,指向的缓冲区大大小
  {
   printf("获取模块路径错误。\n");
   return 0;
  }
  printf("本模块路径为%s \n", szModulePath);

  //获取Kernel32.dll的模块句柄
  hKernel32 = LoadLibrary(szKernel32); //Kernel32.dll
   
  //使用kernel32.dll的模块句柄,获取其路径
  if( !GetModuleFileName (hKernel32, szModulePath, MAX_PATH))
  {
   printf("获取模块路径错误.\n");
   return 0;
  }
  printf("Kernel32模块路径 %s \n",szModulePath);

  return 0;
 }