【问题标题】:Get notified when workstation gets locked当工作站被锁定时收到通知
【发布时间】:2016-12-05 23:18:32
【问题描述】:

在 Windows 系统上按 Win + L 将锁定工作站。 当工作站被锁定时,XUL 插件中是否有办法检测?我可能会检测到按下此组合键,但只有在 XUL 应用程序处于焦点时才会起作用。

当计算机进入睡眠模式(或唤醒)时,有一个sleep_notification 可用。我找不到任何有关锁定工作站的信息。

【问题讨论】:

  • 唯一的选项是 js-ctypes。但是您是否阅读过有关 WebExtensions 的博客?他们将在 2017 年底之前禁止除 webextensions 之外的所有内容 - webext 有一个 api,尽管我认为它可以让你知道屏幕保护程序何时启动。使用 webextension,唯一的方法是通过本地消息传递。
  • Thunderbird、Waterfox 和 Palemoon 将继续使用 XUL,所以这仍然是可行的。 js-ctypes 意味着外部库而不是系统到系统兼容?什么是“原生消息”?
  • js-ctypes 是系统到系统兼容的,但不是平台到平台的。所以你必须为mac、linux和windows做一次。原生消息传递是相似的,除了你使用实际的 C++ 或其他甚至 Javascript(电子应用程序)而不是 js-ctypes,然后它可以做任何事情,你可以通过原生消息传递将它连接到你的扩展。问题是,您必须在您的网站上托管该二进制文件(电子或 C++ 应用程序),并且您的用户现在必须从 AMO 安装您的插件,然后还要去安装您的应用程序商店。一种选择是不使用 AMO,让他在应用程序端加载插件。
  • 我想我找到了一种方法来测试工作站是否被锁定,使用 OpenDesktop (msdn.microsoft.com/en-us/library/windows/desktop/…) 和 SwitchDesktop 如果有人能告诉我如何从 js-ctypes 执行这个,我相信我可以弄清楚其余的。谢谢。

标签: javascript firefox-addon xul xulrunner


【解决方案1】:

找到了一种使用 js-ctypes 的方法(在 Windows 10 上测试):

Components.utils.import("resource://gre/modules/ctypes.jsm");
var lib           = ctypes.open("user32.dll"),
    openDesktop   = lib.declare("OpenDesktopA", ctypes.winapi_abi, ctypes.uint32_t, ctypes.char.ptr, ctypes.uint32_t, ctypes.bool, ctypes.uint32_t),
    switchDesktop = lib.declare("SwitchDesktop", ctypes.winapi_abi, ctypes.bool, ctypes.uint32_t),
    closeDesktop  = lib.declare("CloseDesktop", ctypes.winapi_abi, ctypes.bool, ctypes.uint32_t),
    desktop       = openDesktop("Default", 0, 0, 0x0100),
    isUnLocked    = switchDesktop(desktop);

console.log(isUnLocked);//result false = locked, true = unlocked

closeDesktop(desktop);
lib.close();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多