2016-12-05 16 views
1

Windowsシステムの場合を入力します。 + ワークステーションをロックします。 ワークステーションがロックダウンされているときにXULアドオンで検出される方法はありますか?おそらく、このキーの組み合わせを押して検出することができますが、それはXULアプリケーションがフォーカスしている場合にのみ機能します。ワークステーションがロックされたときに通知を受け取ります

コンピュータがスリープモード(または起床)に入るときに利用できるのはsleep_notificationです。私はワークステーションのロックに関する情報を見つけることができません。

+0

唯一のオプションは、JS-ctypesのです。しかし、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アプリ)を使用していれば、これは何でもできますし、ネイティブメッセージングを使ってこれをあなたの内線に接続することができます。問題は、バイナリ(ElectronまたはC++アプリ)があなたのウェブサイトでそれをホストしなければならないことで、ユーザーはAMOからアドオンをインストールしてから、アプリストアをインストールしてインストールする必要があります。 1つのオプションは、AMOを使用せず、彼がapp側にアドオンを読み込ませることです。 – Noitidart

答えて

0

は、(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(); 
関連する問題