我想在窗口关闭时运行 exe 或 bat 文件?我想在用户关闭系统时卸载由我的应用程序挂载的几个驱动器。
为此,我需要在关机时执行另一个 exe,这将断开我的应用程序挂载的驱动器。
我得到了一些链接,它们显示我们可以在组策略中创建一个条目,以便在窗口关闭时执行程序。我不确定如何通过 C++ 代码向组策略添加条目。
再次,组策略不适用于 Win Vista。还有其他更好的方法吗?
答案1
除了编写自己的批处理文件来关机并执行您想要的操作之外,您还可以安排任务来执行相同的操作,这样您就不必记住单击快捷方式以特殊方式关机或执行任何其他操作。
使用管理工具 | 任务计划程序,您可以根据系统事件日志中记录的事件来安排任务。关机/重启事件与系统事件日志相关联,源为 USER32,事件 ID 为 1074。当事件日志使用该信息更新时,应该启动计划任务。我在工作中的一台机器上测试了这一点,它运行良好,但我是域中的管理员,不确定您是否会遇到权限问题或其他问题。
答案2
编写一个具有仅消息窗口的程序(HWND_MESSAGE
),然后处理:WM_ENDSESSION
,然后运行你的 bat 文件或执行你想做的事情。
视窗:http://msdn.microsoft.com/en-us/library/ms632599(VS.85).aspx
WM_ENDSESSION:http://msdn.microsoft.com/en-us/library/aa376889(VS.85).aspx
答案3
由于该版本的 Vista 没有安装 GPEDIT.MSC,也许可以找到 GPEDIT 通常为关机脚本生成的条目,并查看这些注册表项是否存在于您的 Vista Home 中?
我这里没有运行 Vista,但在 Server 2003 上进行了初步测试。我启动了 REGMON 并打开了 GPEDIT.MSC,然后编辑了关机脚本。关键更改位于此处:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\State\Machine\Scripts\Shutdown
如果 Vista 上存在该密钥树结构,那么可能只需在具有组策略编辑器的机器上构建条目,导出密钥并将其导入 Vista 即可。纯属猜测,我还没有尝试过。
答案4
您可以编写批处理文件,将您想要在关机前执行的所有命令都包含在内,然后将最后一条命令包含shutdown.exe,语法类似如下:shutdown.exe -s -t 45。在本例中,我使用-s开关告诉命令关闭系统,然后-t开关告诉在45秒内执行。如果任何程序会阻止系统关机,您可能需要使用-f开关强制关闭它们。如果您运行的是Windows XP、Vista或7,则关机命令已经可用。但是,对于任何较旧的版本,您可能需要从微软网站下载。我希望这些信息对您有所帮助!
丹波