WinCE下读写注册表的又一种方法


      上一篇介绍了VB.NET读写WinCE注册表的方法,用着确实方便。在驱动或者应用程序开发的过程中,其实也有一种简便的方法读写注册表,使用微软提供的CReg类(Registry helper class)。用法也很简单,只要包括creg.hxx即可,SDK中一般会包含该头文件。

      闲话少说,直接附上代码,供参考。

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->   1  //  Preloader.cpp : 定义控制台应用程序的入口点。
  2  //
  3 
  4  #include  " stdafx.h "
  5  #include  < windows.h >
  6  #include  " creg.hxx "
  7 
  8  #define  GET_PATH_FROM_REG
  9 
 10  #define  REG_ROOT    HKEY_CURRENT_USER
 11  #define  REG_PATH    _T("Software")
 12  #define  REG_NAME    _T("AutoRunApp")
 13  # define  INI_PATH    _T("\\Config.ini")
 14  #define  WINCE_STANDARD_SHELL    _T("\\windows\\explorer.exe")
 15 
 16  static  TCHAR g_szFilePath[MAX_PATH];
 17 
 18  #ifdef GET_PATH_FROM_REG     // 从注册表中读取需开机时自启动程序的完整路径
 19  static  BOOL GetFilePath(TCHAR  * pFileName)
 20  {
 21       if  (pFileName)
 22      {
 23          CReg Reg;
 24          DWORD dwLen  =  MAX_PATH;
 25          Reg.Create(REG_ROOT,REG_PATH);
 26           if  (Reg.ValueSZ(REG_NAME,pFileName,dwLen))
 27          {
 28               return  TRUE;
 29          }
 30      }
 31 
 32       return  FALSE;
 33  }
 34  #else                 // 从文件中读取需开机时自启动程序的完整路径
 35  static  BOOL GetFilePath(TCHAR  * pFileName)
 36  {
 37       int  nIndex;
 38 
 39       if (pFileName)
 40      {
 41          HANDLE hFile  =  INVALID_HANDLE_VALUE;
 42           char  szPath[MAX_PATH];
 43          DWORD dwRead;
 44          hFile  =  CreateFile(INI_PATH,GENERIC_READ, 0 ,NULL,OPEN_EXISTING, 0 ,NULL);
 45           if (hFile  !=  INVALID_HANDLE_VALUE)
 46          {
 47              ReadFile(hFile,szPath,MAX_PATH, & dwRead,NULL);
 48               for (nIndex  =   0 ; nIndex  <  dwRead; nIndex ++ )
 49              {
 50                   if (szPath[nIndex]  ==   ' \r '   ||  szPath[nIndex]  ==   ' \n ' )
 51                  {
 52                       break ;
 53                  }
 54                   * pFileName ++   =  szPath[nIndex];
 55              }
 56              
 57               * pFileName  =  _T( ' \0 ' );
 58 
 59              CloseHandle(hFile);
 60               return  TRUE;
 61          }
 62      }
 63 
 64       return  FALSE;
 65  }
 66  #endif
 67 
 68  static  BOOL IsFileExist(TCHAR  * pFileName)
 69  {
 70       if  (pFileName)
 71      {
 72          HANDLE hFind  =  INVALID_HANDLE_VALUE;
 73          WIN32_FIND_DATA fd;
 74 
 75          RETAILMSG( 1 ,(TEXT( " \r\nIsFileExist(%s) " ),pFileName));
 76 
 77          hFind  =  FindFirstFile(pFileName, & fd);
 78 
 79           if  (INVALID_HANDLE_VALUE  !=  hFind)
 80          {
 81              FindClose(hFind);
 82               return  TRUE;
 83          }
 84      }
 85 
 86       return  FALSE;
 87  }
 88 
 89  static  BOOL RunAppFile(TCHAR  * pFilePath)
 90  {
 91       if  (pFilePath)
 92      {
 93          PROCESS_INFORMATION pi;
 94          BOOL bRet  =  FALSE;
 95          bRet  =  CreateProcess(pFilePath,NULL,NULL,NULL,FALSE, 0 ,NULL,
 96              NULL,NULL, & pi);
 97           if  (bRet)
 98          {
 99              CloseHandle(pi.hThread);
100              CloseHandle(pi.hProcess);
101               return  TRUE;
102          }        
103      }
104      
105       return  FALSE;
106  }
107 
108  int  _tmain( int  argc, _TCHAR *  argv[])
109  {
110       //  获取开机时需自启动程序的完整路径
111       //  判断该程序否存在
112       //  如果程序存在,则启动该程序,如果不存在,则启动WinCE默认的Shell
113       if  (GetFilePath(g_szFilePath))
114      {
115           if  (IsFileExist(g_szFilePath))
116          {
117               if (RunAppFile(g_szFilePath))
118              {
119                   return   0 ;
120              }
121          }
122      }
123      
124      RunAppFile(WINCE_STANDARD_SHELL);
125 
126       return   0 ;
127  }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值