Come faccio a trovare quello schermo l'applicazione è in esecuzione su in C #
Domanda
Come faccio a determinare che cosa schermo la mia applicazione è in esecuzione su?
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);
}