1

Windows 用のリモート コントロール (リモート デスクトップのような) アプリケーションのいくつかのバグを修正しています。また、リモート マシンの画面を空白にする機能もあります。すべてのプログラムは影響を受けずに実行され続けますが、リモート PC のディスプレイを覗いた人には黒い画面しか見えません。

文書化されていないIoCtl request を送信することで実装さIOCTL_VIDEO_SET_OUTPUT_DEVICE_POWER_STATEれます。また、このリクエストは Vista 以降では機能しません。

私がやりたいことをする別の方法はありますか?

実際にSendMessage(-1,WM_SOMMAND,SC_MONITORPOWER,2)はうまくいきますが、誰かがキーボード/マウスをタッチすると画面が元に戻ります。

4

2 に答える 2

1

SC_MONITORPOWER を 2 に設定してWM_SYSCOMMANDを送信できるはずです。残念ながら、私はテスト機能を備えたコンピューターを使用していないため、試していません。

マウス/キーボードに触れるたびに、ウィンドウは再び起動しようとしますが、それらのメッセージをトラップして再送信できるはずです 2.

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam){
    switch (msg){
        ...
        case WM_SYSCOMMAND:
            switch (wParam){
                case SC_MONITORPOWER:
                return 2;
            }
        break;
        ...
    }
}

これはテストされていないことに注意してください。

于 2010-05-26T08:01:30.773 に答える
0

低レベルのキーボードとマウス フックを試すことができます (リモート デスクトップ アプリには既にあるはずです)。SetWindowsHookEx(WH_KEYBOARD_LL)と SetWindowsHookEx(WH_MOUSE_LL) などの低レベルであることを確認してください。

フック コールバック関数内:

  • CallNextHookEx() を呼び出さないでください
  • LowLevelKeyboardProc で-1を返します (実装する必要があります)。LowLevelMouseProc についても同じことを行います。

警告: これにより、コードが CallNextHookEx() を呼び出してコールバック プロシージャで 0 を返すまで、(正しく動作しない場合でも) キーボードが無効になります。

于 2011-01-02T22:36:15.887 に答える