2

デュアル モニター設定を使用するアプリケーションがあります。ユーザー A はモニター 1 で作業し、ユーザー B は同時にモニター 2 で作業します。モニター 2 はタッチ スクリーン デバイスです。

さて、問題は、ユーザー A が自分の画面に何かを入力したときに、ユーザー B が何かをしようとすると、ユーザー A は自分のウィンドウからフォーカスを失うことになり、悲惨なことになります。

ユーザー B がモニター 2 で何かを行った場合でも、モニター 1 のウィンドウにフォーカスを維持するための適切な解決策は何でしょうか?

4

5 に答える 5

5

多少のエルボーグリースで可能です。タッチ スクリーンに表示されるフォームにこのコードを貼り付けます。

protected override CreateParams CreateParams {
  get {
    const int WS_EX_NOACTIVATE = 0x08000000;
    CreateParams param = base.CreateParams;
    param.ExStyle |= WS_EX_NOACTIVATE;
    return param;
  }
}

これにより、フォームがメイン フォームからフォーカスを奪うことはありません。次のようにします。

  public partial class Form1 : Form {
    public Form1() {
      InitializeComponent();
      Thread t = new Thread(SecondMonitor);
      t.IsBackground = true;
      t.SetApartmentState(ApartmentState.STA);
      t.Start();
    }
    private void SecondMonitor() {
      Form2 f2 = new Form2();
      f2.StartPosition = FormStartPosition.Manual;
      f2.Left = 800;   // Use Screen class here...
      f2.ShowDialog();
    }
于 2008-12-24T14:21:31.483 に答える
4

私には、2台のPCが必要なように思えます...または、PCでVMをホストし、USBビデオ「カード」を介してVMに2番目のモニターへのアクセスを許可します(適切な用語ではありません)。ほとんどの最新の VM では、USB 転送が可能です。

ほとんどの場合、マルチヘッド ディスプレイは、1 人のユーザーに多くの画面領域を提供するため、またはディスプレイのみの機能として使用されます (たとえば、大規模なインフラストラクチャ セットアップでライブ ネットワーク/サーバー統計を表示するなど)。

于 2008-12-24T10:48:52.927 に答える
1

私はタッチ スクリーンを扱ったことはありませんが、タッチ スクリーンはマウスのように機能すると思いがちです。これが本当なら、Windows フックを使用してイベントをキャプチャできるのではないかと思います。イベントがキーボードからのものである場合 (これは単一であると想定しています)、最初のウィンドウに向けます。イベントがマウスからのものである場合は、その座標を確認します (または、デバイス ID がある場合は、わかりません)。最初のウィンドウ内にある場合は、直接入力します。2 番目の画面にある場合は、2 番目のウィンドウに直接入力します。

画面がマウスに似ていない場合は、別の方法でフックを配置できると思います。

これが機能するかどうかはわかりません。それは単なる概念的な考えです。

編集:もちろん、最初の画面でメッセージを受信するアプリケーションを特定する必要があります。ユーザーがオントップアプリケーションを開かない限り、Zオーダーが役立つと思います。OnFocus メッセージ (または同様のもの) を追跡して、どのアプリケーションがフォーカスを取得しているか (他のアプリを除く) を追跡することをお勧めします。

(この方法の欠点を説明するコメントは大歓迎です!)

于 2008-12-24T12:36:15.487 に答える
1

フォーカスの問題を発生させずに、2 人のユーザーが同じデスクトップ環境に同時にアクセスできるようにする方法がわかりません。考えてみると、2 つのアプリケーション (またはこの場合、2 つのユーザー「領域」を持つ 1 つのアプリ) を許可すると、常に問題が発生します。アプリケーションは、どの入力デバイスが最近どの領域で動作したかを追跡する必要があるためです。画面。

デバイスごとに入力をフィルタリングし、それぞれの入力を別々のコントロール セットに送信する機能を追加できる かもしれませんが、それにはドライバー レベルの作業が必要になると思います。

于 2008-12-24T11:00:58.643 に答える
0

真似できないの?両方のモニターにまたがり、作業中のウィンドウのコンテナーとして機能する 1 つのウィンドウがありますか?

于 2008-12-24T17:00:00.383 に答える