Domanda

Come faccio a determinare che cosa schermo la mia applicazione è in esecuzione su?

È stato utile?

Soluzione

Questo dovrebbe iniziare. Ottenere un pulsante e una casella di riepilogo in un form e mettere questo nel Button_Click:

listBox1.Items.Clear();
foreach (var screen in Screen.AllScreens)
{
    listBox1.Items.Add(screen);
}
listBox1.SelectedItem = Screen.FromControl(this);            

La risposta è nell'ultima riga, ricordate che un modulo è un controllo troppo.

Altri suggerimenti

La classe System.Windows.Forms.Screen fornisce questo functionaility.

Ad esempio:

Schermo s = Screen.FromPoint (p);

dove p è un punto da qualche parte sulla vostra applicazione (in coordinate dello schermo).

Hmm, non credo che ci sia un costruito in modo per ottenere questo, ma non dovrebbe essere troppo difficile da determinare. Utilizzare il schermo classe per trovare tutte le schermate, ciclo attraverso quella lista e confrontare i propri limiti con la posizione del modulo.

Ecco codice non testato

Screen [] screens = Screen.AllScreens;

for(index = 0; index < screens.Length; index++) {
     if (screens[index].Contains(this.Bounds))
        return screens[index];
}

Date un'occhiata a questi link:

Questi sono in WinAPI. Ci possono essere chiamate più librerie monitor / .NET API, ma se non, con questi è possibile scrivere il proprio.

Bene, sono passati molti anni, ed è derivata la risposta accettata, ma questo ha funzionato per me. Questo metodo è un membro della classe Form. La variabile screen contiene le proprietà dello schermo che l'angolo superiore sinistro del modulo è acceso quando il metodo viene chiamato.

private void ClsFormFoo_Load(object sender, EventArgs e)
{
    Screen screen = Screen.FromControl(this);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top