参考这段程序(我写的可能不太规范,但能用):
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今天实在犯懒,不帮你改了,自己改几个参数吧。
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今天实在犯懒,不帮你改了,自己改几个参数吧。
如果你不知道完整的路径我可以告诉你:
\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
要用到的API函数如果你不清楚的话可以看楼上那位老兄说的。
给人找到。
那写到WIN.INI里好了
一般人还不一定知道,也不会注意
运行msconfig
那写到WIN.INI里好了
一般人还不一定知道,也不会注意
运行msconfig或sysedit
"记事本" "Notepad"写入时, 「Value值」的部分可以是完整路径档名或可执行文件名, 但如果只写入可执行文件名(未含完整路径),则该可执行文件必须位于Windows的目录、 Windows的System目录、 目前工作目录、或PATH环境变数所定义的目录底下, Windows才能够加以执行, 以Notepad.exe程序为例,由于是位于Windows的目录底下, 所以只要书写可执行文件名即可。至于「Value名称」的部分则没什么限制,只要不会与其他Value名称相冲突即可。
还有一个就是替换掉文件的关联,比如把txt文件指向你的程序,这样一但打开txt文件就会启动你的程序。然后你的程序再调用notepad去打开txt文件,这是“冰河”的方法。
我有一个想法,不知是否可行:
通过替换掉一些常用的Shell来做到,在C:\recycled\desktop.ini中可以看到一个GUID,在注册表中搜索可以查到这个GUID指向shell32.dll。用DependencWalker可以得出该dll所有的函数。只需要写一个一样的dll,使注册表指向我们的dll即可实现在删除文件的时候我们的程序被激活。以上只是想法,不知是否可行,见笑了。