8

コントロール パネル用と出力用の 2 つのディスプレイを必要とするアプリケーションを作成しています。私が持っているのはこれです。ディスプレイが1つしかない場合、アプリケーションは両方のフォームを表示しますが、2つある場合、出力フォームはもう一方に移動します。問題は、これがアプリケーションの起動時にのみ発生することです。つまり、2 番目のディスプレイが接続される前にアプリケーションが既に実行されている場合、ユーザーが出力を新しいディスプレイに手動で送信しない限り、何も起こりません (その方法を知っていると仮定します)。私が欲しいのは、新しいディスプレイが接続されたときに、アプリケーションの実行中でも出力フォームが自動的に送信されることです。スレッドでポートをポーリングすることに関係していると思いますが、その方法がわかりません。誰でもそれを行う方法を手伝ってもらえますか? より良い解決策があれば、喜んで歓迎します。

(コードの一部を提供したはずですが、これは電話から入力しています)

4

3 に答える 3

11

こちらをご覧ください: http://msdn.microsoft.com/en-us/library/system.windows.forms.control.wndproc.aspx

あなたを助けるはずの例があります。次のようなことを試してください:

protected override void WndProc(ref Message m) 
{
    const uint WM_DISPLAYCHANGE = 0x007e;

    // Listen for operating system messages. 
    switch (m.Msg)
    {
        case WM_DISPLAYCHANGE:

            // The WParam value is the new bit depth
            uint width = (uint)(m.LParam & 0xffff);
            uint height = (uint)(m.LParam >> 16);
            break;                
    }
    base.WndProc(ref m);
}
于 2012-08-16T10:17:47.770 に答える
1

あなたは使用することができWndProcますScreen.AllScreens.Length

[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")]
    protected override void WndProc(ref Message m)
    {
        if (Screen.AllScreens.Length > 1) //example
        {


        }
        base.WndProc(ref m);
    }

詳しくは:

于 2017-12-03T14:49:38.023 に答える
0

画面数が複数の場合、たとえば2秒ごとにチェックするタイマーを含めることができます。コードは次のようになります。

timer_tick()
{
    if(Screen.AllScreens.Length >= 2)
    {
        //run code to use the second screen
    }
}

C#の初心者にとっては使いやすいです。

于 2012-08-16T09:44:09.447 に答える