如何让程序的自动启动?(50分)

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

yysun

Unregistered / Unconfirmed
GUEST, unregistred user!
Win95/Win98关闭时,如果我的程序是开着的,下次系统启动时,
如何让我的程序自动启动并恢复以前的状态(例如打开某些文件)呢?
 
如需自动启动程序,请将你的程序放在WIN95/98的“启动”程序组中。
恢复状态可在程序启动后将打开的文件名或其他状态信息记录在INI文件或注册表
中。具体使用方法见DELPHI的Help/Examples/Regini目录。
 
谢谢,XiePro,
我的前提是“Win95/Win98关闭时,如果我的程序是开着的 ...",
而不是每次都自动启动啊。
 
很抱歉,我对Windows系统还不熟悉,不知如何利用系统关机这个事件,能利用是上策
变通的办法是:
在你的程序打开后,在注册表或程序配置文件写一个"开"标记,程序正常关闭把它
置关.
而你的程序放在程序放在WIN95/98的“启动”程序组中,启动时首先检查上次开关
标记,如是标记=False,你的程序则马上退出, =True,恢复上次的.....
 
我想老孙的意思是它的程序要象Win95的Folder一样,
可以开机后自动恢复状态。

如果是这个意思的话,恕我直言,你的建议是个典型
的逻辑陷阱,无论如何也行不通的。
 
在注册表中有一个键,叫RUNONCE, 意思即为:只运行一次, 你可先用
REGEDIT找出该键, 然后在你的程序中将你的程序路径名写进该键值,
当正常退出时删除此键, 否则保留.

则下次再启用机器时, 你的程序会被运行,运行后系统自动删去该键.

WINDOWS的FOLDER就是用的这个方法.
 
; 首先,在程序刚运行时,在注册表HKEY_LOCAL_MACHINE
/SOFTWARE/Microsoft/Windows/CurrentVersion/Run中设置
为自动启动;

然后,在程序结束时设置成两种退出方式:

一、由用户选择退出菜单或按钮来结束程序;
二、由Windows95系统关闭时自动结束程序;

对于第一种方式,程序先应删除自动启动设置,然后再
结束运行。可放在退出菜单或按钮OnClick事件;
对于第二种方式,则不删除自动启动设置,立即结束程序。
 
WIN95/98的“启动”程序组是建立在目录“[WINDOWS]/Start Menu/Programs/
启动/”上的,即系统启动时自动运行此目录下的程序或快捷方式。
所以你可以在自己的程序启动后(MainForm.OnCreate事件),进入上述路径建立
或拷贝一个快捷方式;在程序关闭时(MainForm.OnClose事件)删除之。
 
1 先截取ONCLOSE事件,
2 包程序状态加入INI文件或者REGISTRY,可以用TINIFILE,TREGISTRY
3 加入启动
4 自动移出启动
 
咦?yysun,你没有看见tqz自问自答的问题中有一个提醒你注意吗?

不过他那个问题说Delphi对这个EndSession Message Bypass掉了,
我不知道什么意思,应该是可以接收到这个Message的。

见下面这段例子:

TForm1 = class(TForm)
...
procedure EndSMsg(var T : TMessage);message WM_QUERYENDSESSION;
...
end;

procedure TForm1.EndSMsg(var T : TMessage);
begin
// return false if you want to cancel logoff or shutdown
T.result := true;
if T.lparam <> ENDSESSION_LOGOFF then
begin
//shutting down
end else
begin
//loging off
end;
end;

这样再结合liwei说的RUNONCE的方法,应该就万无一失了。
 
我的意思是说在Windows 关闭时,OnClose事件不会被调用,因为FormClose事件
没有调用。不是WM_ENDSESSION 消息没有反应。
我想应该在WM_ENDSESSION 的消息处理中写登记表(RunOnce),因为收到WM_QUERYENDSESSION
不代表windows一定会退出。
 
后退
顶部