如何在WINDOWS启动时加载程序!(100分)

  • 主题发起人 主题发起人 YGYtop
  • 开始时间 开始时间
Y

YGYtop

Unregistered / Unconfirmed
GUEST, unregistred user!
请教如何把程序加载到注册表中,并使它在WINDOWS启动时运行,就象金山影霸,在STARTUP中是看不见的!
 
在注册表中加入
 
加在HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion下的
Run
RunOnce
RunServices
中之一即可。
 
var Reg:Tregistry;
begin
Reg:=Tregistry.Create;
Reg.RootKey:=HKEY_LOCAL_MACHINE;
Reg.OpenKey(Software/Microsoft/Windows/CurrentVersion/Run',False);
Reg.WriteString('sysExplr','d:/SthVCD/SysExplr.EXE');//换成你的
Reg.CloseKey;
Reg.Free;
end;
 
在注册表下面位置
HEKY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/Run
写入你需要运行的应用程序即可,如:
[UltraEdit] = "C:/UltraEdit/UEdit32.exe".
 
Billy:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
Reg:Tregistry;
begin
Reg:=Tregistry.Create;//这行编译不通过
Reg.RootKey:=HKEY_LOCAL_MACHINE;
Reg.OpenKey(Software/Microsoft/Windows/CurrentVersion/Run',False);
Reg.WriteString('sysExplr','d:/shenwu/shenwu.EXE');//换成你的
Reg.CloseKey;
Reg.Free;
end;

end.
 
Billy:
var Reg:TRegistry;//这行编译不通过
提示:Undeclared identifier:'TRegistry'.
 
Ygytop:
uses registry;
 
在注 册 表, 找 到HKEY_LOCAL_MACHINE /Software /Microsoft /Windows /CurrentVersion /Run, 就 会 发 现 这 个 秘 密 了, 许 多 自 动 运 行 的 程 序 都 在 这 里。 你 也 可 以 在 这 里 增 加 一 个 键, 让 你 的 程 序 也 随 着 WIN95/98/NT 的 启 动 而 自 己 运 行, 成 为WINDOWS 下 的TSR 程 序。 实 现 方 法 如 下:

首 先, 在Uses 中 加 上Registry 单 元

然 后, 写 下 面 代 码。

{将程序strExeFileName置为自动启动 }
function StartUpMyProgram
( strPrompt,strExeFileName : string ) : boolean;
var
registerTemp : TRegistry;
begin
registerTemp := TRegistry.Create;
//建立一个Registry实例
with registerTemp do
begin
RootKey:=HKEY_LOCAL_MACHINE;
//设置根键值为HKEY_LOCAL_MACHINE
//找到Software/Microsoft/Windows/CurrentVersion/Run
if OpenKey('Software/Microsoft/Windows
/CurrentVersion/Run',True) then
//写入自己程序的快捷方式信息
begin
WriteString( strPrompt, strExeFileName );
result := true;
end
else result := false;
//善后处理
CloseKey;
Free;
end;
end;

{调用StartUpMyProgram,
使Delphi随WINDOWS启动而自动运行 }
procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.lines.add('开始');
if StartUpMyProgram('delphi','C:/Program
Files/borland/delphi3/bin/delphi32.exe') then
memo1.lines.add('成功')
else
memo1.lines.add('失败')
end;
 
; YGYtop,不好意思,忘了一条了,如柳五公子所言。
 
有控件,要不?
 
至少共有十处
注册表:
HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/Run
.../RunService
.../RunOnce ^|__(运行后系统自动删除)
.../RunServiceOnce _|
文件:
win.ini [windows] load= (最小化运行)
win.ini [windows] run=
Autoexec.bat
{windir}/winstart.bat
目录:
{windir}/start menu/programs/startup
{windir}/All users/start menu/programes/startup
 
超级解霸中的检测程序你是否曾经通过检查注册表来删除它?
那么你就可以用 uses registry,然后再通过tregistry来写注册表就行了。
前面的各位已经写清楚了!!!!
我再写也只是废话。
 
呵呵,吹毛求疵一把:各位的代码全部假设//.../../../Run已经存在,
如果不存在的话应该自己创建才对,而不是直接报错,:)
 
RedCat说的地方正确,可以使用Tregistry进行操作。
具体可以去看我制作的启动文件搜索删除系统的源文件。
好像在pchome还有下载。
另外还有极端做法,利用更换Explorer=
的方法替换桌面,下面的事情就自己想了,不过做法太过分
 
Windows启动就运行还有不同的层次:
1。Windows启动,但是在用户登录之前就运行
2。每当用户登录之后就运行(实际上是用户的主Shell,通常是Explorer.exe
每次运行的时候就启动它们)

另外还有Run和RunOnce的区别,不能一概而论
 
我也有类似问题:
在WINDOWS 9X的安全模式下有无启动就运行的方法?(不加在启动项中)
普通的EXE文件可以作为WINDOWS 9X的SERVICE运行吗?
 
我编写了一个控件,就能读写注册表,带原码(delphi)
主页: http://sunhy.126.com
 
这么麻烦干啥?放在WIN.INI或者system.ini文件里不就得了。

或者放在。。。。。winstart.bat中(这个有点问题)
 
#include <Registry.hpp>

TRegistry& regkey=*new TRegistry;
regkey.RootKey=HKEY_LOCAL_MACHINE;
if(regkey.OpenKey("c://software//microsoft//windows//currentversion//run",true)){
regkey.WriteString("程序名","可执行文件名(含路径)");
regkey.CloseKey();
}
delete &regkey;

本方法在C++ Builder中通过.
 
后退
顶部