

常駐アプリを作成し、Windowsの画面ロック中にSendInputでNumキーの押下を  
シミュレートしてもキーボードのNumLockのLEDが変わりません。  
（Windowsが認識していないようです。）

画面ロック中はSendInputによるキー処理は出来ないのでしょうか？

環境はVisual C++です。


CC BY-SA 3.0
2015-08-13T08:35:24.700
14361
2015-08-13T10:02:49.573
2015-08-13T09:10:12.070
8000
8328
question
c++ windows winapi
ロック画面中のSendInputについて


おそらく無理です。

Windowsではウィンドウなどを束ねて他と分離するDesktopというものがあります。Desktopは複数存在することができ、ログオン画面やスクリーンセーバーも普段のUIとは別のDesktopを使っています。

で、今回ログオン画面のセキュリティがとかUIPIがとかを疑って色々試してみましたが、ログオン画面に限らず、プロセスが属するDesktopがアクティブでない間はSendInputがうまく動かないようです。

Desktopについてはこの辺を参考に： [CreateDesktopによる仮想デスクトップ -
kkAyatakaのメモ帳。](http://kkayataka.hatenablog.com/entry/2014/10/10/170028)

また、英語版SOでは以下の回答を見かけました。

> However, since the desktop is now inactive, it cannot receive input.
> GetForegroundWindow will return NULL (IIRC), and you can't use SendInput any
> longer, since input now belongs to [a thread on] a different desktop; no
> controls on that inactive desktop can receive focus.
>
> [What happens 'behind' the windows lock
> screen?](https://stackoverflow.com/a/9565714) のBrendanMcK氏の回答より引用

普段SendInputで送ったキーストロークがどのように処理され、Desktopが違うと何故無理なのかという詳細な機序はいまだつかめていませんが、[セキュリティ上の観点からGUIオブジェクトを分離するための機能](https://msdn.microsoft.com/en-
us/library/windows/desktop/ms687098\(v=vs.85\).aspx)のようなのでまあ納得はできるかなというところです。


CC BY-SA 3.0
2015-08-13T10:02:49.573
14365
2015-08-13T10:02:49.573
2017-05-23T12:38:55.250
-1
8000
14361
answer