使用哪个api可以更改IE的主页?

解决方案 »

  1.   

    无非就是注册表
    HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main
    Start Page
      

  2.   

    楼上正解,所以用这些函数:
    RegOpenKeyEx
    RegCloseKey 
    RegCreateKey
    RegDeleteKey
    RegQueryValueEx
    RegQueryValueExA
    RegSetValueEx
    RegSetValueExA
    RegSetValueExB 
      

  3.   

    用的API就是用修改注册表的方法   没有其他的方法了
      

  4.   

    '碰巧最近写一个WINDOWS应用助手,我初学,写的不好,请大家不要见笑,拿来学而已..
    '以下在类模块(类模块名为m_RegEdit)
    '这里引用了陈锐的部分代码和函数
    '以下是原作者信息
    '***********************By 陈锐******************************
    '这是一个操作注册表的Bas文件,其中包含可以建立新键值,删除
    '键值,查询键值的函数.'Web Site: http://www.nease.net/~blackcat
    'EMail: [email protected]
    Option Explicit'删除项
    Public Function DeleteKey(lPredefinedKey As Long, sKeyName As String)
        Dim lRetVal As Long
        Dim hKey As Long
        
        lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
        lRetVal = RegDeleteKey(lPredefinedKey, sKeyName)
        RegCloseKey (hKey)
    End Function
    '删除键值
    Public Function DeleteValue(lPredefinedKey As Long, sKeyName As String, sValueName As String)
           Dim lRetVal As Long
           Dim hKey As Long       lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
           lRetVal = RegDeleteValue(hKey, sValueName)
           RegCloseKey (hKey)
    End FunctionPrivate Function SetValueEx(ByVal hKey As Long, sValueName As String, lType As Long, vValue As Variant) As Long
        Dim lValue As Long
        Dim sValue As String    Select Case lType
            Case REG_SZ
                sValue = vValue
                SetValueEx = RegSetValueExString(hKey, sValueName, 0&, lType, sValue, Len(sValue))
            Case REG_DWORD
                lValue = vValue
                SetValueEx = RegSetValueExLong(hKey, sValueName, 0&, lType, lValue, 4)
            End SelectEnd Function'查询键值
    Public Function GetKeyValue(KeyRoot As Long, KeyName As String, SubKeyRef As String, ByRef KeyVal As String) As Boolean
        Dim i As Long                                           ' 循环计数器
        Dim rc As Long                                          ' 返回代码
        Dim hKey As Long                                        ' 打开的注册表关键字句柄
        Dim hDepth As Long                                      '
        Dim KeyValType As Long                                  ' 注册表关键字数据类型
        Dim tmpVal As String                                    ' 注册表关键字值的临时存储器
        Dim KeyValSize As Long                                  ' 注册表关键自变量的尺寸
        '------------------------------------------------------------
        ' 打开 {HKEY_LOCAL_MACHINE...} 下的 RegKey
        '------------------------------------------------------------
        rc = RegOpenKeyEx(KeyRoot, KeyName, 0, KEY_ALL_ACCESS, hKey) ' 打开注册表关键字
        
        If (rc <> ERROR_SUCCESS) Then GoTo GetKeyError          ' 处理错误...
        
        tmpVal = String$(1024, 0)                             ' 分配变量空间
        KeyValSize = 1024                                       ' 标记变量尺寸
        
        '------------------------------------------------------------
        ' 检索注册表关键字的值...
        '------------------------------------------------------------
        rc = RegQueryValueEx(hKey, SubKeyRef, 0, _
                             KeyValType, tmpVal, KeyValSize)    ' 获得/创建关键字值
                            
        If (rc <> ERROR_SUCCESS) Then GoTo GetKeyError          ' 处理错误
        
        If (Asc(Mid(tmpVal, KeyValSize, 1)) = 0) Then           ' Win95 外接程序空终结字符串...
            tmpVal = Left(tmpVal, KeyValSize - 1)               ' Null 被找到,从字符串中分离出来
        Else                                                    ' WinNT 没有空终结字符串...
            tmpVal = Left(tmpVal, KeyValSize)                   ' Null 没有被找到, 分离字符串
        End If
        '------------------------------------------------------------
        ' 决定转换的关键字的值类型...
        '------------------------------------------------------------
        Select Case KeyValType                                  ' 搜索数据类型...
        Case REG_SZ                                             ' 字符串注册关键字数据类型
            KeyVal = tmpVal                                     ' 复制字符串的值
        Case REG_DWORD                                          ' 四字节的注册表关键字数据类型
            For i = Len(tmpVal) To 1 Step -1                    ' 将每位进行转换
                KeyVal = KeyVal + Hex(Asc(Mid(tmpVal, i, 1)))   ' 生成值字符。 By Char。
            Next
            KeyVal = Format$("&h" + KeyVal)                     ' 转换四字节的字符为字符串
        End Select
        
        GetKeyValue = True                                      ' 返回成功
        rc = RegCloseKey(hKey)                                  ' 关闭注册表关键字
        Exit Function                                           ' 退出
        
    GetKeyError:      ' 错误发生后将其清除...
        KeyVal = ""                                             ' 设置返回值到空字符串
        GetKeyValue = False                                     ' 返回失败
        rc = RegCloseKey(hKey)                                  ' 关闭注册表关键字
    End Function
    '建立新项,如指定的项已经存在,则函数会打开现有的项
    Public Function CreateNewKey(lPredefinedKey As Long, sNewKeyName As String)
        Dim hNewKey As Long
        Dim lRetVal As Long
        
        lRetVal = RegCreateKeyEx(lPredefinedKey, sNewKeyName, 0&, vbNullString, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, 0&, hNewKey, lRetVal)
        RegCloseKey (hNewKey)
    End Function
    '设置键值
    Public Function SetKeyValue(lPredefinedKey As Long, sKeyName As String, sValueName As String, vValueSetting As Variant, lValueType As Long)
           Dim lRetVal As Long
           Dim hKey As Long       lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
           lRetVal = SetValueEx(hKey, sValueName, lValueType, vValueSetting)
           RegCloseKey (hKey)
    End Function
      

  5.   

    '接以上内容
    '以下在一个函数中,我放在了模块里
    Option Explicit'注册表常量及API
    '*************************************************************************************
    Public Const REG_SZ As Long = 1
    Public Const REG_DWORD As Long = 4Public Const HKEY_CLASSES_ROOT = &H80000000
    Public Const HKEY_CURRENT_USER = &H80000001
    Public Const HKEY_LOCAL_MACHINE = &H80000002
    Public Const HKEY_USERS = &H80000003Public Const STANDARD_RIGHTS_ALL = &H1F0000
    Public Const KEY_QUERY_VALUE = &H1
    Public Const KEY_SET_VALUE = &H2
    Public Const KEY_CREATE_SUB_KEY = &H4
    Public Const KEY_ENUMERATE_SUB_KEYS = &H8
    Public Const KEY_NOTIFY = &H10
    Public Const KEY_CREATE_LINK = &H20
    Public Const SYNCHRONIZE = &H100000
    Public Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or KEY_CREATE_LINK) And (Not SYNCHRONIZE))Public Const ERROR_SUCCESS = 0&
    ' 注册表关键字 ROOT 类型...Public Const REG_OPTION_NON_VOLATILE = 0Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
    Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, ByVal lpSecurityAttributes As Long, phkResult As Long, lpdwDisposition As Long) As Long
    Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
    Declare Function RegQueryValueExString Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As String, lpcbData As Long) As Long
    Declare Function RegQueryValueExLong Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Long, lpcbData As Long) As Long
    Declare Function RegQueryValueExNULL Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As Long, lpcbData As Long) As Long
    Declare Function RegSetValueExString Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpValue As String, ByVal cbData As Long) As Long
    Declare Function RegSetValueExLong Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpValue As Long, ByVal cbData As Long) As Long
    Declare Function RegDeleteKey& Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String)
    Declare Function RegDeleteValue& Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String)
    Declare Function RegQueryValueEx Lib "advapi32" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, ByRef lpType As Long, ByVal lpData As String, ByRef lpcbData As Long) As LongPrivate mRegEdit As New m_RegEdit
    Public Sub rEidt(Byval MyHome as String)
        '函数在注册表的"HKEY_CURRENT_USER\Software"中建立了
        '一个SubKey1项并在其中建立了值,并在显示后删除建立
        '的值,如果你想通过RegEdit看到结果,可以将最后两句
        '删除,不过要记得手动删除建立的键值
        Dim mstr As String
    '打开HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main
        mRegEdit.CreateNewKey HKEY_CURRENT_USER, "Software\Microsoft\Internet Explorer\Main"
    '获取值并保存在mstr中
        mRegEdit.GetKeyValue HKEY_CURRENT_USER, "Software\Microsoft\Internet Explorer\Main", "Start Page", mstr
    '显示现在的主页
        MsgBox mstr
    '设置现在的主页
        mRegEdit.SetKeyValue HKEY_CURRENT_USER, "Software\Microsoft\Internet Explorer\Main", "Start Page", MyHome ,REG_SZ
    '下面演示了删除一个项
        'mRegEdit.DeleteValue HKEY_CURRENT_USER, "Software\Microsoft\Internet Explorer\Main", "Start Page"
    '下面演示了如何删除一个键
        'mRegEdit.DeleteKey HKEY_CURRENT_USER, "Software\Microsoft\Internet Explorer\Main"
    End Sub'然后在你的程序里调用rEidt("about:blank")就可以了,当然了,你可以把rEidt里面的值写成参数形式,就可以多次用了