请教,如何使MFC程序一开机就自动运行???? 现在有很多软件不是都有一个选项,让操作系统一起动就运行程序,我做的是一个简单的mfc程序,名字server.exe,也想让操作系统一起动就自动运行server.exe,当然我不想把它拖到“程序”中的"启动"菜单里面,而让程序自动运行,这个怎么实现???? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 注册表操作两个APIRegOpenKeyRegSetValueEx你自己查一下就知道了 1、AUTOEXEC.BAT及CONFIG.SYS文件,实模式的驱动程序常常出现在这里(Windows ME并不理会AUTOEXEC.BAT里的自启动程序)。 2、WIN.INI文件,即使是Windows ME也还存在WIN.INI这样的老古董,文件中的[Winodws]部分RUN=此行可加载程序。 3、Startup文件夹,只要不担心被用户发现的自启动程序,往往都安装在此文件夹里。用户只须进入C:\Windows\start menu\programs\startup(启动)目录下将其删除即可。 4、计划任务文件夹,"计划任务"程序是将程序安排为定期运行的工具。"计划任务"程序随 Windows 一起启动,并在后台运行,如果把某一程序添加到计划任务文件夹,并将计划任务设置为“系统启动时”或“登录时”,就可以实现自启动功能。 5、registry注册表,那些跟踪、监视欲非法获取用户包括密码、帐号在内的私有信息的软件总是要把自启动程序隐藏在不易别被人察觉的深处,而registry是其最好的藏身之处,一般的菜鸟因惧怕系统瘫痪而不敢随意到registry里瞎逛。在registry的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices及HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run主键下的程序就是自启动程序。 此外,Winstart.bat文件也可实现自启动,不过现在已很少见。 你的机器里究竟有多少自启动程序在无声无息地运行着,并非是在任务栏、系统通告区、屏幕界面上都能发现的,那些非法的自启动程序绝不会痛痛快快地在你面前亮相,即使你按“Ctrl+Alt+Del” 键也未必找到蛛丝马迹。 使用Winodws自带的“系统信息”工具,可以找出从Startup文件夹、计划任务程序、注册表中自启动的程序。通过单击[开始]→[程序]→[附件]→[系统工具]→[系统信息],进入系统信息界面后,再单击“软件环境”前的“+”号,单击“启动程序”,在右边窗口出现的程序就是自启动程序。在右边窗口中,“程序”标题下所列的名称为自启动的程序名,“命令”标题下面是自启动程序所执行的文件及其所在的路径,位置标题下面说明自启动程序是从何处实现自启动的,如Scanregistry程序,运行的是c:\windows\scanregw.exe文件,它是在注册表里的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run主键下面实现自启动的。如果位置标题没有出现,可单击“查看”菜单下的“高级”子菜单。如果标题下面的内容显示不完整,可双击标题栏间的分隔线。 系统信息中的MSTASK.EXE命令是计划任务的文件名,它本身也是通过注册表自启动的,因此,通过计划任务程序实现自启动的程序在系统信息中看不到它的文件名,一旦把MSTASK.EXE命令从注册表中删除或禁用,那么通过计划任务启动的程序全部不能自动运行。 能让软件去实现吗,我只想修改server.exe程序,比如说在我的源程序里面通过添加代码来实现让程序一开机就自动运行???可以吗? RegOpenKeyRegSetValueEx将你程序全路径写进去HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 示范一下,好吗?谢谢,比如说我的mfc程序在 c:\vc\server.exe REGEDIT4[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]myserver = "C:\vc\myserver.exe"----将上面的写入.reg文件,然后倒入就行了。 好的,谢谢:[email protected]或[email protected] 这是我写的一段代码,你参考一下。只不过要不路径改到“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run”里边void CDataRegisterDlg::Register(){ HKEY hKey;//主键值 HKEY hkResult;//用来指向打开的键的句柄 LONG result;//结果 hKey=HKEY_LOCAL_MACHINE;//主键值 CString SubKey = "SoftWare\\DataRegister";//一个指向以零结尾的字符串的指针,其中包含子键的名称 result = RegOpenKeyEx( hKey, SubKey, 0, KEY_ALL_ACCESS, &hkResult ); if(result!=ERROR_SUCCESS) { OpenChar(); result = RegCreateKey(hKey,SubKey,&hkResult); if(result != ERROR_SUCCESS) { MessageBox("程序初始化失败"); } //初始化注册表 else { unsigned char tmp[256]; sprintf((char *)tmp,"%s",m_strConnect); CString tmpstring=tmp; DWORD size=tmpstring.GetLength()+1; RegSetValueEx( hkResult, "m_strConnect", 0, REG_SZ, tmp, size ); RegCloseKey(hkResult); } } //从注册表读出设置,初始化程序 else { unsigned char tmp[512]="\0"; DWORD type=REG_SZ; DWORD size=512; RegQueryValueEx( hkResult, "m_strConnect", NULL, &type, tmp, &size ); m_strConnect1=CString(tmp); RegCloseKey(hkResult); }}void CDataRegisterDlg::Register1(){ HKEY hKey;//主键值 HKEY hkResult;//用来指向打开的键的句柄 LONG result;//结果 hKey=HKEY_LOCAL_MACHINE;//主键值 CString SubKey = "SoftWare\\DataRegister";//一个指向以零结尾的字符串的指针,其中包含子键的名称 result = RegOpenKeyEx( hKey, SubKey, 0, KEY_ALL_ACCESS, &hkResult ); if(result!=ERROR_SUCCESS) { MessageBox("错误: 修改无法打开有关的主键!"); return; } unsigned char tmp[512]; sprintf((char *)tmp,"%s",m_strConnect); CString tmpstring=tmp; DWORD size=tmpstring.GetLength()+1; RegSetValueEx( hkResult, "m_strConnect", 0, REG_SZ, tmp, size ); RegCloseKey(hkResult);} 在NT或2K下在每次重启进来时自动运行。1、利用"开始"菜单中的"启动"程序项。凡是拖入该程序项的程序都可以实现自动运行。将程序拷贝到"C:\Documents and Settings\All Users\「开始」菜单\程序\启动"(要根据注册表来查找这个目录)这个目录下即可。2、利用win.ini文件中的run变量。编辑win.ini,为run变量赋值。如run= 某程序,可以使某程序实现自动运行。 写win.ini文件[windows] load=file.exe run=file.exe 注意:load=与run=的区别在于:通过load=运行文件,文件会在后台运行(最小化);而通过run=来运行,则文件是在默认状态下被运行的。3、利用注册表。通过修改注册表中相关项,实现程序自动运行。 看上去,第一种方法是最容易实现的。由于所谓的"开始"程序菜单实际上是一个特殊目录下的特殊文件。其目录一般在c:\ windows \ start menu \ programs下。"启动"程序项的目录一般为c:\ windows \ start menu \ programs \ 启动。这样程序只要在把自身拷贝到此目录下就可以实现程序自动运行了。然而这里有个问题,如果出现特殊情况,"启动"程序项的目录不在理想目录下呢?自动运行显然无法实现了。要解决这个问题,我们可以利用注册表得到有关信息。在注册表hkey_users\.default\software\microsoft\windows\ currentversion\explorer\shell folders下,读取startup项的值就可以知道"启动"程序项的准确目录了。对于注册表的操作,c++ builder3提供了tregister类,使用十分方便。关于tregister类的具体介绍,大家可以参考c++ builder3的在线帮助,这里就不多阐述了。程序如下: tregister *test;test = new tregister();test->rootkey = hkey_users;if(test->openkey(".default\\software\\microsoft\\windows\\currentversion\\ explorer\\shell folders",false)) path = test->readstring("startup"); //获得"启动"程序项准确目录delete test;对于第二种方法,关键在于对win.ini的读写。win.ini为windows启动时初始配置文件,存放在系统目录下。系统目录可以在注册表hkey_local_machine \software\windows\currentversion下,通过读取systemroot值得到。程序自身的存放路径可以利用c++ builder3中application类的exename变量得到。使用c++ builder3提供的tinifile类,我们可以十分方便地对ini文件进行操作。程序如下: tregister *test; tinifile *inifile; test = new tregister(); test->rootkey = hkey_local_machine; if(test->openkey("software\\windows\\currentversion",false)) path = test->readstring("systemroot"); //获得windows系统目录 delete test; path = path + "\\win.ini"; //获得win.ini的完整路径 inifile = new tinifile(path); inifile->writestring("windows","run",application->exename); // run = 执行文件名 delete inifile; 对于第三种方法,实现起来最为隐蔽。如果不了解注册表,想去掉自动执行都不行哦。在注册表hkey_local_machine \software \ microsoft \ windows \ currentversion\run下的所有程序项都可以被windows自动执行。因此,我们可以通过添加新程序项实现自动执行功能。程序如下: tregister *test;test = new tregistry();test->rootkey = hkey_local_machine;if(test->openkey("software\\microsoft\windows\\currentversion\\run",false)) test->writestring("my program",application->exename);delete test; 谢谢luckyboy1979(菜鸟):那怎么在注册表中删除它呢? 在VC6.0环境下如何用ClassWizard创建带菜单的应用程序 获取网页的 session 值 关于线程的问题? 从VB6.0中调用Vc++编写的Dll文件,出现错误,请各位大侠指正!(急,急,急!!!!!) vc连接access 如何在视图中以二进制形式显示数据.谢谢. 急等,100分 怎样自己写派生自CObject的自定义的类,新手的小问题,请大家帮忙,谢谢 如何画带箭头的直线? CppUnit在嵌入式平台上如何用? 谁能看懂这段代码??? 请教网络编程中对email地址和图片获取的处理?
1、AUTOEXEC.BAT及CONFIG.SYS文件,实模式的驱动程序常常出现在这里(Windows ME并不理会AUTOEXEC.BAT里的自启动程序)。 2、WIN.INI文件,即使是Windows ME也还存在WIN.INI这样的老古董,文件中的[Winodws]部分RUN=此行可加载程序。 3、Startup文件夹,只要不担心被用户发现的自启动程序,往往都安装在此文件夹里。用户只须进入C:\Windows\start menu\programs\startup(启动)目录下将其删除即可。 4、计划任务文件夹,"计划任务"程序是将程序安排为定期运行的工具。"计划任务"程序随 Windows 一起启动,并在后台运行,如果把某一程序添加到计划任务文件夹,并将计划任务设置为“系统启动时”或“登录时”,就可以实现自启动功能。 5、registry注册表,那些跟踪、监视欲非法获取用户包括密码、帐号在内的私有信息的软件总是要把自启动程序隐藏在不易别被人察觉的深处,而registry是其最好的藏身之处,一般的菜鸟因惧怕系统瘫痪而不敢随意到registry里瞎逛。在registry的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\
RunServices及HKEY_CURRENT_USER\Software\Microsoft\Windows\
CurrentVersion\Run主键下的程序就是自启动程序。 此外,Winstart.bat文件也可实现自启动,不过现在已很少见。 你的机器里究竟有多少自启动程序在无声无息地运行着,并非是在任务栏、系统通告区、屏幕界面上都能发现的,那些非法的自启动程序绝不会痛痛快快地在你面前亮相,即使你按“Ctrl+Alt+Del” 键也未必找到蛛丝马迹。 使用Winodws自带的“系统信息”工具,可以找出从Startup文件夹、计划任务程序、注册表中自启动的程序。通过单击[开始]→[程序]→[附件]→[系统工具]→[系统信息],进入系统信息界面后,再单击“软件环境”前的“+”号,单击“启动程序”,在右边窗口出现的程序就是自启动程序。在右边窗口中,“程序”标题下所列的名称为自启动的程序名,“命令”标题下面是自启动程序所执行的文件及其所在的路径,位置标题下面说明自启动程序是从何处实现自启动的,如Scanregistry程序,运行的是c:\windows\scanregw.exe文件,它是在注册表里的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run主键下面实现自启动的。如果位置标题没有出现,可单击“查看”菜单下的“高级”子菜单。如果标题下面的内容显示不完整,可双击标题栏间的分隔线。 系统信息中的MSTASK.EXE命令是计划任务的文件名,它本身也是通过注册表自启动的,因此,通过计划任务程序实现自启动的程序在系统信息中看不到它的文件名,一旦把MSTASK.EXE命令从注册表中删除或禁用,那么通过计划任务启动的程序全部不能自动运行。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
myserver = "C:\vc\myserver.exe"----
将上面的写入.reg文件,然后倒入就行了。
[email protected]
或
[email protected]
只不过要不路径改到“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run”里边
void CDataRegisterDlg::Register()
{
HKEY hKey;//主键值
HKEY hkResult;//用来指向打开的键的句柄
LONG result;//结果
hKey=HKEY_LOCAL_MACHINE;//主键值
CString SubKey = "SoftWare\\DataRegister";//一个指向以零结尾的字符串的指针,其中包含子键的名称
result = RegOpenKeyEx(
hKey,
SubKey,
0,
KEY_ALL_ACCESS,
&hkResult
);
if(result!=ERROR_SUCCESS)
{
OpenChar();
result = RegCreateKey(hKey,SubKey,&hkResult);
if(result != ERROR_SUCCESS)
{
MessageBox("程序初始化失败");
}
//初始化注册表
else
{
unsigned char tmp[256];
sprintf((char *)tmp,"%s",m_strConnect);
CString tmpstring=tmp;
DWORD size=tmpstring.GetLength()+1;
RegSetValueEx(
hkResult,
"m_strConnect",
0,
REG_SZ,
tmp,
size
);
RegCloseKey(hkResult);
}
}
//从注册表读出设置,初始化程序
else
{
unsigned char tmp[512]="\0";
DWORD type=REG_SZ;
DWORD size=512; RegQueryValueEx(
hkResult,
"m_strConnect",
NULL,
&type,
tmp,
&size
); m_strConnect1=CString(tmp);
RegCloseKey(hkResult);
}
}
void CDataRegisterDlg::Register1()
{
HKEY hKey;//主键值
HKEY hkResult;//用来指向打开的键的句柄
LONG result;//结果
hKey=HKEY_LOCAL_MACHINE;//主键值
CString SubKey = "SoftWare\\DataRegister";//一个指向以零结尾的字符串的指针,其中包含子键的名称
result = RegOpenKeyEx(
hKey,
SubKey,
0,
KEY_ALL_ACCESS,
&hkResult
);
if(result!=ERROR_SUCCESS)
{
MessageBox("错误: 修改无法打开有关的主键!");
return;
}
unsigned char tmp[512];
sprintf((char *)tmp,"%s",m_strConnect);
CString tmpstring=tmp;
DWORD size=tmpstring.GetLength()+1;
RegSetValueEx(
hkResult,
"m_strConnect",
0,
REG_SZ,
tmp,
size
);
RegCloseKey(hkResult);}
行。将程序拷贝到"C:\Documents and Settings\All Users\「开始」菜单\程序\启动"
(要根据注册表来查找这个目录)这个目录下即可。2、利用win.ini文件中的run变量。编辑win.ini,为run变量赋值。如run= 某程序,可
以使某程序实现自动运行。
写win.ini文件
[windows]
load=file.exe
run=file.exe
注意:load=与run=的区别在于:通过load=运行文件,文件会在后台运行(最小化);
而通过run=来运行,则文件是在默认状态下被运行的。3、利用注册表。通过修改注册表中相关项,实现程序自动运行。
看上去,第一种方法是最容易实现的。由于所谓的"开始"程序菜单实际上是一个特殊
目录下的特殊文件。其目录一般在c:\ windows \ start menu \ programs下。"启动"
程序项的目录一般为c:\ windows \ start menu \ programs \ 启动。这样程序只要
在把自身拷贝到此目录下就可以实现程序自动运行了。然而这里有个问题,如果出现
特殊情况,"启动"程序项的目录不在理想目录下呢?自动运行显然无法实现了。要解
决这个问题,我们可以利用注册表得到有关信息。在注册表
hkey_users\.default\software\microsoft\windows\ currentversion\explorer\
shell folders下,读取startup项的值就可以知道"启动"程序项的准确目录了。对于
注册表的操作,c++ builder3提供了tregister类,使用十分方便。关于tregister类
的具体介绍,大家可以参考c++ builder3的在线帮助,这里就不多阐述了。
程序如下: tregister *test;
test = new tregister();
test->rootkey = hkey_users;
if(test->openkey(".default\\software\\microsoft\\windows\\currentversion\\
explorer\\shell folders",false))
path = test->readstring("startup"); //获得"启动"程序项准确目录
delete test;对于第二种方法,关键在于对win.ini的读写。win.ini为windows启动时初始配置文件,
存放在系统目录下。系统目录可以在注册表hkey_local_machine \software\windows\
currentversion下,通过读取systemroot值得到。程序自身的存放路径可以利用
c++ builder3中application类的exename变量得到。使用c++ builder3提供的
tinifile类,我们可以十分方便地对ini文件进行操作。程序如下:
tregister *test;
tinifile *inifile;
test = new tregister();
test->rootkey = hkey_local_machine;
if(test->openkey("software\\windows\\currentversion",false))
path = test->readstring("systemroot"); //获得windows系统目录
delete test;
path = path + "\\win.ini"; //获得win.ini的完整路径
inifile = new tinifile(path);
inifile->writestring("windows","run",application->exename);
// run = 执行文件名
delete inifile;
对于第三种方法,实现起来最为隐蔽。如果不了解注册表,想去掉自动执行都不行哦。
在注册表hkey_local_machine \software \ microsoft \ windows \ currentversion
\run下的所有程序项都可以被windows自动执行。因此,我们可以通过添加新程序项实
现自动执行功能。程序如下:
tregister *test;
test = new tregistry();
test->rootkey = hkey_local_machine;
if(test->openkey("software\\microsoft\windows\\currentversion\\run",false))
test->writestring("my program",application->exename);
delete test;