参考这段程序(我写的可能不太规范,但能用):
Public Declare Function RegLoadKey Lib "advapi32.dll" Alias "RegLoadKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal lpFile As String) As Long
Public Declare Function RegUnLoadKey Lib "advapi32.dll" Alias "RegUnLoadKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long
Public Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Public Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
Public Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, lpData As Byte, lpcbData As Long) As LongPublic Const HKEY_CLASSES_ROOT = &H80000000
Public Const HKEY_CURRENT_CONFIG = &H80000005
Public Const HKEY_CURRENT_USER = &H80000001
Public Const HKEY_DYN_DATA = &H80000006
Public Const HKEY_LOCAL_MACHINE = &H80000002
Public Const HKEY_PERFORMANCE_DATA = &H80000004
Public Const HKEY_USERS = &H80000003    ' 给"Card Manager File"设置命令行参数
    sKeyName = "Card Manager File"
    sKeyValue = App.Path
    If Right(sKeyValue, 1) <> "\" Then sKeyValue = sKeyValue + "\"
    sKeyValue = Chr(34) + sKeyValue + App.EXEName + ".EXE" + Chr(34) + " %1"
    Ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&)
    If Ret& <> ERROR_SUCCESS Then MsgBox Ret&, vbCritical
    Ret& = RegSetValue&(lphKey&, "shell\open\command", REG_SZ, sKeyValue, MAX_PATH)
    If Ret& <> ERROR_SUCCESS Then MsgBox Ret&, vbCritical今天实在犯懒,不帮你改了,自己改几个参数吧。

解决方案 »

  1.   

    和修改注册表其它地方的键值一样的呀……没什么特别的。
    如果你不知道完整的路径我可以告诉你:
    \HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
    要用到的API函数如果你不清楚的话可以看楼上那位老兄说的。
      

  2.   

      我不是要将程序加在\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run 中,那样太容易
    给人找到。
      

  3.   

    还有一个键可以用,键名我忘了!就在RUN下面!
      

  4.   

    嘻嘻
    那写到WIN.INI里好了
    一般人还不一定知道,也不会注意
    运行msconfig
      

  5.   

    嘻嘻
    那写到WIN.INI里好了
    一般人还不一定知道,也不会注意
    运行msconfig或sysedit
      

  6.   

    此一问题比较普通的解决方法是在「开始功能表 -> 程序集 -> 启动」资料夹中放置可执行文件或建立可执行文件的捷径,若采用此一方法, 则使用者仍然可以在开机时按住 Shift 键, 让 Windows 忽略「启动」资料夹中的可执行文件,也就是不执行它们。 是不是有什么方法可以让程序一定会被执行呢?答案是把可执行文件的资讯写入登录资料库(Registry)的以下 SubKey底下:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run举例来说,如果写入以下 Value,则 Notepad 程序会在 Windows 启动时被执行:Value名称 Value值
    "记事本" "Notepad"写入时, 「Value值」的部分可以是完整路径档名或可执行文件名, 但如果只写入可执行文件名(未含完整路径),则该可执行文件必须位于Windows的目录、 Windows的System目录、 目前工作目录、或PATH环境变数所定义的目录底下, Windows才能够加以执行, 以Notepad.exe程序为例,由于是位于Windows的目录底下, 所以只要书写可执行文件名即可。至于「Value名称」的部分则没什么限制,只要不会与其他Value名称相冲突即可。
      

  7.   

    如果你水平够高的话,可以编写vxd,在system.ini中加载,那样更厉害!
      

  8.   

    HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Runservices也可以,BO用的就是这个
    还有一个就是替换掉文件的关联,比如把txt文件指向你的程序,这样一但打开txt文件就会启动你的程序。然后你的程序再调用notepad去打开txt文件,这是“冰河”的方法。
    我有一个想法,不知是否可行:
      通过替换掉一些常用的Shell来做到,在C:\recycled\desktop.ini中可以看到一个GUID,在注册表中搜索可以查到这个GUID指向shell32.dll。用DependencWalker可以得出该dll所有的函数。只需要写一个一样的dll,使注册表指向我们的dll即可实现在删除文件的时候我们的程序被激活。以上只是想法,不知是否可行,见笑了。