は、(Windowsの10でテスト)JS-ctypesのを使用して方法を見つけた:
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();
唯一のオプションは、JS-ctypesのです。しかし、WebExtensionsに関するブログを読んだことはありますか?彼らは2017年末までにウェブエクステンションを除いてすべてを禁止しようとしています - webextはapiを持っていますが、スクリーンセーバーがいつ来るかを知ることができます。 webextensionでは、これを行うための唯一の方法はネイティブメッセージングによるものです。 – Noitidart
Thunderbird、Waterfox、Palemoonは引き続きXULを使用するため、実行可能です。 js-ctypesは、システム間で互換性がない外部のライブラリを意味しますか? 「ネイティブメッセージング」とは何ですか? – vanowm
js-ctypesは、システムとシステムとの互換性がありますが、プラットフォームからプラットフォームへは互換性がありません。だからあなたはmac、linux、windowsのためにこれを一度やる必要があります。ネイティブメッセージングは、js-ctypesの代わりに、実際のC++やその他のもの、あるいはJavascript(Electronアプリ)を使用していれば、これは何でもできますし、ネイティブメッセージングを使ってこれをあなたの内線に接続することができます。問題は、バイナリ(ElectronまたはC++アプリ)があなたのウェブサイトでそれをホストしなければならないことで、ユーザーはAMOからアドオンをインストールしてから、アプリストアをインストールしてインストールする必要があります。 1つのオプションは、AMOを使用せず、彼がapp側にアドオンを読み込ませることです。 – Noitidart