

Windowsのロック画面中に、USB接続のリモコン操作をトリガーに、  
デスクトップアプリの該当のボタンに「マウスクリック」のSendMessageを送信したい  
と考えています。

[code]

    ※マウスクリック時の処理を直接呼出しが出来れば簡単ですが、
      外部アプリケーションでAPIがないため、
      マウス操作をプログラムで実施して、処理を呼び出す方法を考えています。
    
[/code]

下記に、マウスクリック部のソースを抜粋しますが、  
ロック画面でなければ実現できているため、  
ロック画面中だと、デスクトップにマウス操作は通知できないのかと思います。

実現方法をご存じの方はいないでしょうか。

\---- ソース抜粋 開始 -----

～ USBリモコンのボタンイベントのハンドル部 ～

//マウス左クリックダウン  
SendMessage(クリック対象のボタンハンドル, WM_LBUTTONDOWN, MK_LBUTTON, 0x000A000A);  
//マウス左クリックアップ  
SendMessage(クリック対象のボタンハンドル, WM_LBUTTONUP, 0x00000000, 0x000A000A);

～ USBリモコンのボタンイベントのハンドル部 ～

\----- ソース抜粋 終了 -----


CC BY-SA 3.0
2016-09-09T04:59:19.317
28776
2016-09-09T08:56:46.970
18731
question
c# windows winapi
Windowsがロック画面の状態で、デスクトップアプリにSendMessageを送りたい


結論としてはできませんし、やるべきではありません。

Windowsにはユーザー切り替えの機能がありますが、切り替わっている間、元のユーザーのデスクトップは操作を受け付けていません。  
ロック画面やUACダイアログも同様のことが言えて、元のユーザーのデスクトップは操作を受け付けていません。このデスクトップのことをSecure
Desktopと呼びます。  
仮に質問の内容を実現する場合はSecure
Desktopのマウス入力を取得した上で、その内容を元のデスクトップに対して`SendMessage()`することになります。しかしこれが実現できるとするとパスワードのキー入力も盗聴できることになってしまい、ウイルスそのものと言えます。


CC BY-SA 3.0
2016-09-09T07:15:24.193
28780
2016-09-09T07:15:24.193
4236
28776
answer


sayuriさんが書かれているように、ユーザーが起動したアプリでロック画面の入力を受け取ったり、あるいはロック画面を操作するようなことはできません。ロック画面がというより、[デスクトップ](https://msdn.microsoft.com/en-
us/library/windows/desktop/ms682573\(v=vs.85\).aspx)を超えてメッセージの送受信などを行うことができないようになっています。一方、ロック画面に切り替わった状態でも元のデスクトップで起動したアプリケーション同士はウィンドウメッセージの送受信ができます。

ですから、壁となっているのはメッセージ送信ではなくUSBリモコンからのイベント受信ではないのでしょうか？これをウィンドウメッセージに頼っているとロック画面で受信するのは難しいでしょうし、ソケット通信やシリアル通信であればデスクトップがアクティブでなくとも受信できます。


CC BY-SA 3.0
2016-09-09T08:07:29.573
28782
2016-09-09T08:56:46.970
2016-09-09T08:56:46.970
8000
8000
28776
answer