2016-12-05 5 views
1

При нажатии системы Windows Win + L заблокирует рабочую станцию. Есть ли способ обнаружения XUL-аддона, когда рабочая станция заблокирована? Вероятно, я мог бы обнаружить нажатие этой комбинации клавиш, но это будет работать, только если приложение XUL сосредоточено.Получить уведомление, когда рабочая станция заблокирована

Доступно, если компьютер перейдет в спящий режим (или просыпается), есть sleep_notification. Я не могу найти информацию о блокировке рабочей станции.

+0

опция Только JS-ctypes. Но вы читали блог о WebExtensions? Они собираются запретить все, кроме webextensions, к концу 2017 года - webext имеет api, хотя это позволяет узнать, когда заставка заходит, я думаю. С расширением webextension, единственный способ сделать это - через собственный обмен сообщениями. – Noitidart

+0

Thunderbird, Waterfox и Palemoon будут продолжать использовать XUL, так что это по-прежнему жизнеспособно. js-ctypes будет означать внешние либерри, а не совместимость с системой к системе? А что такое «родной обмен сообщениями»? – vanowm

+0

js-ctypes - это система, совместимая с системой, но не платформа для платформы. Поэтому вам нужно сделать это один раз для mac, linux и windows. Собственная передача сообщений аналогична, за исключением того, что вместо js-ctypes вы используете фактический C++ или любой другой или даже Javascript (приложение Electron), а затем это может что-то сделать, и вы можете подключить его к вашему расширению через встроенный обмен сообщениями. Проблема заключается в том, что это двоичное (электронное или C++-приложение), которое вы должны разместить на своем веб-сайте, и теперь вашим пользователям необходимо установить свой аддон из AMO, а затем пойти и установить свой магазин приложений. Один из вариантов - не использовать AMO и иметь приложение, загружающее аддон. – Noitidart

ответ

0

Найден способ с помощью 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();