经过研究发现了以下几点,我的 OS 是WIN 7
1. 通过注册表来实现开机启动,注册表项: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\XMP
2. 会先运行 “c:\Users\Public\Thunder Network\XMP4\Core\Program\xmp.exe”,只会显示一个 系统的托盘
3.点击该 托盘的时候,卸掉托盘,运行 本机 存放在 D 盘的 xmp.exe, 然后退出
4. 单击 D盘的 xmp ,主界面显示出来的时候,对注册表进行操作,实现 开机启动
试了很多方法,都没用。只好用死办法了,修改导入表,让D盘那个 xmp.exe 加载我们的DLL,我们的DLL代码如下:
//DllMain.h
DWORD WINAPI MyThread(LPVOID);
//DllMain.cpp
#include <windows.h>
#include "DllMain.h"
BOOL WINAPI DllMain(HINSTANCE hInstance,DWORD dwReason,LPVOID)
{
if(dwReason == DLL_PROCESS_ATTACH){
CreateThread(0,100,(LPTHREAD_START_ROUTINE)MyThread,0,0,0);
}
return TRUE;
}
DWORD WINAPI MyThread(LPVOID)
{
HKEY hKey;
while(1){
LONG ret = RegOpenKeyEx(HKEY_CURRENT_USER,
"Software\\Microsoft\\Windows\\CurrentVersion\\Run",0,KEY_ALL_ACCESS,&hKey);
if(ret != ERROR_SUCCESS) return 0;
RegDeleteValue(hKey,"XMP");
RegCloseKey(hKey);
Sleep(1000);
}
return 1;
}
//DllMain.def
LIBRARY PreventXunLei
EXPORTS
MyThread @1
本文详细介绍了如何在Win7系统中通过注册表和自定义DLL实现程序的开机启动功能,包括注册表操作、程序启动流程及自定义DLL的编写。
2万+

被折叠的 条评论
为什么被折叠?



