我想显示长时间运行的批次的气球通知。
我知道您可以显示弹出窗口(并且一些解决方案非常有想象力),但也有这个选项会很有趣。
有没有办法从批处理文件中显示气球通知?请至少从 Windows 7 开始,但也欢迎 XP。
我想至少需要一个托盘图标,但坦率地说,我不能走得更远。也许与rundll32.exe
?我知道这不是从命令行执行任何操作的推荐方法。
此知识库文章中记录了 rundll32.exe 调用的函数所需的函数签名。 这并没有阻止人们使用 rundll32 调用并非设计为由 rundll32 调用的随机函数,例如 user32 LockWorkStation 或user32 ExitWindowsEx。
但我发现Yaniv Pessach的这个RunAnyDll 实用程序似乎可以正确调用 .dll。不幸的是,我没有找到测试它的有效链接(不,它不在 Internet 档案中)。我写信给作者要他一份。让我们来看看。
(我什至不知道它是否有用,但它是一个有趣的实用程序。也许它可以使这个弹出问题的答案Run
起作用。我认为框和命令行执行之间的区别与调用约定有关Raymond Chen 帖子中的内容。)
另一个无法找到的测试实用程序是已弃用的事件触发器,但我再次不确定它是否有帮助。
编辑以澄清:
npocmaka和greg zakharov的答案都非常有趣。npocmaka的那个更接近我的要求,因为它会产生一个气球通知。greg zakharov使用了不同的技术,但其结果非常相似(在这种情况下,文本出现在鼠标指针位置)。我已经在 XP 中对它们进行了测试,并且都可以工作(安装了 .NET)。两者都有超时,我不知道如何在用户点击之前保留通知(以防万一用户不在但你想看到它)。
理想情况下,我的问题是关于得到这样的东西。
@echo off
echo Some long part job that goes well.
call :balloon "Report about above tasks" [optional parameters about icon, title, timeout, etc.]
echo More tasks but one fails
if errorlevel 1 call :balloon "Error this and that" [optional parameters]
echo This is the end of the tasks
goto :eof
:balloon
echo If you don't want to make a temporary file
echo then you must make one-liner calls to PowerShell, wscript or whatever.
exit /b
因此,作为混合脚本,我看到的缺点是在任何批处理中插入它一定非常困难。.exe
如果要在批处理中重复使用多次,则为每个气球生成一个似乎不切实际,因此,最后,正如greg zakharov所说,只生成一个接受参数并重复使用它的 .exe 会更加健壮和灵活(就像notifu)。最后,我认为使用进行:balloon
单行 powershell 调用的子例程是你能得到的最好的(在 XP 中几乎是原生的,因为你需要下载但你也需要 .net)。