我是一个VC的爱好者,在学习过程中,遇到一个问题,请问各位高手:即如何使自己的程序在windows登录界面启动后自动出现?
我指的是进入windows系统以后,自己的程序就启动了,就像QQ的登录界面一样。我想在程序代码中实现这个功能,我猜可能是某个Win32API函数可以实现这个功能,但我查了不少资料,都没找到。可能我的思路也有问题,虚心请教各位高手,恳请指点迷津。万分感谢!
我指的是进入windows系统以后,自己的程序就启动了,就像QQ的登录界面一样。我想在程序代码中实现这个功能,我猜可能是某个Win32API函数可以实现这个功能,但我查了不少资料,都没找到。可能我的思路也有问题,虚心请教各位高手,恳请指点迷津。万分感谢!
http://www.java-asp.net/vc/200602/t_42299.html
http://blog.csdn.net/chinawash/archive/2006/12/27/1463749.aspx
http://topic.csdn.net/t/20041111/09/3542057.html
http://www.80diy.com/home/20020731/10/912525.html
To rockally():你给的4个链接我都仔细的读了,而且用VC++6.0都试了试,可惜我是个VC的菜鸟,Windows系统启动之后,我自己的程序还是无法自行启动,郁闷!
非常感谢两位的大力帮助,同时也期待着问题早日解决!
由于水平实在有限,所以我把自己的过程描述一下,恳请各位高人指点!
我建立一个“ziqidong”的基于对话框的VC工程。根据To rockally()提供的链接,然后把以下代码加入BOOL CZiqidongApp::InitInstance()函数中://写入注册表,开机自启动
HKEY hKey;
//找到系统的启动项
LPCTSTR lpRun = "Software\\Microsoft\\Windows\\CurrentVersion\\Run";
//打开启动项Key
long lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpRun, 0, KEY_WRITE, &hKey);
if(lRet == ERROR_SUCCESS)
{
char pFileName[MAX_PATH] = {0};
//得到程序自身的全路径
DWORD dwRet = GetModuleFileName(NULL, pFileName, MAX_PATH);
//添加一个子Key,并设置值
lRet = RegSetValueEx(hKey, "WorkAssist", 0, REG_SZ, (BYTE *)pFileName, dwRet);
//关闭注册表
RegCloseKey(hKey);
if(lRet != ERROR_SUCCESS)
{
AfxMessageBox("系统参数错误,不能随系统启动");
}
}然后我把RegSetValueEx函数中的第2个参数"WorkAssist"改成了我的“ziqidong”,最后编译、运行,重启系统,效果并没有出现。
请问各位高人:问题出在哪里?是我把这段代码加入的位置不对,还是哪里有不妥的地方?恳请指点一二!
LPCTSTR lpModuleName // module name
);
传递NULL获取当前进程的模块句柄hModule
DWORD GetModuleFileName(
HMODULE hModule, // handle to module
LPTSTR lpFilename, // file name of module
DWORD nSize // size of buffer
);
再用GetModuleFileName传递模块句柄hModule获取路径
再用注册表相关函数如:
RegCreateKeyEx
RegOpenKeyEx
RegQueryValueEx
RegSetValueEx
RegCloseKey
将其写入注册表启动项:
如:
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]
或者:[HKEY_CURRENT_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run]
我将你的代码拷贝了一份,在我的Vc 6.0上测试了一下,完全可以自启动的。呵呵。
要不你写全路径试试:
LPCTSTR lpRun = "HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Run";
你在运行中输入"regedit",看注册表响应位置(run里)有没有你的可执行文件路径,有就成功了。!