我知道你可以显示弹出窗口(有些解决方案非常富有想象力),但也很有趣能够拥有这个选项。
是否有一种方法可以从批处理文件中显示气球通知?请至少从Windows 7开始,但XP也欢迎。
我想这至少需要一个托盘图标,但坦率地说,我不能走得更远了。也许可以用
rundll32.exe
?我知道这不是从命令行执行任何操作的推荐方式。这篇知识库文章记录了rundll32.exe调用函数所需的函数签名。但是,这并没有阻止人们使用rundll32来调用未设计为被rundll32调用的随机函数,例如user32 LockWorkStation或user32 ExitWindowsEx。但我发现Yaniv Pessach的RunAnyDll实用程序似乎可以正确地进行.dll调用。不幸的是,我找不到一个可行的链接来测试它(不,它不在互联网档案馆中)。我已经写信给作者请求一个链接。让我们看看吧。
(我甚至不知道它是否有用,但它是一个有趣的实用工具。也许它可以使this answer对弹出问题起作用。我认为Run
框和命令行执行之间的区别与雷蒙德·陈文章中的调用约定有关。)
另一个无法找到的实用程序是已弃用的eventtriggers,但我也不确定它是否有帮助。
编辑以澄清:
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)。