代码之家  ›  专栏  ›  技术社区  ›  Shawn

即使在计算机锁定时也显示程序?

  •  0
  • Shawn  · 技术社区  · 15 年前

    我有一个程序,偶尔会出现在屏幕上,用vb.net显示消息。有没有办法让它运行和显示,即使计算机被锁定或没有人登录?谢谢。

    4 回复  |  直到 15 年前
        1
  •  3
  •   Michael Kohne    15 年前

    部分解决这个问题的一种方法是编写一个屏幕保护程序,它可以对服务进行消息轮询。服务必须在启动时运行(不是在登录时运行-因为您可能还没有任何人登录!).

    屏幕保护程序必须设置为登录屏幕保护程序和用户的屏幕保护程序,您需要在登录屏幕上设置短屏幕保护程序超时(我不知道这有多简单)。

    这不会让您在登录屏幕上弹出消息,但如果登录屏幕空闲足够长时间,它将进入屏幕保护程序,屏幕保护程序可以显示消息。

    我对运行屏幕保护程序的环境一点也不熟悉,所以我不知道它们有多少访问权限。我假设他们可以在本地机器上打开一个管道或共享内存段,这足以完成任务。

        2
  •  3
  •   Larry Osterman    15 年前

    我知道应用程序可以在登录屏幕上弹出UI的唯一方法是,如果它们使用mb_servicenotification标志调用MessageBox API。该标志用于系统关键消息中,以提醒控制台用户发生了严重错误,因此即使机器被锁定,它也会显示出来。

    这不是一个对话框,它只是一个消息框,因此不存在与消息框相关的真正安全风险。

    使这变得复杂的是,Windows95和WindowsNT对两个标志使用了相同的值-mb_Topmost和mb_ServiceNotification。因此,如果您运行的是专为Windows 95设计的程序,您可能会设置mb_最上面的标志,并在Windows XP(及更高版本)上运行时意外获得mb_服务通知行为。您可以在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
    
        3
  •  1
  •   JaredPar    15 年前

    简单地说,不,没有。

        4
  •  1
  •   Bob Kaufman    15 年前

    如果您未登录或计算机处于屏幕保护程序模式,则程序(例如服务)可以运行,但它无法与屏幕交互。例如,如果你想提醒某人某件事,你可以向另一个设备发送电子邮件/sms/http帖子。