我有一个程序偶尔弹出屏幕并使用vb.net显示消息。即使计算机已锁定或没有人登录,有没有办法让它运行和显示?感谢。
答案 0 :(得分:3)
部分解决此问题的一种方法是编写可以轮询服务以获取消息的屏幕保护程序。该服务必须在启动时运行(不是在登录时 - 因为您可能还没有人登录!)。
屏幕保护程序必须设置为登录屏幕保护程序以及用户的屏幕保护程序,并且您需要在登录屏幕上设置短屏幕保护程序超时(我不知道它是多么容易)。
这不会让您在登录屏幕上弹出消息,但如果登录屏幕空闲时间足够长,它将屏幕保护,屏幕保护程序可以显示消息。
我对屏幕保护程序运行的环境一点都不熟悉,所以我不知道他们有多少访问权限。我假设他们可以在本地机器上打开管道或共享内存段,这足以完成工作。
答案 1 :(得分:3)
我知道应用程序可以在登录屏幕上弹出UI的唯一方法是,如果他们使用MB_SERVICENOTIFICATION标志调用MessageBox API。该标志旨在用于系统关键消息,以警告控制台上的用户出现可怕的错误,以便即使机器被锁定也会显示。
这不是一个对话框,它只是一个消息框,因此消息框没有真正的安全风险。
使这一复杂化的原因是Windows 95和Windows NT对两个标志使用相同的值 - MB_TOPMOST和MB_SERVICENOTIFICATION。因此,如果您运行的是为Windows 95设计的程序,则可以设置MB_TOPMOST标志,并在Windows XP(及更高版本)上运行时意外获得MB_SERVICENOTIFICATION行为。您可以在winuser.h中的MB_SERVICENOTIFICATION标志的定义中看到这一点:
#define MB_TOPMOST 0x00040000L
#ifdef _WIN32_WINNT
#if (_WIN32_WINNT >= 0x0400)
#define MB_SERVICE_NOTIFICATION 0x00200000L
#else
#define MB_SERVICE_NOTIFICATION 0x00040000L
#endif
#define MB_SERVICE_NOTIFICATION_NT3X 0x00040000L
#endif
答案 2 :(得分:1)
简单地说,没有。
答案 3 :(得分:1)
如果您没有登录或机器处于屏幕保护模式,程序(例如服务)可以运行,但它无法与屏幕交互。例如,如果您想提醒某人注意某事,可以将电子邮件/短信/ HTTP POST发送到另一台设备。