3

私はSkypeのようなアウェイタイマースタイルのことをやろうとしています。ユーザーが一定期間「不在」の場合、何かをトリガーします。正常に動作するWM_KEYBOARD_LLでSetWindowsHookEx()を使用しています。これは、RDC接続を開いて全画面表示にするまでです。その後、キーボードイベントを取得することはありません。

誰かこれに出くわしますか?または、これを達成するためのより良い方法を知っていますか?私は実際にSkypeをテストしましたが、フルスクリーンRDCを使用すると、RDCを入力すると、AwayからOnlineに正しく移行します。

ありがとう

編集:レイモンド・チェンのコメントの後、私はいくつかのテストを行いました、そして彼は正しいです。調べてみたら、この方法が見つからなかったなんて信じられません。また、WPFアプリでLL_Mouse/KEYBOARDイベントがトリガーされないという問題も解決しました。

再度、感謝します。これに基づいて私の受け入れた答えを更新します。LL_MOUSE / KWYBOARDを実行する必要がある場合は、他の答えも適切です。

4

2 に答える 2

3

をご覧くださいGetLastInputInfo()。定期的に呼び出してみてください。

于 2013-01-30T20:59:38.987 に答える
2

はい。リモートデスクトップでキーが押されることはありません。私はこの問題を抱えていました、そして私が見つけた唯一の解決策はこれでした:

FindWindow APIを使用して、常にRDPウィンドウを探します。フルスクリーンのRDPウィンドウが作成されていることを検出した場合は、次のようにする必要があります。

a)すべてのフックを外します。b)すべてのフックをリセットします。

したがって、SetWindowHookEx API呼び出しを行う関数を作成し、それをSetHookと呼び、別の関数をUnHook関数として呼び出します。次に、ユーザーがリモートデスクトップにアクセスしたことがわかったときに、両方を再度呼び出します。

これで、リモートデスクトップ接続内でもキーを押すことができます。

私は古いコードを見つけました、私はこのようなことをしました:

1秒のタイマーを作成しました。それで

std::string tmp;
HWND hParent = ::FindWindow(TEXT("TSHELLHWND"), NULL);
GetWindowString(hParent, tmp);

ix = za.find(" - Remote Desktop");

if (hParent != NULL && ix != string::npos)
RestartHook();

また、フックを再起動したときに設定するグローバル変数が必要です。そうしないと、常にフックが再起動します。ウィンドウを閉じると、そのグローバル変数をリセットできます。

于 2013-01-30T03:22:33.197 に答える