rt

解决方案 »

  1.   

    我就是问怎么读,比如要测试是否装了yahoo助手IE工具条.怎么判断?
      

  2.   

    看工具条在注册表中写了那些关键信息,如版本号什么的,然后用下面的方法读,如果成功读取,就证明已经安装了.
    RegOpenKeyEx
    RegQueryValueEx
      

  3.   

    先通过跟踪某个软件安装时所添加的注册表项,然后使用RegOpenKeyEx
    RegQueryValueEx等函数来读取相关的项.另外,并不是所有软件安装都添加信息到注册表项的
      

  4.   

    以前看到的:
    RegCreateKeyEx()和RegCreateKey() 
      原形:LONG RegCreateKeyEx( 
            HKEY hKey,        // 主键名称 
            LPCTSTR lpSubKey,     // 子键名称或路径 
            DWORD Reserved,      // 保留,为0 
            LPTSTR lpClass,      // 没弄懂,我设为空也差不多 
            DWORD dwOptions,      
                 /* 对你建立的键的一些选项,可以是这些值:REG_OPTION_NON_VOLATILE,REG_OPTION_VOLATILE,REG_OPTION_BACKUP_RESTORE第一个是默认的了。一般用第一个就可以了。*/ 
            REGSAM samDesired,    // 设置你对你建立的这个键的访问权限 
            LPSECURITY_ATTRIBUTES lpSecurityAttributes, 
                 //不太明白 
            PHKEY phkResult,     // 指向你建的句柄 
            LPDWORD lpdwDisposition  //用来查看是打开一个已经有的键,还是新建了键 
          ); 
      RegCreateKey()函数简单了不少,请自己看了。 
      返回值:不成功返回非0,成功返回ERROR_SUCCESS. 
      解释:打开指定的键或子键。如果要打开的键不存在的话,本函数会试图建立它。当在创建或打开注册表的键时,需要指定访问权限,而这些访问权限需要到一级。默认的权限是KEY_ALL_ACCESS权限。还有KEY_CREATE_LINK创建字符链权限,KEY_CREATE_SUB_KEY创建子键权限,KEY_EXECUTE读取键权限,KEY_NOTIFY获得修改键通知的权限,KEY_QUERY_VALUE查询键值的权限,KEY_SET_VALUE设置数据值的权限。注意不能在根一级建键,在注册表的根一级仅可有预定义的键。具体使用,请查看联机手册。 
    例子: 
       HKEY m_hkey; 
       DWORD dwDisposition; 
       long ret0=(::RegCreateKeyEx 
          (HKEY_CURRENT_USER,"REGD\\",0,NULL, 
          REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&m_hkey,&dwDisposition)); 
       if(ret0!=ERROR_SUCCESS) //如果无法打开hKEY,则终止程序的执行 
       { 
          MessageBox("错误: 无法打开有关的hKEY!"); 
          return; 
       } 
       if(dwDisposition==REG_OPENED_EXISTING_KEY) 
          MessageBox("打开了一个已经存在的键"); 
       else 
       { 
         if(dwDisposition==REG_CREATED_NEW_KEY) 
            MessageBox("建立一个新键"); 
       } 
       RegClosekey(m_hkey);   3·RegOpenKey()和RegOpenKeyEx() 
      原形:LONG RegOpenKeyEx( 
            HKEY hKey,     // 要打开主键名 
            LPCTSTR lpSubKey, // 子键或路径 
            DWORD ulOptions,  // 保留,为0 
            REGSAM samDesired, // 操作权限标志 
            PHKEY phkResult  // 指向你打开键的句柄 
          ); 
      返回值:不成功返回非0,成功返回ERROR_SUCCESS. 
      解释:该函数负责打开指定的键或子键,如果不存在他不建立。其他和RegCreateKeyEx()和RegCreateKey()基本相同。 
      

  5.   

    还是以前看到的:
    RegQueryValue()和RegQueryValueEx() 
      原形:LONG RegQueryValueEx( 
            HKEY hKey,      // 已打开的键的句柄 
            LPTSTR lpValueName, // 要查询值的名称,传如""为查询键下的默认值 
            LPDWORD lpReserved, // 保留,为0 
            LPDWORD lpType,   // 查询的类型 
            LPBYTE lpData,    // 数据存放的地址 
            LPDWORD lpcbData   // 数据长度+1 
          ); 
      返回值:不成功返回非0,成功返回ERROR_SUCCESS 
      解释:读取某子键下特定名称的值。 
      例子 
       CString m_strQ;//用来存放查询来的字符串值  
       DWORD m_dwCount;//记录字符串的长度+1(包括NULL字符)  
       ::RegQueryValueEx(m_hkey,"",0,NULL,NULL,&m_dwCount);//先查询出字节空间   
       ret1=(::RegQueryValueEx 
            (m_hkey,"",0,NULL,(unsigned char *)m_strQ.GetBuffer(m_dwCount),&m_kk)); 
       m_strQ.ReleaseBuffer(); 
       MessageBox(m_strQ); 
      

  6.   

    RegOpenKeyEx 打开成功就在咯.